GPU 프로그래밍

CUDA 공유 메모리의 뱅크 충돌에 대한 설명으로 올바른 것은?

  1. A두 개의 GPU가 같은 은행 계좌를 사용하는 문제
  2. B공유 메모리 용량이 부족해져 프로그램이 멈추는 문제
  3. C공유 메모리는 32개의 뱅크로 나뉘어 있어, 워프의 여러 스레드가 같은 뱅크의 서로 다른 주소를 동시에 읽으면 접근이 순차적으로 이루어져 느려진다
정답과 해설 보기

정답: C. 공유 메모리는 32개의 뱅크로 나뉘어 있어, 워프의 여러 스레드가 같은 뱅크의 서로 다른 주소를 동시에 읽으면 접근이 순차적으로 이루어져 느려진다

공유 메모리는 4바이트마다 순서대로 할당된 32개의 뱅크로 이루어져 있으며, 각 뱅크는 한 번에 하나의 주소만 읽고 쓸 수 있습니다. 워프의 32개 스레드가 서로 다른 뱅크를 사용하면 1회로 끝나지만, 2개 스레드가 같은 뱅크의 다른 주소를 사용하면 2회로 나뉩니다. 예를 들어 32요소 간격으로 읽으면 모두가 같은 뱅크에 몰려 32회로 나뉘고 맙니다. 모두가 같은 주소를 읽는 경우에는 일제히 배포(브로드캐스트)되므로 충돌하지 않습니다.

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

GPU 프로그래밍의 다른 문제

  1. 32×32 float 표를 공유 메모리에 두고 워프의 32개 스레드로 열 방향(세로)으로 읽으면 뱅크 충돌이 발생한다. 자주 사용되는 대책은?
  2. GPU에서 큰 행렬의 곱을 계산할 때, 행렬을 작은 타일로 나누어 공유 메모리에 읽어 들이는 이유로 올바른 것은?
  3. GPU 커널에서 스레드당 레지스터 사용량이 너무 많을 때 일어날 수 있는 일로 올바른 것은?
  4. GPU의 점유율(occupancy)에 대한 설명으로 올바른 것은?
  5. GPU가 메모리의 긴 지연(수백 클럭)을 숨기는 주된 방법으로 올바른 것은?

이 분야의 비교