2013-04-23 122 views
0

我正在嘗試在CUDA中實現矩陣乘積: 第一個矩陣是3D矩陣(N,M,Z),第二個矩陣是2D矩陣(M,L)。 我看不出這個乘法的代碼有什麼問題。 有人可以幫我解決這個問題嗎? 謝謝CUDA中的3D矩陣乘法

這裏是我的內核:

__global__ void matrixMul(float * A, float * B, float * C,int N, int M, int Z, int L) { 
int idx = blockIdx.x*blockDim.x + threadIdx.x; 
int idy = blockIdx.y*blockDim.y + threadIdx.y; 

for(int z=0; z<width; z++){ 
    C[idx*width+idy] += A[idy + idx*width ]*B[idx*width+idy+z*width*height]; 
} 

} 
+0

究竟是什麼問題?將內核命名爲「matrixMult」而不是「matrixAdd」會不會更好? – Stefan 2013-04-23 10:02:55

+0

您正試圖計算超矩陣產品?或者是其他東西? – talonmies 2013-04-23 10:06:37

+0

你好,我的isssue是獲得我的結果的最快方法。我正在嘗試運行此產品的併發計算。我對我的索引有疑問。我認爲C(i,j,t)= sum i = 1到n(a(r + it)* B(i,t)...前面的索引給出了一些奇怪的結果。 – ALFRAM 2013-04-23 10:11:52

回答

1

我看到的問題是行/列編號。

z應該在AB矩陣索引中。乘矩陣的規則規定:

(AB)IJ = SUM(k)的AIK * BKJ

所以我假設你的例子是成纔像

(AB)IJ = SUM(K, e)Aik * Bkje

+0

我改變了我的索引,我知道這兩個都是正確的,因爲我能夠找回原始矩陣,但一旦產品對於(int z = 0; z ALFRAM 2013-04-23 12:39:06