How csl-iisc/hpca-grouped-gemm-assignment-2026 works
This is a CUDA assignment and benchmark for packed, unequal-row grouped GEMM with bias and ReLU. Its principal workflow is to generate grouped inputs, provide packed buffers and row offsets to a selected GPU implementation, and verify results against a CPU reference. The documented variants progress from separate GEMM and pointwise stages through tiled reuse, fusion, and one-launch group scheduling. The README documents those capabilities, but the benchmark driver and kernel implementations were not sampled, so their internal calls and dispatch are not confirmed.
Main entry points: main.cu Benchmark driver · grouped_gemm.h GPU problem interface · input_generator.cpp Input generator · input_generator.h Host problem
Components 13
Benchmark and inputs
- Benchmark driver
src/main.cu - Input generator
src/input_generator.cpp
Problem interface
- Host problem
include/input_generator.h - GPU problem interface
include/grouped_gemm.h - Packed GPU buffers
src/main.cu
GPU implementations
- Baseline kernels
src/baseline.cu - V1 locality
src/grouped_gemm_kernels.cu - V2 shared reuse
src/grouped_gemm_kernels.cu - V3 register tiling
src/grouped_gemm_kernels.cu - V4 fused operation
src/grouped_gemm_kernels.cu - V5 group scheduling
src/grouped_gemm_kernels.cu
Reference validation
- CPU reference
src/reference.cpp
Other components
- Benchmark user
Connections 20
- Benchmark user → Benchmark driver: runs benchmark
- Benchmark driver → Input generator: requests inputs
README.md - Input generator → Host problem: produces problem
src/input_generator.cpp - Input generator → Packed GPU buffers: provides packed inputs
README.md - Benchmark driver → Packed GPU buffers: allocates buffers
README.md - Packed GPU buffers → GPU problem interface: supplies problem data
include/grouped_gemm.h - GPU problem interface → Baseline kernels: declares launcher
include/grouped_gemm.h - GPU problem interface → V1 locality: declares launcher
include/grouped_gemm.h - GPU problem interface → V2 shared reuse: declares launcher
include/grouped_gemm.h - GPU problem interface → V3 register tiling: declares launcher
include/grouped_gemm.h - GPU problem interface → V4 fused operation: declares launcher
include/grouped_gemm.h - GPU problem interface → V5 group scheduling: declares launcher
include/grouped_gemm.h - Benchmark driver → Baseline kernels: selects implementation
- Benchmark driver → V1 locality: selects implementation
- Benchmark driver → V2 shared reuse: selects implementation
- Benchmark driver → V3 register tiling: selects implementation
- Benchmark driver → V4 fused operation: selects implementation
- Benchmark driver → V5 group scheduling: selects implementation
- Benchmark driver → CPU reference: verifies output
- Host problem → CPU reference: provides reference input
src/reference.cpp