0
的問題是:CUDA動態共享存儲器沒有得到值
共享陣列perBlockMsg[i]
保持等於0的所有值,但預計將十進制值大於0作爲d_msg[]
具有的值越大。 d_msg[]
ia是一個二維數組,我已將其平面化爲1D,並確保數據已成功傳遞到設備中。
__global__ void add(int *d_msg, int *d_checkSumArray) {
int i=threadIdx.x;
int j=blockIdx.x;
extern __shared__ int perBlockMsg[];
if(d_msg[i* gridDim.x + j]<=1)
{
perBlockMsg[i]=d_msg[i* gridDim.x + j];
}
__syncthreads();
if(j==2 && i<=gridDim.x) //here i is the row number
{
d_checkSumArray[i]=perBlockMsg[i];
}
}
內核調用瞭如下哪裏(讓說)M = 7,R = 4個,這兩個變量是動態的,以及
add<<<R,(M+R), (M+R)* sizeof(int)>>>(d_msg, d_checkSumArray);
有人能指出問題出在哪裏可能是什麼?
你可能會從這次討論一些幫助。 http://stackoverflow.com/questions/11900394/cuda-shared-memory-issue-in-outputs-depending-on-extern-declaration-and-size-of –
我保持你提到的帖子的建議我的上面的代碼,但仍然不工作...這就是爲什麼我發佈它... – Shohidul
不代表這行代碼意味着你只會得到1,0或負數:if(d_msg [i * gridDim.x + j] <= 1)也許這應該是一個大於或等於測試? –