GPU 프로그래밍
32×32 float 표를 공유 메모리에 두고 워프의 32개 스레드로 열 방향(세로)으로 읽으면 뱅크 충돌이 발생한다. 자주 사용되는 대책은?
- A표를 32×32 그대로 두고 읽는 순서를 무작위로 한다
- B공유 메모리 사용을 그만두고 모두 글로벌 메모리에서 읽는다
- C표를 32×33처럼 한 열 더 확보하여 행마다 뱅크 위치를 어긋나게 한다
정답과 해설 보기
정답: C. 표를 32×33처럼 한 열 더 확보하여 행마다 뱅크 위치를 어긋나게 한다
한 행이 32개의 float(128바이트)이면 어느 행이나 같은 뱅크에서 시작하므로, 같은 열의 요소는 모두 같은 뱅크에 들어가 세로로 읽으면 32개 스레드가 하나의 뱅크에 몰립니다. 한 행을 33개로 하면 행이 하나 진행될 때마다 뱅크가 하나씩 어긋나므로, 같은 열의 32개가 모두 다른 뱅크에 흩어져 1회로 읽을 수 있습니다. 사용하지 않는 한 열 분량의 메모리를 추가할 뿐인 간단한 방법입니다.