Выбор потоков на блок и количества блоков для ядра умножения матриц без тайлинга - PullRequest
0 голосов
/ 11 сентября 2018

Я выбрал 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;
        }
    }

1 Ответ

0 голосов
/ 13 сентября 2018

Проблема решена. Я превышал количество блоков в потоке для tesla40c, то есть 1024. Отсюда проблема. При запуске 64 в x и 64 в y его предел превышен.

...