2013-04-23 176 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