使用CUDA进行矩阵乘法 - 结果错误

时间:2012-05-15 06:05:11

标签: cuda

我有以下内核代码用于矩阵操作。矩阵A = 1 * 3且矩阵B = 3 * 3得到的矩阵C为1 * 3。在以下代码中,宽度为3。

__global__void MatrixMulKernel(float* d_M,float* d_N,float* d_P,int Width) {
   int row = blockIdx.y * blockDim.y + threadIdx.y;
   int col = blockIdx.x * blockDim.x + threadIdx.x;
    if(row>=Width || col>=Width){  // matrix range
      return;
    }
   float P_val = 0.0f;
   for (int k = 0; k < Width; ++k) {
   float M_elem = d_M[row * Width + k];
   float N_elem = d_N[k * Width + col];
   P_val += M_elem * N_elem;
  }
 d_p[row*Width+col] = P_val;
}

我的内核代码调用如下

int block_size = 32;
dim3 dimGrid(Width/block_size, Width/block_size);
dim3 dimBlock(block_size, block size);
MatrixMulKernel<<<dimGrid, dimBlock>>>(d_M, d_N, d_P,3);

但我的结果错了。我总是得到零结果。 任何人都可以帮助我。

1 个答案:

答案 0 :(得分:3)

代码看起来喜欢用于相同大小的2个方阵的乘法。

宽度是第一个矩阵的列数。

您必须将此作为函数的参数提供。