Day 77

GPU Kernels Learning Journey

Description

### Files: `upperTriangularMatMulKernel.cu` I implemented a code that Performs matrix multiplication of two upper triangular matrices.

Code Files

upperTriangularMatMulKernel.cu

#include <cuda_runtime.h>

__global__ void upperTriangularMatMulKernel(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 (row <= col) {
            float sum = 0.0f;
            
            for (int k = row; k <= col; ++k) {
                sum += A[row * n + k] * B[k * n + col];
            }

            C[row * n + col] = sum;
        } else {
          
            C[row * n + col] = 0.0f;
            
        }
    }
}

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

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

  
    cudaDeviceSynchronize();
}