Мое ядро ​​работает только в блоке (0,0) - PullRequest
0 голосов
/ 09 июня 2010

Я пытаюсь написать простое приложение matrixMultiplication, которое умножает две квадратные матрицы с использованием CUDA. У меня проблема с тем, что мое ядро ​​правильно вычисляет только в блоке (0,0) сетки.

Это мой код вызова:

dim3 dimBlock(4,4,1);
dim3 dimGrid(4,4,1);
//Launch the kernel;
MatrixMulKernel<<<dimGrid,dimBlock>>>(Md,Nd,Pd,Width);

Это моя функция ядра

__global__ void MatrixMulKernel(int* Md, int* Nd, int* Pd, int Width)
{
        const int tx = threadIdx.x; 
        const int ty = threadIdx.y;
        const int bx = blockIdx.x;
        const int by = blockIdx.y;
        const int row = (by * blockDim.y + ty);
        const int col = (bx * blockDim.x + tx);

        //Pvalue stores the Pd element that is computed by the thread
        int Pvalue = 0;

        for (int k = 0; k < Width; k++)
        {
            Pvalue += Md[row * Width + k] * Nd[k * Width + col];
        }
        __syncthreads();
        //Write the matrix to device memory each thread writes one element
        Pd[row * Width + col] = Pvalue;

    }

Я думаю, что проблема может быть связана с памятью, но я немного растерялся. Что я должен сделать, чтобы этот код работал в нескольких блоках?

1 Ответ

1 голос
/ 10 июня 2010

Проблема была с моим вызовом ядра CUDA.Сетка была слишком мала для обрабатываемых матриц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...