我正在編寫一個CUDA內核來爲行* cols主矩陣中的每個位置創建一個3x3協方差矩陣。因此,3D矩陣的行* cols * 9的大小,我分配在一個單一的malloc相應。我需要在單個索引值中訪問它將偏移索引計算爲3D數組時遇到的麻煩
3x3協方差矩陣的9個值根據來自某些其他二維數組的適當的行r和列c設置它們的值。
換句話說 - 我需要計算合適的索引來訪問3x3協方差矩陣的9個元素,以及作爲輸入值的2D矩陣的行和列偏移量,以及適當的存儲陣列的索引。
我試圖簡化它歸結爲下列:
//I am calling this kernel with 1D blocks who are 512 cols x 1row. TILE_WIDTH=512
int bx = blockIdx.x;
int by = blockIdx.y;
int tx = threadIdx.x;
int ty = threadIdx.y;
int r = by + ty;
int c = bx*TILE_WIDTH + tx;
int offset = r*cols+c;
int ndx = r*cols*rows + c*cols;
if((r < rows) && (c < cols)){ //this IF statement is trying to avoid the case where a threadblock went bigger than my original array..not sure if correct
d_cov[ndx + 0] = otherArray[offset];//otherArray just contains a value that I might do some operations on to set each of the ndx0-ndx9 values in d_cov
d_cov[ndx + 1] = otherArray[offset];
d_cov[ndx + 2] = otherArray[offset];
d_cov[ndx + 3] = otherArray[offset];
d_cov[ndx + 4] = otherArray[offset];
d_cov[ndx + 5] = otherArray[offset];
d_cov[ndx + 6] = otherArray[offset];
d_cov[ndx + 7] = otherArray[offset];
d_cov[ndx + 8] = otherArray[offset];
}
當我檢查此陣列在CPU上的計算值,其循環對i =行,J = COLS,K = 1。 .9
結果不匹配。
換句話說d_cov [我*行*的cols + J *的cols + K]!= correctAnswer [i] [j] [k]的
誰能給我如何來解答這個問題的任何提示?這是索引問題還是其他邏輯錯誤?
我認爲這是不正確的。它不適用於空間中的下一個「飛機」 – Derek 2011-01-30 02:11:16