TL;DR
이 글은 24 GB VRAM을 제공하는 RX 7900 XTX에서 Mojo로 작성한 fp16 WMMA GEMM 커널을 hipBLASLt와 같은 C++ shim으로 비교한 결과를 담고 있습니다. 256³부터 4096³까지의 정사각형 입력 10개에서 커널은 모든 크기에서 hipBLASLt보다 높은 처리량을 기록했으며, 1536³에서는 97,974 GFLOP/s 대 69,332 GFLOP/s로 1.35배 앞섰습니다. 성능을 뒤집은 핵심은 128x128 타일 하나를 고정하지 않고 grid 크기에 따라 128x128, 64x128, 64x64 타일과 warp 배치를 선택한 방식이었습니다. 글은 workspace 캐싱, heuristic 후보 실측, split-K와 wgm 설정, 10초 clock warm-up을 포함한 공정한 benchmark protocol이 과장된 비교를 막는다고 설명하며, 결과의 범위는 단일 RX 7900 XTX와 fp16 정사각형 GEMM으로 제한합니다.
실용적 조언
- GPU GEMM kernel을 비교할 때는 입력 크기 하나만 고정하지 말고 grid 규모에 맞춰 tile shape와 warp layout을 선택해야 합니다. 이 글에서는 128x128, 64x128, 64x64 타일을 compile-time parameter로 만들고 M·N에서 계산한 블록 수로 launcher가 선택하게 했습니다.
- Vendor library가 쉽게 이기는 것처럼 보이더라도 workspace 캐싱 여부, heuristic 후보의 실제 timing, split-K와 workgroup mapping 설정을 먼저 확인해야 합니다. 이 프로젝트에서는 해당 harness 결함을 고친 뒤 hipBLASLt의 512³ 처리량이 2497 GFLOP/s에서 5201 GFLOP/s로 상승했습니다.
- GPU benchmark에는 측정 전 clock warm-up 시간을 고정해 기록해야 합니다. 동일한 fp16 kernel이 1초 warm-up에서 66,000 GFLOP/s, 10초 warm-up에서 90,705 GFLOP/s를 냈으므로 이 프로젝트는 모든 측정 전에 10초를 기다리고 warmup_s를 결과에 남깁니다.
섹션별 상세
용어 해설
- GEMM
- — GEMM은 행렬 A와 B를 곱해 출력 행렬을 만드는 연산으로, 대규모 신경망 추론과 학습의 핵심 계산량을 차지합니다. 이 글에서는 fp16 입력을 사용해 GPU 타일 단위로 처리량을 측정합니다.
- WMMA
- — WMMA는 GPU의 행렬 곱셈·누산 명령을 활용하는 방식입니다. 여러 warp가 출력 타일을 나눠 계산하며, 일반적인 스칼라 연산보다 행렬 연산 하드웨어를 직접 활용해 GEMM 처리량을 높입니다.
- LDS
- — LDS는 GPU 작업 그룹 내부의 스레드가 공유하는 빠른 로컬 메모리입니다. 이 커널은 A와 B의 타일을 두 개의 LDS 버퍼에 번갈아 적재해 한 타일을 계산하는 동안 다음 데이터를 준비합니다.
- VGPR
- — VGPR은 GPU 실행 단위가 사용하는 벡터 범용 레지스터입니다. 레지스터 사용량이 지나치게 크면 spill로 인해 메모리 접근이 늘어나지만, 이 커널은 188 VGPR을 사용하면서 register spill을 발생시키지 않았습니다.
- split-K
- — split-K는 GEMM의 K 차원 계산을 여러 작업 블록으로 나눠 병렬 처리하는 튜닝 매개변수입니다. hipBLASLt의 성능을 공정하게 측정하려면 이 값과 workgroup mapping을 후보별로 설정하고 실제 실행 시간을 비교해야 합니다.
언급된 도구
GEMM의 tile size, split-K, workgroup mapping 후보를 선택하고 GPU 행렬 연산을 실행하는 AMD math library입니다.
Mojo GPU kernel, benchmark harness, protocol 파일을 포함해 RX 7900 XTX의 inference와 GEMM 성능을 측정하는 프로젝트입니다.
gfx1100 아키텍처가 허용하는 fp32 WMMA 명령 mnemonic을 확인하는 검증 도구입니다.
언급된 리소스
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.