在什么情况下,您应该在CUDA内核的共享内存中使用
我在这种情况下需要将
谢谢!
volatile
关键字?我知道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
,还是只会缓存元素?谢谢!