실행파일 하나, 모든 행렬 맛 — lab bench
이제 단일 command-line 도구 만들어서 어떤 행렬 맛이든 어떤 사이즈든 벤치마크할 수 있을 만큼 커널이 충분해. 이름 matrix_ops. Subcommand:
| Subcommand | Args | 실행 |
|---|---|---|
add / sub / mul / div | <ROWS> <COLS> | 2-D 인덱싱하는 element-wise op (Track 5) |
gemv | <ROWS> <COLS> | BLAS-2: y = A·x |
gemm-naive | <M> <N> <K> | 출력 원소당 thread 하나 (Lesson 4) |
gemm | <M> <N> <K> | Tiled, shared memory + register blocking |
왜 만드냐? Vendor BLAS (Track 7)랑 자기 비교는 신뢰할 수 있는 안정된 test rig 필요해서. CLI가 dimension 받으니까 재컴파일 없이 size 스윕 가능.
RTX 4090 실제 숫자 (FP32):
| Op | Size | BW or Perf |
|---|---|---|
| add | 4096×4096 | 167 GB/s |
| gemv | 8192×8192 | 216 GB/s |
| gemm-naive | 512³ | 0.41 TF/s |
| gemm-tiled | 2048³ | 3.8 TF/s |
Naive→tiled 9× 점프는 정확히 우리가 예측한 거: 16 KB shared-memory tile 각각이 다음 DRAM hit 전에 128× 더 많은 FMA 먹임.