GPU 프로그래밍

입자의 위치 x, y, z를 가진 데이터를 GPU에서 처리할 때, 메모리 병합 접근 측면에서 유리한 배치는?

  1. A입자별로 x, y, z를 나열한 구조체 배열로 한다
  2. B모든 값을 무작위 순서로 배치한다
  3. Cx만의 배열, y만의 배열, z만의 배열로 나눈다(구조체의 배열이 아닌, 배열의 구조체)
정답과 해설 보기

정답: C. x만의 배열, y만의 배열, z만의 배열로 나눈다(구조체의 배열이 아닌, 배열의 구조체)

구조체 배열(AoS)에서는 입자 0의 x·y·z, 입자 1의 x·y·z…로 나열되므로, 각 스레드가 x를 읽으면 주소가 12바이트씩 띄엄띄엄 떨어집니다. 배열의 구조체(SoA)로 만들어 x만 연속해서 배치하면 인접한 스레드가 인접한 주소의 x를 읽으므로 병합 접근이 됩니다. CPU의 SIMD에서도 같은 이유로 SoA가 유리한 경우가 많습니다.

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

GPU 프로그래밍의 다른 문제

  1. CUDA 공유 메모리(shared memory)의 특징으로 올바른 것은?
  2. CUDA의 __syncthreads()의 역할로 올바른 것은?
  3. CUDA에서 __syncthreads()를 "if (threadIdx.x < 16)" 안에 써서 일부 스레드만 통과하도록 했다. 일어날 수 있는 일로 올바른 것은?
  4. CUDA 공유 메모리의 뱅크 충돌에 대한 설명으로 올바른 것은?
  5. 32×32 float 표를 공유 메모리에 두고 워프의 32개 스레드로 열 방향(세로)으로 읽으면 뱅크 충돌이 발생한다. 자주 사용되는 대책은?

이 분야의 비교