Day 87

GPU Kernels Learning Journey

Description

### Files: `SymMatMul.cu` I implemented a code that performs the multiplication of two symmetric matrices.

Code Files

SymMatMul.cu

#include <cuda_runtime.h>

#define BLOCK_SIZE 16

__global__ void matrixMulKernel(const float* A, const float* B, float* C, size_t n) {
    size_t row = blockIdx.y * blockDim.y + threadIdx.y;
    size_t col = blockIdx.x * blockDim.x + threadIdx.x;
    
    if (row < n && col < n) {
        float sum = 0.0f;
        for (size_t k = 0; k < n; 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 block(BLOCK_SIZE, BLOCK_SIZE);
    dim3 grid((n + BLOCK_SIZE - 1) / BLOCK_SIZE, (n + BLOCK_SIZE - 1) / BLOCK_SIZE);
    
    matrixMulKernel<<<grid, block>>>(input_a, input_b, output_c, n);
    

    cudaDeviceSynchronize();
}