BLAS Level 1, 2, 3 — 그리고 어느 게 GPU 밥값 하는가
벡터랑 행렬 있으면 BLAS가 모든 걸 정리하는 op은 셋뿐:
| Op | Level | 시그니처 | 커널 이름 | 전형적 용도 |
|---|---|---|---|---|
| AXPY | BLAS-1 | y ← α·x + y | SAXPY, VectorAdd | Bias add, residual skip |
| GEMV | BLAS-2 | y ← A·x + y | MatVec, DenseInference | Single-token autoregressive inference |
| GEMM | BLAS-3 | C ← α·A·B + β·C | matmul, mma, wmma | Self-attention, batched inference, training |
왜 BLAS Level 3가 1, 2 보다 훨씬 중요한가? Arithmetic intensity. AXPY는 byte당 ~1 FLOP — 모든 연산이 fresh DRAM trip 요구. GEMV도 비슷. 반면 GEMM은 load한 element 각각을 O(k)번 써서 GPU가 부수도록 만들어진 FLOPs/byte 비율을 가져.
Roofline 어림 룰:
- 낮은 FLOPs/byte (< 4) — bandwidth-bound. 커널이 DRAM 기다림. AXPY, GEMV, element-wise op이 여기 살아.
- 높은 FLOPs/byte (> 8) — compute-bound. ALU / Tensor Core 포화. Tiled GEMM이 여기 살아.
그래서 7B 모델의 single-token decode (GEMV 모양: activation × weight)이 RTX 4090에서 50 tokens/s, 64 토큰 batch (GEMM 모양)는 800 tokens/s. 수학은 같고, FLOPs/byte 비율이 바뀐 거야.