Slide 7
Slide 7 text
Data Divergence
SIMD/SIMTではスレッドごとに異なるデータを読む
近傍のスレッド(特に同じwave内など)がメモリ上で遠くのデータにアクセスすると遅くなる
キャッシュミス頻発、Coalescedアクセスできない (後述)
データダイバージェンス (Data Divergence)と呼ぶ
0 31
lane
wave
void scatter(uint32_t threadIdx,
const uint32_t* srcValues,
const uint32_t* dstIndices,
uint32_t* dstValues) {
uint32_t value = srcValues[threadIdx];
dstValues[dstIndices[threadIdx]] = value;
}
Memory
void gather(uint32_t threadIdx,
const uint32_t* srcValues,
const uint32_t* srcIndices,
uint32_t* dstValues) {
uint32_t value = srcValues[srcIndices[threadIdx]];
dstValues[threadIdx] = value;
}