どのような状況volatile
で、CUDA カーネルの共有メモリでキーワードを使用する必要がありますか? コンパイラに値をキャッシュしないように指示していることは理解していvolatile
ますが、私の質問は共有配列での動作に関するものです。
__shared__ float products[THREADS_PER_ACTION];
// some computation
products[threadIdx.x] = localSum;
// wait for everyone to finish their computation
__syncthreads();
// then a (basic, ugly) reduction:
if (threadIdx.x == 0) {
float globalSum = 0.0f;
for (i = 0; i < THREADS_PER_ACTION; i++)
globalSum += products[i];
}
products
この場合、揮発性である必要がありますか? 各配列エントリは、すべてがスレッド 0 によって読み取られる最後を除いて、単一のスレッドによってのみアクセスされます。コンパイラが配列全体をキャッシュできる可能性はあります volatile
か? ?
ありがとう!