GPU 프로그래밍
GPU에서 큰 행렬의 곱을 계산할 때, 행렬을 작은 타일로 나누어 공유 메모리에 읽어 들이는 이유로 올바른 것은?
- A글로벌 메모리에서 읽은 데이터를 공유 메모리에서 여러 번 재사용하여 느린 메모리 접근 횟수를 줄이기 위해
- B행렬의 값을 작게 하여 오버플로를 방지하기 위해
- C계산 횟수를 줄여 결과를 근사하기 위해
정답과 해설 보기
정답: A. 글로벌 메모리에서 읽은 데이터를 공유 메모리에서 여러 번 재사용하여 느린 메모리 접근 횟수를 줄이기 위해
행렬 곱에서는 같은 요소가 여러 번 계산에 사용됩니다. 단순하게 작성하면 각 스레드가 매번 글로벌 메모리에서 다시 읽으므로 메모리 대역폭이 부족해집니다. 타일로 나누어 공유 메모리에 읽어 들이면 블록의 모든 스레드가 그 타일을 여러 번 사용할 수 있으므로, 글로벌 메모리에서 읽는 양이 타일 크기에 비례하여 줄어듭니다. CPU 캐시에서의 블로킹(타일링)과 같은 발상입니다.