GPU 프로그래밍

위와 같은 루프(그리드 스트라이드 루프)로 커널을 작성할 때의 이점으로 올바른 것은?

for (int i = blockIdx.x * blockDim.x + threadIdx.x;
     i < n;
     i += blockDim.x * gridDim.x)
    y[i] = a * x[i] + y[i];
  1. A루프를 사용하면 메모리 병합 접근이 되지 않는다
  2. B실행하는 스레드 수가 요소 수보다 적어도, 각 스레드가 전체 스레드 수 간격으로 여러 요소를 처리하여 모든 요소를 다룰 수 있다
  3. C스레드가 1개만 동작하게 된다
정답과 해설 보기

정답: B. 실행하는 스레드 수가 요소 수보다 적어도, 각 스레드가 전체 스레드 수 간격으로 여러 요소를 처리하여 모든 요소를 다룰 수 있다

전체 스레드 수(blockDim.x×gridDim.x)만큼 번호를 진행시키며 반복하므로, 스레드 수가 얼마이든 전체 요소를 빠짐없이 처리할 수 있습니다. GPU의 SM 수에 맞춘 적당한 수의 블록으로 실행할 수 있고, 스레드 생성 부담도 줄어듭니다. 각 반복에서 인접한 스레드가 인접한 요소를 다루므로 메모리 병합 접근도 유지됩니다.

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

GPU 프로그래밍의 다른 문제

  1. CUDA 상수 메모리(constant memory)가 특히 빠르게 동작하는 것은 어떤 접근일 때인가?
  2. GPU 캐시에 대해 CPU와 비교한 일반적인 특징으로 올바른 것은?
  3. NVIDIA 이외의 GPU에서도 사용할 수 있는, GPU 등의 병렬 계산을 위한 프로그래밍 체계의 예로 올바른 것은?
  4. GPU에서 조건에 맞는 요소만 배열에서 골라 다른 배열에 채워 넣어 출력하고 싶다(각 스레드의 출력 수는 0 또는 1). 각 스레드의 쓰기 위치 주소를 정하는 데 자주 사용되는 병렬 계산은?
  5. GPU 커널을 작성할 때 지켜야 할 전제로 올바른 것은?

이 분야의 비교