在没有平铺的情况下为矩阵乘法内核选择每个块的线程数和块数

问题描述 投票:-2回答:1

我为每个块选择了64个或更多的线程数(128个块),用于将两个大小为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;
        }
    }
cuda matrix-multiplication gpu-programming
1个回答
-2
投票

问题得到解决。我超过了tesla40c每个线程的块数,即1024.因此问题。通过在x和64 in y中启动64,超出其限制。

© www.soinside.com 2019 - 2024. All rights reserved.