选择不带平铺的矩阵乘法内核的每个块的线程数和块数

时间:2018-09-11 16:47:38

标签: cuda matrix-multiplication gpu-programming

我为内核选择了每块(128个块)64个或更多线程,以将两个大小为8192的矩阵乘以8192。我得到的只是矩阵中的0。

你能告诉我原因吗?

__global__ void MatrixMulKernel (double* M, double* Q, double* P, int Width) {
    int Row = blockIdx.y*blockDim.y+threadIdx.y;
    // Calculate the column index of P and N
    int Col = blockIdx.x*blockDim.x+threadIdx.x;
    if ((Row < Width) && (Col < Width)) {
            double Pvalue =0;
            for (int k =0; k < Width; ++k) {
                    Pvalue += M[Row*Width+k]*Q[k*Width+Col];
            }
            P[Row*Width+Col] = Pvalue;
        }
    }

1 个答案:

答案 0 :(得分:-2)

问题已解决。我超出了tesla40c的每个线程的块数,即1024。因此出现了问题。通过在x中发射64和在y中发射64,它的限制已超出。