我目前正在尝试在CUDA中实现Matrices的产品: 第一个矩阵是3D矩阵(N,M,Z),第二个矩阵是2D矩阵(M,L)。 我看不出我的代码中这个乘法有什么问题。 有人可以帮我解决这个问题吗? 谢谢
这是我的内核:
__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 :(得分:1)
我看到的问题是行/列编号。
z
应该同时包含A
和B
矩阵索引。乘法矩阵的规则说明:
(AB)ij = sum(k)Aik * Bkj
所以我假设你的例子会像
一样(AB)ij = sum(k,e)Aik * Bkje