안녕하세요, 나는 바이트를 비교할 필요가 커널 기능이 있습니다. 검색하고자하는 영역을 블록으로 나누어 4k 바이트의 배열을 4k/256 = 16 블록으로 나눕니다. 블록의 각 스레드는 idx에 배열을 읽어서 다른 배열과 비교합니다. 여기서 내가 찾고자하는 것이 있습니다. 두 가지 방법으로이 작업을 수행했습니다 :CUDA 공유 메모리가 글로벌보다 빠르지 않습니까?
1. 전역 메모리의 데이터를 비교하지만 블록의 스레드는 종종 동일한 주소를 읽어야합니다.
2. 전역 메모리에서 공유 메모리로 데이터를 복사하고 위에서 언급 한 것과 같은 방식으로 공유 메모리의 바이트를 비교하십시오. 동일한 주소 읽기 문제가 여전히 있습니다. 공유 메모리에 복사는 다음과 같습니다 : 코드의
myArray[idx] = global[someIndex-idx];
whatToSearch[idx] = global[someIndex+idx];
나머지는 동일합니다. 예제 2의 데이터 조작 만 공유 배열에서 수행됩니다.
그러나 첫 번째 옵션은 공유 메모리를 사용하는 것보다 약 10 % 빠릅니다. 왜 ?? 설명해 주셔서 감사합니다.
전체 예제를 게시하십시오. 그것없이 모든 현재의 답변은 순수한 추측입니다. 아래 답변에 대한 귀하의 의견은 당신이하는 일을 분명히하기에 충분하지 않습니다. – harrism