cudatraining · 학습 기록

LESSON 04 · 2026.04.18 · T4

Matmul — memory-bound 에서 Tensor Core 까지

0.4 → 7.9 TFLOPS. 같은 GPU, 같은 matrix. 네 번의 구현을 거치며 지붕이 두 번 바뀌었다. Roofline 의 축이 수직으로 점프한 자리.

GPU · T4 peak · FP32 8.1 · TC 65 TFLOPS sweep · 4 sizes × 4 versions

네 버전

TFLOPS 매트릭스

Nv1 naivev2 tiledv3 regv4 tensor
2560.220.560.20 ⚠1.51
5120.470.750.953.71
10240.400.641.433.59
20480.400.832.057.93

v3 @ 2048 = FP32 peak 의 25%. v4 @ 2048 = TC peak 의 12%. 단순 WMMA 만으로 7.93 TFLOPS 가 나왔다는 게 핵심.

교훈 1 · Occupancy trap — v3 가 N=256 에서 v2 보다 느림

v3 의 block tile 은 128×128. N=256 이면 블록 수 = 4 개뿐이다. T4 의 40 SM 중 36 SM 이 놀고 있다. 반면 v2 는 tile 32×32 → 64 블록 → 모든 SM 활용.

타일이 클수록 AI 증가 = 좋다. 단 블록 수 ≥ 2 × SM 수 를 지켜야 한다. 이걸 놓치면 오히려 느려진다.

LLM 서빙 함의: 큰 matmul (FFN) 은 문제없지만, small-batch decode 의 attention matmul 은 "작은 tile variant" 가 필요하다.

교훈 2 · v3 의 본질

스레드당 8×8 output 을 레지스터에 보유. 그러면:

이 세 효과가 겹쳐서 N=2048 에서 2.05 TFLOPS. cuBLAS SGEMM 의 3–4 TFLOPS 에 근접한다.

교훈 3 · v4 는 새 지붕 — Tensor Core

mma_sync 명령 = 16×16×16 매트릭스 곱 = 4096 FMA, 약 8 cycle 완료. 같은 warp-cycle 대비 FP32 FMA 의 16 배 처리량이다.

우리가 peak 의 12% 만 찍은 이유:

이 셋을 다 구현한 게 CUTLASS. 수개월 작업.

교훈 4 · 정밀도의 값

버전max_abs_err @ N=1024
v1, v2, v3 (FP32)7.6e-5
v4 (FP16 입력)1.4e-2 · 180×

FP16 입력 → mantissa 10 bit → 약 3 decimal 정밀도. LLM 추론은 허용, 학습은 BF16/FP32 혼합 필요. AWQ, GPTQ, FP8 quantization 이 존재하는 이유가 여기 있다. 더 낮은 정밀도 → 더 빠른 TC → 출력이 거의 같으면 이득.

Roofline 감각

                    │       Tensor Core peak ━━━━━━━━━━
perf ▲              │
(TFLOPS)            │                                  v4 ●
                    │                                (7.9)
                    │      ← FP32 peak 8.1 ──────────────
                    │                         v3 ●
                    │                       (2.0)
                    │                 v2 ●
                    │              (0.8)
                    │      v1 ●
                    │    (0.4)
                    └────────────────────────────────────▶
                       low AI                       high AI

v3 까지는 HBM 대역폭 싸움, v4 에서 축이 수직으로 점프 — 다른 지붕. LLM inference 는 거의 전부 맨 아래 두 줄에서 실행된다. v1-v4 는 거기까지 올라가는 사다리.