🟢 🔧 Hardware Objavljeno: · 3 min čitanja ·

AMD objašnjava occupancy matematiku za MI355X: visoka popunjenost nije uvjet za vršni throughput

Editorial ilustracija: AMD CDNA4 MI355X GPU matematika zaposlenosti i optimizacija kernel koda

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.