2
我對CUDA真的很陌生,並且一直在嘗試遍歷2D數組。我有下面的代碼在普通C作爲預期其工作原理:CUDA替代2D塊的雙倍空間
for (ty=0;ty<s;ty++){
if (ty+pixY < s && ty+pixY>=0){
for(tx=0;tx<r;tx++){
T[ty/3][tx/3] += (tx+pixX<s && tx+pixX>=0) ?
*(image +M*(ty+pixY)+tx+pixX) * *(filter+fw*(ty%3)+tx%3) : 0;
}
}
}
也許我得到一些錯誤,但不會將此代碼轉換爲CUDA如下?
tx = threadIdx.x;
ty = threadIdy.y;
T[ty/3][tx/3] += (tx+pixX<s && tx+pixX>=0) ?
*(image +M*(ty+pixY)+tx+pixX) * *(filter+fw*(ty%3)+tx%3) : 0;
只要我定義我的內核參數dimGrid(1,1,1)
和blockDim(r,s,1)
我問,因爲我得到意想不到的效果。另外,如果我正確地聲明和分配我的數組作爲2D CUDA數組而不是一個大的一維數組,這會有幫助嗎?
感謝您的幫助。
剛剛讀「記憶競賽」使問題看起來很明顯。非常感謝你的幫助! – cookM 2011-05-18 07:56:25