【发布时间】:2014-01-18 14:33:09
【问题描述】:
阅读以下问题及其答案后
LINK
我的脑海里还有一个问题。来自我的 C/C++ 背景;我知道使用volatile 有它的缺点。并且在答案中还指出,在 CUDA 的情况下,如果不使用 volatile 关键字,优化可以用寄存器替换共享数组以保存数据。
我想知道在计算(总和)减少时会遇到哪些性能问题。例如
__device__ void sum(volatile int *s_data, int tid)
{
if (tid < 16)
{
s_data[tid] += s_data[tid + 16];
s_data[tid] += s_data[tid + 8];
s_data[tid] += s_data[tid + 4];
s_data[tid] += s_data[tid + 2];
s_data[tid] += s_data[tid + 1];
}
}
我正在使用减少翘曲。由于所有带有 in warp 的线程都是同步的,因此我相信没有必要使用syncthreads() 构造。
我想知道删除关键字 volatile 是否会弄乱我的总和(由于 cuda 优化)?我可以在没有volatile 关键字的情况下使用这样的缩减吗?
由于我多次使用此缩减功能,volatile 关键字会导致性能下降吗?
【问题讨论】: