GPU程式設計
以GPU處理具有粒子位置x、y、z的資料時,就記憶體合併存取而言,下列何種排列方式較有利?
- A做成依粒子逐一排列x、y、z的結構陣列
- B將所有值以隨機的順序排列
- C分成只有x的陣列、只有y的陣列、只有z的陣列(不是結構的陣列,而是陣列的結構)
查看答案與解析
正確答案:C. 分成只有x的陣列、只有y的陣列、只有z的陣列(不是結構的陣列,而是陣列的結構)
在結構陣列(AoS)中,會依序排成粒子0的x、y、z,粒子1的x、y、z……因此各執行緒讀取x時,位址會以每12位元組為間隔而零散。若改為陣列結構(SoA),將x連續排列,相鄰的執行緒就會讀取相鄰位址的x,因而成為合併存取。在CPU的SIMD中,基於同樣的理由,SoA往往也較為有利。
- A. 相鄰執行緒的x會相隔12位元組。
- B. 會變得無法合併存取。
- C. 正確。讀取相同分量之執行緒的位址是連續的。