CUDA中矩阵乘法的自定义核

CUDA中矩阵乘法的自定义核,cuda,matrix-multiplication,Cuda,Matrix Multiplication,我刚刚开始CUDA编程,正在学习矩阵乘法的内核设计。我复制了在线找到的主代码,并添加了我的部分来实现A(MxM)和B(MxN)的矩阵乘法 #包括 #包括 #包括 #包括 #包括 #包括 #包括 使用名称空间std; 常数int M=55,N=73; typedef尖:复杂复合体; __全局无效内核函数(复数*ad,复数*bd,复数*cd,整数n) { intx=(blockIdx.x*blockDim.x)+threadIdx.x; inty=(blockIdx.y*blockDim.y)+th

我刚刚开始CUDA编程,正在学习矩阵乘法的内核设计。我复制了在线找到的主代码,并添加了我的部分来实现A(MxM)和B(MxN)的矩阵乘法

#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
常数int M=55,N=73;
typedef尖:复杂复合体;
__全局无效内核函数(复数*ad,复数*bd,复数*cd,整数n)
{
intx=(blockIdx.x*blockDim.x)+threadIdx.x;
inty=(blockIdx.y*blockDim.y)+threadIdx.y;
if(x_B(M*N);
复合物*A、*B、*C;
Cudamaloc((void**)和A,M*M*sizeof(综合体));
Cudamaloc((void**)和B,M*N*sizeof(复合体));
Cudamaloc((void**)和C,M*N*sizeof(复合体));

对于(int i=0;i,给定的代码仅适用于平方矩阵。需要稍加修改以使其通用化。内核可以修改如下:

__global__ void kernelFunc(Complex* ad, Complex* bd, Complex* cd, int m1, int n1, int n2) 
{
  int x = (blockIdx.x * blockDim.x) + threadIdx.x;
  int y = (blockIdx.y * blockDim.y) + threadIdx.y;

  if(x < n2 && y < m1) 
  {   
    Complex v = Complex(0.0, 0.0);
    for(int i=0; i<n1; i++) v += ad[y * n1 + i] * bd[i * n2 + x];
    cd[y * n2 + x] = v;
  }
}
最后,内核调用:

kernelFunc<<<grid, block>>>(A, B, C, M, M, N);
kernelFunc(A,B,C,M,M,N);
dim3 grid((N+31)/32, (M+31)/32);
kernelFunc<<<grid, block>>>(A, B, C, M, M, N);