9 ve 10 no'lu satırları alamıyorum; kullanılan ve Col + (m*TILE_WIDTH + ty)*Width
formülüyle hesaplanan endeks.__shared__ aşağıdaki kodda çalışıyor?
Birisi bu kodu anlamada bana yardımcı olabilir, yani __shared__
?
__global__ void MatrixMulKernel(float* Md, float* Nd, float* Pd, int Width)
{
__shared__float Mds[TILE_WIDTH][TILE_WIDTH];
__shared__float Nds[TILE_WIDTH][TILE_WIDTH];
3. int bx = blockIdx.x; int by = blockIdx.y;
4. int tx = threadIdx.x; int ty = threadIdx.y;
// Identify the row and column of the Pd element to work on
5. int Row = by * TILE_WIDTH + ty;
6. int Col = bx * TILE_WIDTH + tx;
7. float Pvalue = 0; ;
// Loop over the Md and Nd tiles required to compute the Pd element
8. for (int m = 0; m < Width/TILE_WIDTH; ++m) {
// Coolaborative loading of Md and Nd tiles into shared memory
9.Mds[ty][tx] = Md[Row*Width + (m*TILE_WIDTH + tx)];
10.Nds[ty][tx] = Nd[Col + (m*TILE_WIDTH + ty)*Width];
11.__syncthreads();
11. for (int k = 0; k < TILE_WIDTH; ++k)
12.Pvalue += Mds[ty][k] * Nds[k][tx];
13. Synchthreads();
}
Pd[Row*Width+Col] = Pvalue;
}
Cevabınız için teşekkürler efendim ama efendim, 1D indeksleme satır ve cols ile bu formül çerçeveleme hile anlamada bana yardımcı eğer daha yararlı olacaktır. 2B mutlak endeksinden 1D indeksi için formülü çerçevelemek benim için biraz zor. –
2B indekslerinden 1D indeksi oluşturmak için, 2D indekslerinin satır indeksini aldık, veri setinin genişliği ile çarpın ve kolon indeksini ekleyin. '1Dindex = (2Drow) * (width) + (2Dcolumn)' 'Mds' durumunda, seçilen satır sadece' Satır'dır. 'Nds' durumunda, seçilen satır' (m * TILE_WIDTH + ty) 'tarafından verilir, çünkü daha büyük matris içindeki belirli döşeme için ofset ayarlanır. –