AMD objašnjava occupancy matematiku za MI355X: visoka popunjenost nije uvjet za vršni throughput
AMD ROCm tim objavio je tehnički vodič o ručnom izračunu GPU occupancyja za CDNA4 arhitekturu. Ključni nalaz: matrix-bound kerneli na MI355X postižu vršni throughput pri svega 12% occupancyja — protuintuitivan rezultat za praktičare koji dolaze iz CUDA ekosustava.
Ovaj članak generiran je uz pomoć umjetne inteligencije na temelju primarnih izvora.
AMD ROCm tim objavio je opsežan tehnički vodič o izračunu GPU occupancyja za CDNA4 arhitekturu, konkretno za MI355X akcelerator. Tekst cilja GPU kernel inženjere koji optimiziraju prilagođene kernele za produkcijsku inferenciju ili treniranje — i donosi nalaz koji je izravno protuintuitivni za praktičare koji dolaze iz NVIDIA CUDA ekosustava.
Što je occupancy i zašto se računa ručno?
GPU occupancy mjeri udio dostupnih resursa koji su aktivno popunjeni wavefrontovima (CUDA terminologijom: warpovima). Visoka occupancy dugo se smatrala preduvjetom za visoki throughput — više aktivnih wavefrontova znači više mogućnosti za skrivanje latencije memorijskih pristupa.
Autori vodiča zauzimaju drugačiji stav: occupancy je u potpunosti izvediv iz poznatih hardverskih ograničenja i resursa koje kernel troši, pa ga treba razumjeti iz prvih principa, a ne tretirati kao neprozirnu metriku iz profiling alata. Cilj je dati inženjere koji mogu predvidjeti occupancy prije pokretanja kernela.
Četiri limirera i arhitektura CDNA4
MI355X organiziran je oko 256 Compute Unitova raspoređenih po 8 XCD čipova, taktiranih na 2,4 GHz. Svaki CU sadrži 4 SIMD jedinice od 64 lane-a, svaka s privatnim registarskim fileom.
Vodič identificira četiri resursa koja određuju gornju granicu occupancyja:
Vektorski registri (VGPR) — na CDNA4 je registarski file 512 unosa po lani, a registri su dijeljeni između regularnih i akumulatorskih registara. Ovo je bitna razlika od CDNA3 gdje su akumulatorski registri (AccVGPR) bili odvojen pool — AMD naglašava da inženjeri koji prenose znanje s prethodne generacije moraju ažurirati ovu pretpostavku.
Skalarni registri (SGPR) — oko 800 po SIMD jedinici, koriste se za vrijednosti uniformne po cijeloj wavefrontu.
Lokalna dijeljenja memorija (LDS) — povećana s 64 KB na CDNA3 na 160 KB po Compute Unitu na CDNA4.
Slotovi za workgrupe — hardversko ograničenje broja istovremeno aktivnih workgrupa po CU.
Protuintuitivni nalaz: niska occupancy, vršni throughput
Središnji nalaz vodiča izravno proturječi intuiciji iz CUDA optimizacijskog iskustva. AMD microbenchmark za MXFP8 operacije — za koje MI355X postiže oko 5 PFLOP/s — pokazuje da kerneli s visokim instruction-level parallelismom (ILP=8) drže 4,82 PFLOP/s pri svega 12% occupancyja. Ta vrijednost premašuje sve što ILP=2 kernel postiže čak i pri 96% occupancyja.
Razlog: matrix jedinice na CDNA4 dovoljno su brze da zasite pipeline s malim brojem aktivnih wavefrontova. Kada kernel uspješno skriva latenciju kroz ILP umjesto kroz wavefront paralelizam, visoka occupancy nije samo nepotrebna — može biti nemoguća zbog ograničenja registarskog filea bez da donosi ikakvu korist.
MXFP8 GEMM primjer: ista jezgra, dvije generacije
Vodič uključuje konkretan primjer: MXFP8 GEMM kernel s tile-om od 256 niti koji troši 128 VGPR-ova i 32 KB LDS-a.
Na CDNA3 s 64 KB LDS-a: kernel je LDS-limitiran i postiže 25% occupancy — samo dva takva kernela mogu istovremeno biti aktivna po CU jer zajednički iscrpe LDS.
Na CDNA4 s 160 KB LDS-a: isti kernel više nije LDS-limitiran. Sada ga ograničavaju registri, a occupancy raste na 50% — četiri instance po CU. Isti izvorni kod, različiti limiteri, dvostruko viša popunjenost.
Kontekst: AMD zatvara dokumentacijski jaz prema CUDA
Vodič je dio AMD-ovog šireg napora da poboljša ROCm softversku dokumentaciju i smanji barijeru za inženjere koji prelaze s NVIDIA ekosustava. CUDA je desetljetima imao prednost u dubini tehničke dokumentacije — detalji poput ovih o limitima resursa i njihovom utjecaju na occupancy bili su dobro dokumentirani za NVIDIA arhitekture, dok su za AMD GPU-ove zahtijevali eksperimentalno istraživanje ili uvid u interni kod.
Ovakvi vodiči iz prvih principa ciljaju upravo tu prazninu: inženjeri koji znaju što traže mogu sada derivirati occupancy analitički, bez pokretanja kernela, što ubrzava iterativni ciklus optimizacije produkcijskih AI modela na AMD infrastrukturi.
Česta pitanja
- Zašto matrix-bound kerneli postižu vršni throughput pri niskoj occupancy na MI355X?
- Matrix jedinice na CDNA4 su dovoljno brze da zasićuju pipeline čak i s malim brojem aktivnih wavefrontova. Microbenchmark pokazuje ILP=8 koji drži 4,82 PFLOP/s pri svega 12% occupancyja — više nego ILP=2 pri 96% occupancyja.
- Koji su četiri limitera occupancyja na MI355X?
- Četiri limirera su: vektorski registri (VGPR, 512 unosa po lani, dijeljeni između regularnih i akumulatorskih registara), skalarni registri (SGPR, oko 800 po SIMD-u), lokalna memorija (LDS, 160 KB po Compute Unitu) i broj slobodnih slotova za workgrupe.
- Kako se MI355X razlikuje od CDNA3 po pitanju LDS-a?
- CDNA4 MI355X povećava LDS s 64 KB (CDNA3) na 160 KB po Compute Unitu. Isti MXFP8 GEMM kernel koji je bio LDS-limitiran na CDNA3 pri 25% occupancyja, na CDNA4 postiže 50% occupancyja jer je sada registarski-limitiran.