Day 89

GPU Kernels Learning Journey

Description

### Files: `LTMM.cu` I implemented a code that performs matrix multiplication of two lower triangular matrices.

Code Files

LTMM.cu

#include <cuda_runtime.h>
#include <cstddef>

#define BLOCK_SIZE 16


__global__ 
void lowerTriangularMultiplyKernel(const float* A, const float* B, float* C, size_t n) {
    int row = blockIdx.y * blockDim.y + threadIdx.y;
    int col = blockIdx.x * blockDim.x + threadIdx.x;

    if (row < n && col < n) {
        if (col > row) {
            C[row * n + col] = 0.0f;
        } else {
            float sum = 0.0f;
            for (int k = col; k <= row; k++) {
                sum += A[row * n + k] * B[k * n + col];
            }
            C[row * n + col] = sum;
        }
    }
}

extern "C" void solution(const float* input_a, const float* input_b, float* output_c, size_t n) {
    dim3 blockDim(BLOCK_SIZE, BLOCK_SIZE);
    dim3 gridDim((n + blockDim.x - 1) / blockDim.x,
                 (n + blockDim.y - 1) / blockDim.y);

    lowerTriangularMultiplyKernel<<<gridDim, blockDim>>>(input_a, input_b, output_c, n);

    cudaDeviceSynchronize();
}