GPU 프로그래밍

GPU에서 큰 행렬의 곱을 계산할 때, 행렬을 작은 타일로 나누어 공유 메모리에 읽어 들이는 이유로 올바른 것은?

  1. A글로벌 메모리에서 읽은 데이터를 공유 메모리에서 여러 번 재사용하여 느린 메모리 접근 횟수를 줄이기 위해
  2. B행렬의 값을 작게 하여 오버플로를 방지하기 위해
  3. C계산 횟수를 줄여 결과를 근사하기 위해
정답과 해설 보기

정답: A. 글로벌 메모리에서 읽은 데이터를 공유 메모리에서 여러 번 재사용하여 느린 메모리 접근 횟수를 줄이기 위해

행렬 곱에서는 같은 요소가 여러 번 계산에 사용됩니다. 단순하게 작성하면 각 스레드가 매번 글로벌 메모리에서 다시 읽으므로 메모리 대역폭이 부족해집니다. 타일로 나누어 공유 메모리에 읽어 들이면 블록의 모든 스레드가 그 타일을 여러 번 사용할 수 있으므로, 글로벌 메모리에서 읽는 양이 타일 크기에 비례하여 줄어듭니다. CPU 캐시에서의 블로킹(타일링)과 같은 발상입니다.

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

GPU 프로그래밍의 다른 문제

  1. GPU 커널에서 스레드당 레지스터 사용량이 너무 많을 때 일어날 수 있는 일로 올바른 것은?
  2. GPU의 점유율(occupancy)에 대한 설명으로 올바른 것은?
  3. GPU가 메모리의 긴 지연(수백 클럭)을 숨기는 주된 방법으로 올바른 것은?
  4. GPU의 점유율에 대해 올바른 것은?
  5. CUDA에서 블록과 SM(스트리밍 멀티프로세서)의 관계로 올바른 것은?

이 분야의 비교