GPU 프로그래밍

CUDA에서 블록과 SM(스트리밍 멀티프로세서)의 관계로 올바른 것은?

  1. A하나의 블록의 스레드는 모든 SM에 분산되어 실행된다
  2. BSM의 수와 블록의 수는 반드시 같아야 한다
  3. C각 블록은 하나의 SM에 할당되어 끝까지 거기서 실행되며, 하나의 SM에는 여러 블록이 동시에 올라갈 수 있다
정답과 해설 보기

정답: C. 각 블록은 하나의 SM에 할당되어 끝까지 거기서 실행되며, 하나의 SM에는 여러 블록이 동시에 올라갈 수 있다

GPU는 다수의 SM을 가지며, 커널의 블록을 비어 있는 SM에 차례로 할당합니다. 하나의 블록은 하나의 SM에서 실행되므로 블록 안의 스레드는 그 SM의 공유 메모리를 사용할 수 있고 동기화도 할 수 있습니다. 블록 수를 SM 수보다 충분히 많게 해 두면 GPU 규모가 달라도 모든 SM에 작업이 돌아가고, 끝난 SM에는 다음 블록이 할당됩니다.

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

GPU 프로그래밍의 다른 문제

  1. CUDA에서 커널 도중에 다른 모든 블록의 계산이 끝나기를 기다린 뒤 다음 단계로 진행하고 싶다. 일반적인 방법은?
  2. GPU에서 픽셀 값의 히스토그램을 만들 때, 모든 스레드가 글로벌 메모리의 256개 빈(bin)에 atomicAdd로 직접 더하면 느린 경우가 있다. 개선 방법으로 올바른 것은?
  3. GPU에서 다수 값의 총합을 구할 때, 트리 형태의 리덕션(이웃끼리 더해 절반으로 줄이는 것을 반복)을 사용하는 이유로 올바른 것은?
  4. 1024개의 값을 트리 형태의 리덕션으로 합산할 때 필요한 단계 수는 몇 개인가?
  5. 단일 GPU를 사용하는 프로그램에서 CPU 측 메모리와 GPU 측 메모리에 대해 일반적으로 올바른 것은?

이 분야의 비교