나는 온라인에서 찾은 일부 코드를 분석하려고하는데, 나는 계속해서 자신을 구석으로 생각하고있다. 다음 매개 변수로 시작한 히스토그램 커널을보고 있습니다.이 CUDA 커널 시작 매개 변수 이해하기
histogram<<<2500, numBins, numBins * sizeof(unsigned int)>>>(...);
매개 변수가 격자, 블록, 공유 메모리 크기라는 것을 알고 있습니다.
즉, numBins
개의 스레드가 각각 2500 개 블록이고 각 블록의 스레드에 공유 메모리가 numBins * sizeof(unsigned int)
개 있습니다.
또한 커널 내부에서 __syncthreads()
에 대한 호출이 있고 numBins
의 2500 세트가 커널 호출 중에 __syncthreads()
에 호출됩니까?
첫 번째 질문 : 예.두 번째 질문 : 다른 블록의 스레드와 독립적 인 2500 블록 안에있는 스레드는 블록의 모든 스레드가 해당 시점까지 공유 메모리에 대한 업데이트를 완료하고 도착할 때까지 '__syncthreads()'지점에 도달 할 것입니다. 그런 다음 계속 실행하십시오. 블록 안의 모든 쓰레드는'__syncthreads()'를보고,'__syncthreads()'*에 대한'numBins' 호출은 2500 세트라고 말할 수 있습니다.하지만 일반적인 함수 호출과는 다릅니다. 블록 내 스레드 동기화를위한 장벽 루틴입니다. – Farzad