FA3 의 ping-pong 위에 한 단계 더 — Blackwell 의 5세대 tensor core (tcgen05.mma), TMA 의 깊은 활용, 그리고 5-way warp specialization 으로 cudnn 대비 ~20% 빠른 attention 을 짠다. Charles Frye 가 Modal 의 "reverse-engineer FlashAttention 4" 블로그에서 풀어낸 새 칩 위 attention 의 모양 — 학습 노트.
FlashAttention 시리즈는 GPU 한 세대마다 다시 짜인다 — FA1 (V100/A100), FA2 (A100 최적화), FA3 (Hopper). 그리고 2025 년 Blackwell (B200) 이 등장하면서 FA4 가 등장. 이 강의는 Charles Frye 가 Modal 블로그에서 FA4 코드를 reverse-engineer 해 분석한 결과를 풀어낸 자리.
강의의 frame.
새 칩의 새 명령 — Blackwell 의 tcgen05.mma.cta_group::1 같은 5세대 tensor core 명령. 이걸 쓰지 않으면 peak 의 한참 아래.
warp specialization 의 한 단계 위 — FA3 가 두 그룹의 ping-pong 이라면 FA4 는 Load / MMA / Softmax / Correction / Epilogue 의 5-way 분리.
SFU 우회 — softmax 의 exp 가 SFU bottleneck 에 부딪히는 자리에서 cubic polynomial approximation 으로 우회.
결과 — cudnn 의 attention 대비 ~20% 빠르다. attention 이라는 op 가 얼마나 깊게 짜내질 수 있는지 의 새 표.
강의의 인지적 frame
FA4 는 단일 트릭이 아니라 여러 작은 트릭의 합. (a) hardware 의 새 명령을 정확히 쓴다, (b) async pipeline 을 더 깊게 짠다, (c) softmax 의 SFU bottleneck 을 우회한다 — 각자의 effect 가 5-15% 씩, 곱하면 20%+. "한 방" 이 없는 게 FA4 의 특징.
"FA3 가 ping-pong 의 균형을 잡았다면, FA4 는 그 균형을 5 명의 specialized worker 로 분해한다."Modal blog · 확인 필요
또 강조할 만한 변경 — softmax normalization update 의 lazy 화. FA3 까지는 row-max 가 갱신될 때마다 모든 partial output 을 rescale. FA4 는 "max 가 numerical stability 에 영향을 줄 만큼 변할 때만" rescale. "output rescaling 비용을 10배 줄였다" 는 Modal 블로그의 표현.
FIG · FA3 vs FA4 architecture comparisonwarp 역할의 분리
FA3 는 두 warpgroup 이 비슷한 일을 ping-pong. FA4 는 5 가지 다른 일이 동시에 진행. warp 가 "같은 코드를 번갈아 도는" 게 아니라 "서로 다른 stage 의 specialist" 가 됐다.
§ 03Hopper TMA 더 깊이· load warp 의 도구
"한 warp 가 TMA 만 발사한다" 의 의미
FA3 까지 TMA 는 warp 의 일부 thread 만 사용하는 모델이었다. FA4 는 한 step 더 — 한 warp 전체를 "Load warp" 로 specialize. async copy 발사만 하고 다른 일은 하지 않는다.
왜 의미가 있는가.
register pressure 절감 — Load warp 는 multidimensional indexing 을 직접 안 한다. TMA descriptor 가 모든 stride / box shape 를 들고 있다. 그래서 register 가 매우 적게 든다.
async copy 의 paralell 발사 — Load warp 가 여러 stage 의 copy 를 한 번에 발사할 수 있다. consumer warp 의 latency stall 이 가려진다.
다른 warp 의 register 자유 — load 를 안 하므로 MMA / Softmax warp 들이 가진 register 를 다른 데 쓸 수 있다.
"Load warp 가 한 warp 만 차지" 가 핵심 — MMA / Softmax 는 한 warp 의 register 손실 없이 모든 register 를 본인 일에 쓸 수 있다. register pressure 의 redistribution.
§ 04Blackwell 이 새로 여는 자리· tcgen05.mma · FP4
새 ISA 가 만든 새 자리
Blackwell (B200) 이 H100 위에 추가한 핵심 자리.
tcgen05.mma.cta_group::1 — 5세대 tensor core. cta_group::1 의 의미는 "이 명령은 한 CTA 안에서만 작동, cross-CTA op 없음" — 즉 tile scheduling 이 단순해진다.
FP8 의 정식 first-class — H100 에서 실험적이던 FP8 이 Blackwell 에서는 standard. tensor core 가 FP8 ops 의 throughput 2× (BF16 대비).
FP4 (NVFP4) — 새 dtype. 4-bit floating point. tensor core 가 4× throughput (BF16 대비). attention 의 attention-score / output 자리에 쓸 수 있다.
tensor memory — 새로운 named address space. SMEM 보다 더 큰, register 보다 더 큰 자리. attention 의 KV cache 가 이 자리로 이동 (확인 필요).
async copy 의 강화 — TMA 가 H100 보다 더 큰 box, 더 fine-grained barrier 모델.
왜 cta_group::1 이 중요한가
H100 의 일부 명령은 cross-CTA 협업을 요구해 cluster 단위 스케줄링이 필요했다. cta_group::1 은 그 의존을 없애 — tile 별로 독립적. mega-kernel / persistent kernel 로 wrapping 이 단순해지고 occupancy 도 안정적.
"새 칩은 새 명령을 만들지만, 진짜 변화는 그 명령이 만드는 새 코드 패턴에 있다 — FA4 의 5-way specialization 이 그 답."학습 노트
§ 05producer-consumer 재설계· 5-way specialization
다섯 명의 specialist 가 같은 tile 의 lifecycle 을 분담
FA4 의 핵심 architectural 결정 — warp 의 역할을 다섯으로 분리. 각자가 자기 stage 만 담당, 다른 stage 의 결정은 모른다.
FIG · 5-way specialization timeline한 attention block 의 처리
Load (1)
tile 0 K/V
tile 1 K/V
tile 2 K/V
tile 3 K/V
tile 4 K/V
tile 5 K/V
MMA (TC)
QK 0
QK 1
QK 2
QK 3
QK 4
Softmax (8)
sm 0
sm 1
sm 2
sm 3
Correct (4)
corr 0
corr 1
corr 2
Epilogue
store
중요한 사실 — 한 시점에 다섯 stage 가 모두 동시에 진행. tile 0 의 store 가 끝나기 전에 tile 5 의 load 가 진행 중. SM 의 모든 자원 (TC, register, SMEM) 이 항상 활성.
이 5-way 모델의 핵심 이점 — each warp scheduler 가 매 cycle 다른 stage 로 switch 할 수 있다. SM 의 4 개 sub-partition 은 동시에 다른 일을 할 수 있고, 그것이 5 개 specialist 위에 mapping 되면 throughput 이 polynomial 로 올라간다.
§ 06FP8 / FP4 attention· low precision
"attention score 도 low precision 으로" 의 모험
attention 의 어느 자리가 low precision 으로 가도 안전한가의 답이 FA4 에서 더 명확해진다.
softmax (max, exp, sum) — FP32 으로 유지. dynamic range 가 너무 커서 low-precision 위험.
P · V (output) — FP8 안전. softmax 후 P 가 [0, 1] 범위 — narrow range 라서 안정.
attention output store — BF16 또는 FP16. downstream 의 norm / GEMM 에서 처리.
FP4 (실험) — Q·K^T 또는 P·V 자리에. accuracy 유지를 위해 추가 calibration 필요.
이 분포가 핵심 — tensor core 가 도는 자리는 low precision, scalar 작업 (softmax) 은 high precision. FP8 attention 이 BF16 대비 1.5-2× 속도, FP4 는 2-4× (확인 필요). 단 prefill 같은 long-context 에서는 numerical drift 가 누적할 risk.
FP8 vs FP4 의 사용 자리
FP8 — production-ready, 거의 모든 attention 자리에. FP4 — chat 응답 같은 short-context 에 안전, long-context (32K+) 에서는 추가 검증 필요. 강의 시점에 FP4 attention 은 "experimental" (확인 필요).
§ 07implementation 디테일· tricks Modal found
코드 안에 박힌 작은 결정들
Modal 이 reverse-engineer 한 디테일 중 단독 트릭들. 각자 5-15% effect, 곱하면 큰 차이.
cubic polynomial approx for exp — 작은 head dim 에서 SFU bottleneck 을 우회. "BF16 값에 대해 SFU 의 출력과 일치". SFU 사용 0.
lazy softmax rescale — row-max 변화가 numerical stability 에 영향을 줄 만큼이 아니면 partial output 의 rescale 을 skip. "output rescale 을 10× 절감".
cta_group::1 사용 — single-CTA 만 돌게 해서 cross-CTA 통신 비용을 0 으로. tile 단위 스케줄링이 깔끔.
multi-buffered pipeline — stage 갯수가 FA3 의 2-3 에서 더 깊어진다 (확인 필요 — 4-5 stage 가능성).
register reuse 최적화 — 5-way specialization 으로 각 warp 의 register 가 할일에 집중. occupancy 유지.
shared memory swizzling — SMEM 의 bank conflict 회피. tcgen05 의 layout 요구에 맞춰 직접 swizzle.
FA4 의 정확한 stage 갯수 — multi-buffered pipeline 의 stage 가 4 인지 5 인지. Modal 블로그가 정확히 명시했는지 확인.
Softmax warp 의 정확한 수 — Modal 의 8 warps 추정. 코드의 실제 갯수.
FP4 attention 의 channels — Q·K^T 자리만, P·V 자리만, 또는 둘 다. accuracy 데이터.
cubic poly 의 정확한 계수 — exp 의 polynomial form 의 정확한 식. fp16 도메인에서의 max error.
lazy rescale 의 trigger 조건 — "stability 에 영향" 의 numerical 정의.
backward pass 의 5-way specialization — forward 와 같은 추상이 backward 에 적용되는지.
cudnn +20% 의 정확한 측정 — sequence length, head dim, dtype 별로 어떻게 다른지.
검증 메모
이 노트는 Modal 블로그의 reverse-engineer + GPU 도메인 지식의 재구성. 모든 수치 (5-way, 8 warps, 4 warps, 1-2 warps 등) 는 Modal 블로그 출처. 정확한 PTX 와 SASS 의 형태는 flash-attention repo 직접 참조 필요. FA4 는 활발히 개발 중이라 강의 시점과 현재가 다를 수 있음.