【发布时间】:2013-04-16 11:42:23
【问题描述】:
我目前正在尝试在 CUDA 中实现矩阵产品: 第一个矩阵是 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];
}
}
【问题讨论】:
-
您的问题到底是什么?将内核命名为
matrixMult而不是matrixAdd不是更好吗? -
您正在尝试计算超矩阵乘积?还是别的什么?
-
您好,我的问题是获得结果的最快方法。我正在尝试运行此产品的并发计算。我对我的索引有些怀疑。我认为 C(i,j,t) = sum i=1 to n ( a (r + it)*B(i,t)... 之前的索引给出了一些奇怪的结果..
-
你应该阅读共享内存的使用和使用特殊大小的线程块(warp)来优化你的代码。
标签: matrix cuda implementation matrix-multiplication