volatile
キーワードをCUDAカーネルの共有メモリに使用する必要がありますか? 共有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
が必要です:私は、
volatile
は、値をキャッシュしないように決してコンパイラに指示しますが、私の質問は共有配列と行動についてであることを理解できますか?各配列のエントリは、最後のスレッドを除いては、スレッド0によってすべてが読み取られる単一のスレッドによってのみアクセスされます。コンパイラが配列全体をキャッシュできる可能性があるため、
volatile
である必要があります。要素?
ありがとうございます!
偉大な答え、私はメモリフェンシングについて知りませんでした。ありがとうございました! –