GPU 프로그래밍
위와 같은 루프(그리드 스트라이드 루프)로 커널을 작성할 때의 이점으로 올바른 것은?
for (int i = blockIdx.x * blockDim.x + threadIdx.x;
i < n;
i += blockDim.x * gridDim.x)
y[i] = a * x[i] + y[i];
- A루프를 사용하면 메모리 병합 접근이 되지 않는다
- B실행하는 스레드 수가 요소 수보다 적어도, 각 스레드가 전체 스레드 수 간격으로 여러 요소를 처리하여 모든 요소를 다룰 수 있다
- C스레드가 1개만 동작하게 된다
정답과 해설 보기
정답: B. 실행하는 스레드 수가 요소 수보다 적어도, 각 스레드가 전체 스레드 수 간격으로 여러 요소를 처리하여 모든 요소를 다룰 수 있다
전체 스레드 수(blockDim.x×gridDim.x)만큼 번호를 진행시키며 반복하므로, 스레드 수가 얼마이든 전체 요소를 빠짐없이 처리할 수 있습니다. GPU의 SM 수에 맞춘 적당한 수의 블록으로 실행할 수 있고, 스레드 생성 부담도 줄어듭니다. 각 반복에서 인접한 스레드가 인접한 요소를 다루므로 메모리 병합 접근도 유지됩니다.