# csl-iisc/hpca-grouped-gemm-assignment-2026 architecture

> Architecture diagram of the GitHub repository csl-iisc/hpca-grouped-gemm-assignment-2026, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-11). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/csl-iisc/hpca-grouped-gemm-assignment-2026
- Repository: https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026

## Overview

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: [`src/main.cu`](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/main.cu) (Benchmark driver), [`include/grouped_gemm.h`](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/include/grouped_gemm.h) (GPU problem interface), [`src/input_generator.cpp`](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/input_generator.cpp) (Input generator), [`include/input_generator.h`](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/include/input_generator.h) (Host problem)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_harness["Benchmark and inputs"]
  node_driver["Benchmark driver<br/>[main.cu]"]
  node_generator["Input generator"]
end

subgraph group_contract["Problem interface"]
  node_host_problem["Host problem<br/>[input_generator.h]"]
  node_gpu_contract["GPU problem interface<br/>[grouped_gemm.h]"]
  node_packed_buffers[("Packed GPU buffers<br/>[main.cu]")]
end

subgraph group_gpu["GPU implementations"]
  node_baseline["Baseline kernels<br/>[baseline.cu]"]
  node_v1["V1 locality"]
  node_v2["V2 shared reuse"]
  node_v3["V3 register tiling"]
  node_v4["V4 fused operation"]
  node_v5["V5 group scheduling"]
end

subgraph group_validation["Reference validation"]
  node_cpu_reference["CPU reference<br/>[reference.cpp]"]
end

node_user(("Benchmark user"))

node_user -.->|"runs benchmark"| node_driver
node_driver -->|"requests inputs"| node_generator
node_generator -->|"produces problem"| node_host_problem
node_generator -->|"provides packed inputs"| node_packed_buffers
node_driver -->|"allocates buffers"| node_packed_buffers
node_packed_buffers -->|"supplies problem data"| node_gpu_contract
node_gpu_contract -->|"declares launcher"| node_baseline
node_gpu_contract -->|"declares launcher"| node_v1
node_gpu_contract -->|"declares launcher"| node_v2
node_gpu_contract -->|"declares launcher"| node_v3
node_gpu_contract -->|"declares launcher"| node_v4
node_gpu_contract -->|"declares launcher"| node_v5
node_driver -.->|"selects implementation"| node_baseline
node_driver -.->|"selects implementation"| node_v1
node_driver -.->|"selects implementation"| node_v2
node_driver -.->|"selects implementation"| node_v3
node_driver -.->|"selects implementation"| node_v4
node_driver -.->|"selects implementation"| node_v5
node_driver -.->|"verifies output"| node_cpu_reference
node_host_problem -->|"provides reference input"| node_cpu_reference

click node_driver "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/main.cu"
click node_generator "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/input_generator.cpp"
click node_host_problem "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/include/input_generator.h"
click node_gpu_contract "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/include/grouped_gemm.h"
click node_packed_buffers "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/main.cu"
click node_baseline "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/baseline.cu"
click node_v1 "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu"
click node_v2 "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu"
click node_v3 "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu"
click node_v4 "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu"
click node_v5 "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu"
click node_cpu_reference "https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/reference.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_driver,node_generator,node_user toneBlue
class node_host_problem,node_gpu_contract,node_packed_buffers toneAmber
class node_baseline,node_v1,node_v2,node_v3,node_v4,node_v5 toneMint
class node_cpu_reference toneRose
```

## Components

### Benchmark and inputs

- [Benchmark driver](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/main.cu): `src/main.cu`
- [Input generator](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/input_generator.cpp): `src/input_generator.cpp`

### Problem interface

- [Host problem](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/include/input_generator.h): `include/input_generator.h`
- [GPU problem interface](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/include/grouped_gemm.h): `include/grouped_gemm.h`
- [Packed GPU buffers](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/main.cu): `src/main.cu`

### GPU implementations

- [Baseline kernels](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/baseline.cu): `src/baseline.cu`
- [V1 locality](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu): `src/grouped_gemm_kernels.cu`
- [V2 shared reuse](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu): `src/grouped_gemm_kernels.cu`
- [V3 register tiling](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu): `src/grouped_gemm_kernels.cu`
- [V4 fused operation](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu): `src/grouped_gemm_kernels.cu`
- [V5 group scheduling](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/grouped_gemm_kernels.cu): `src/grouped_gemm_kernels.cu`

### Reference validation

- [CPU reference](https://github.com/csl-iisc/hpca-grouped-gemm-assignment-2026/blob/master/src/reference.cpp): `src/reference.cpp`

### Other components

- **Benchmark user**

## Connections

- Benchmark user → Benchmark driver: runs benchmark
- Benchmark driver → Input generator: requests inputs (evidence: `README.md`)
- Input generator → Host problem: produces problem (evidence: `src/input_generator.cpp`)
- Input generator → Packed GPU buffers: provides packed inputs (evidence: `README.md`)
- Benchmark driver → Packed GPU buffers: allocates buffers (evidence: `README.md`)
- Packed GPU buffers → GPU problem interface: supplies problem data (evidence: `include/grouped_gemm.h`)
- GPU problem interface → Baseline kernels: declares launcher (evidence: `include/grouped_gemm.h`)
- GPU problem interface → V1 locality: declares launcher (evidence: `include/grouped_gemm.h`)
- GPU problem interface → V2 shared reuse: declares launcher (evidence: `include/grouped_gemm.h`)
- GPU problem interface → V3 register tiling: declares launcher (evidence: `include/grouped_gemm.h`)
- GPU problem interface → V4 fused operation: declares launcher (evidence: `include/grouped_gemm.h`)
- GPU problem interface → V5 group scheduling: declares launcher (evidence: `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 (evidence: `src/reference.cpp`)
