GPU 프로그래밍

CUDA 커널에서 위의 식으로 각 스레드의 번호 i를 구한다. blockIdx.x=2, blockDim.x=256, threadIdx.x=5인 스레드의 i는 얼마인가?

int i = blockIdx.x * blockDim.x + threadIdx.x;
  1. A517
  2. B263
  3. C2565
정답과 해설 보기

정답: A. 517

blockIdx.x는 그리드 내 블록 번호, blockDim.x는 블록당 스레드 수, threadIdx.x는 블록 내 스레드 번호입니다. 블록 0이 0~255, 블록 1이 256~511을 담당하므로 블록 2의 5번째 스레드는 2×256+5=517이 됩니다. 이 식으로 모든 스레드에 겹치지 않는 일련번호를 부여하여 담당할 배열 요소를 정합니다.

이 분야 연습하기 분야로 돌아가기

GPU 프로그래밍의 다른 문제

  1. 요소 수 1000인 배열을 블록당 256스레드, 스레드당 1요소씩 처리하려 한다. 실행할 블록 수로 올바른 것은?
  2. 위 CUDA 커널에 "if (i < n)"을 넣은 이유로 올바른 것은?
  3. NVIDIA GPU에서 32개의 스레드를 하나의 묶음으로 하여 같은 명령을 일제히 실행하는 단위를 무엇이라 하는가?
  4. GPU의 SIMT(단일 명령·다중 스레드) 방식과 CPU의 SIMD 명령의 차이로 올바른 것은?
  5. 하나의 워프 안에서 조건 분기에 의해 스레드의 절반이 if 쪽, 나머지 절반이 else 쪽으로 갈라졌다(워프 다이버전스). 일반적으로 어떻게 실행되는가?

이 분야의 비교