0
我正在嘗試學習CUDA。我在基於GPU的文章this的幫助下開始嘗試矩陣乘法。 我的主要問題是我無法理解如何訪問內核中的2D數組,因爲訪問2D數組與矩陣[i] [j]有點不同。 這是我堅持的部分:瞭解CUDA中的矩陣乘法
for (int i = 0; i < N; i++) {
tmpSum += A[ROW * N + i] * B[i * N + COL];
}
C[ROW * N + COL] = tmpSum;
我能理解行和列是如何得到的。
int ROW = blockIdx.y*blockDim.y+threadIdx.y;
int COL = blockIdx.x*blockDim.x+threadIdx.x;
任何與示例的解釋是高度讚賞。謝謝!
在內核的單一循環裝置,每個工作項是做(與1之間排M11平方米的列)的點積,以找到'(I,J)'結果矩陣的第i個元素。由於它需要一維數組,因此只能將其作爲堆疊行。這就是爲什麼'ROW * N + i'意味着該行的第ROW行和第i個元素,但這是第一個矩陣。第二個矩陣在這個內核之前似乎沒有被轉置,所以它掃描了一列而不是一行。 –
爲什麼要乘以'ROW * N'和再次'I * N'.這個邏輯似乎很棘手。我無法對其進行可視化@huseyintugrulbuyukisik – uttejh
2D至圖1D表示第一行,然後第二列,接着第三行....然後如果通過N個乘法ROW,選擇ROWth行的第一元件由於N是行長度和1D陣列長度爲N * M,其中M是列高(或者表示每個具有N個元素的M行在1D中依次堆疊)。 –