基本上,我很難明白到底發生了什麼問題。CUDA共享內存不是唯一阻止調試
在調試過程中,共享內存看起來不是以塊獨佔方式運行。正常運行代碼時,不會打印任何內容。但是,如果我嘗試調試它,共享內存在塊之間共享並且達到打印語句。
這是一個例子,顯然這不是非常有用的代碼,但它重現了我的系統上的問題。難道我做錯了什麼?這是來自調試器的錯誤或預期行爲?
__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中編寫代碼。
啊,這很有道理。 我想我很困惑,因爲它似乎通常從0開始內核調用時開始。我不應該認爲它是有保證的。感謝您的解釋! – Gurrgg