GPU 프로그래밍

32×32 float 표를 공유 메모리에 두고 워프의 32개 스레드로 열 방향(세로)으로 읽으면 뱅크 충돌이 발생한다. 자주 사용되는 대책은?

  1. A표를 32×32 그대로 두고 읽는 순서를 무작위로 한다
  2. B공유 메모리 사용을 그만두고 모두 글로벌 메모리에서 읽는다
  3. C표를 32×33처럼 한 열 더 확보하여 행마다 뱅크 위치를 어긋나게 한다
정답과 해설 보기

정답: C. 표를 32×33처럼 한 열 더 확보하여 행마다 뱅크 위치를 어긋나게 한다

한 행이 32개의 float(128바이트)이면 어느 행이나 같은 뱅크에서 시작하므로, 같은 열의 요소는 모두 같은 뱅크에 들어가 세로로 읽으면 32개 스레드가 하나의 뱅크에 몰립니다. 한 행을 33개로 하면 행이 하나 진행될 때마다 뱅크가 하나씩 어긋나므로, 같은 열의 32개가 모두 다른 뱅크에 흩어져 1회로 읽을 수 있습니다. 사용하지 않는 한 열 분량의 메모리를 추가할 뿐인 간단한 방법입니다.

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

GPU 프로그래밍의 다른 문제

  1. GPU에서 큰 행렬의 곱을 계산할 때, 행렬을 작은 타일로 나누어 공유 메모리에 읽어 들이는 이유로 올바른 것은?
  2. GPU 커널에서 스레드당 레지스터 사용량이 너무 많을 때 일어날 수 있는 일로 올바른 것은?
  3. GPU의 점유율(occupancy)에 대한 설명으로 올바른 것은?
  4. GPU가 메모리의 긴 지연(수백 클럭)을 숨기는 주된 방법으로 올바른 것은?
  5. GPU의 점유율에 대해 올바른 것은?

이 분야의 비교