GPU 프로그래밍
스레드 블록 하나당 스레드 수의 상한이 1024개인 GPU에서 blockDim.x를 2048로 하여 CUDA 커널을 실행했다. 일반적으로 어떻게 되는가?
- AGPU가 자동으로 1024개씩 두 개의 블록으로 나누어 실행한다
- B처음 1024개의 스레드만 실행되고 나머지는 무시된다
- C실행 설정이 잘못된 것으로 처리되어 커널은 실행되지 않고 오류가 반환된다
정답과 해설 보기
정답: C. 실행 설정이 잘못된 것으로 처리되어 커널은 실행되지 않고 오류가 반환된다
스레드 블록의 스레드는 모두 하나의 SM에 동시에 올라가 공유 메모리나 __syncthreads()로 협력할 수 있어야 하므로, 블록 하나당 스레드 수에는 상한이 있습니다. 상한을 넘는 설정으로 실행하면 커널은 스레드가 하나도 실행되지 않고, 실행 설정이 잘못되었음을 나타내는 오류가 됩니다. 커널 실행은 값을 반환하지 않으므로 cudaGetLastError() 등으로 오류를 확인하지 않으면 결과 배열이 갱신되지 않았다는 사실을 알아차리기 어렵습니다. 2048개분의 작업은 1024개 이하의 블록을 여러 개 실행하여 분담시킵니다.