基本上,我很难准确理解这里出了什么问题。
共享内存在调试时似乎没有以块独占方式运行。正常运行代码时,不会打印任何内容。但是,如果我尝试对其进行调试,则会在块之间共享共享内存并到达 print 语句。
这是一个示例,显然这不是非常有用的代码,但它在我的系统上重现了该问题。难道我做错了什么?这是调试器的错误还是预期行为?
__global__
void test()
{
__shared__ int result[1];
if (blockIdx.x == 0 && blockIdx.y == 0 && blockIdx.z == 0)
result[0] = 4444;
else
{
if (result[0] == 4444)
printf("This should never print if shared memory is unique\n");
}
}
并启动它:
test<<<dim3(8,8,1), dim3(8,8,1)>>>();
我也完全有可能完全误解了共享内存。
谢谢您的帮助。
其他信息: 我使用的是 GTX 460。为项目设置了 Compute_20 和 sm_20。我正在使用 nsight 3.0 预览版在 Visual Studio 2010 中编写代码。