GPU 프로그래밍
입자의 위치 x, y, z를 가진 데이터를 GPU에서 처리할 때, 메모리 병합 접근 측면에서 유리한 배치는?
- A입자별로 x, y, z를 나열한 구조체 배열로 한다
- B모든 값을 무작위 순서로 배치한다
- Cx만의 배열, y만의 배열, z만의 배열로 나눈다(구조체의 배열이 아닌, 배열의 구조체)
정답과 해설 보기
정답: C. x만의 배열, y만의 배열, z만의 배열로 나눈다(구조체의 배열이 아닌, 배열의 구조체)
구조체 배열(AoS)에서는 입자 0의 x·y·z, 입자 1의 x·y·z…로 나열되므로, 각 스레드가 x를 읽으면 주소가 12바이트씩 띄엄띄엄 떨어집니다. 배열의 구조체(SoA)로 만들어 x만 연속해서 배치하면 인접한 스레드가 인접한 주소의 x를 읽으므로 병합 접근이 됩니다. CPU의 SIMD에서도 같은 이유로 SoA가 유리한 경우가 많습니다.