我刚刚开始学习CUDA编程,我对减少有些困惑.
我知道全局内存与共享内存相比有很多访问延迟,但是我可以使用全局内存来(至少)模拟类似于共享内存的行为吗?
例如,我想总结一个长度正好的大数组的元素BLOCK_SIZE * THREAD_SIZE(网格和块的维度都是幂2),我试图使用下面的代码:
__global__ void parallelSum(unsigned int* array) {
unsigned int totalThreadsNum = gridDim.x * blockDim.x;
unsigned int idx = blockDim.x * blockIdx.x + threadIdx.x;
int i = totalThreadsNum / 2;
while (i != 0) {
if (idx < i) {
array[idx] += array[idx + i];
}
__syncthreads();
i /= 2;
}
}
Run Code Online (Sandbox Code Playgroud)
我比较了这段代码的结果和在主机上串行生成的结果,奇怪的是:有时结果是相同的,但有时它们显然是不同的.在这里使用全局内存是否有任何原因?
我在VS2010下用OpenGL做程序很久了。直到现在,该程序始终可以独立运行(我的意思是不是从 vs2010 运行而是双击 IDE 的一侧)。“缺少glut32.dll”显示让我把它放在同一个目录下。
有人可能会说我可能会在 system32 中丢失 glut32.dll(或者在我的情况下,64 位 Windows 中的 syswow64)。当我把它放在目录中时,它被证明是正确的。问题是:我以前从未删除过它。怎么会是这种情况?