RDNA harmadszor
A gyártási költségek kezelése mellett érdemes rátérni azokra a fejlesztésekre, amelyek az egységnyi tranzisztorra levetített hatékonyságot növelik. Az alapokat tekintve az AMD az első két iteráció után most erőteljesebben hozzányúlt az RDNA architektúrához. Az RDNA 3 architektúra elsőként a Navi 31 kódnevet viselő, 300 mm²-es kiterjedésű GCD-n debütál, amelyet, mint említettük, a TSMC 5 nanométeres eljárásán gyárt a cég, és ezt egészíti ki hat darab, egyenként 37 mm²-es, 6 nanométeres, szintén TSMC node-on gyártott MCD.
Az RDNA 3 multiprocesszora [+]
A multiprocesszorra levetített részletek tekintetében Navi 31-ben 48 darab úgynevezett CUP (Compute Unit Pair) található – korábban ezek WGP néven futottak, de az elnevezésnek nincs lényegi jelentősége. Egy CUP két darab CU-t, azaz Compute Unitot tartalmaz, és ezeken belül van két darab, egymástól teljesen független, saját skalár egységekkel dolgozó, 64 utas, azaz 2048 bites, multiprecíziós SIMD motor.
Itt rögtön el is jutottunk az első nagy újításhoz, ugyanis az RDNA első és második generációs dizájnjában 32 utas, azaz 1024 bites multiprecíziós SIMD motorok voltak a saját skalár egységükre fűzve. Az RDNA 3 tehát megduplázza vektorfeldolgozók szélességét, és egyben átalakítja a variálható wavefrontméretre vonatkozó rendszer működését.
Hirdetés
Ahhoz, hogy ezt megértsük, előbb azt kell átfutni, hogy a korábbi két RDNA dizájn miképpen működött. Ezekben a rendszerekben egy Compute Unitra levetítve kétféle módot lehetett alkalmazni, vagyis maga a komplett feldolgozóegység egy 64 vagy két 32 lane-ből álló wavefrontot tudott futtatni. Utóbbi helyzet egyértelmű, hiszen egy ciklusra levetítve pont ilyen wavefrontra van kalibrálva a skalár egységhez kapcsolódó 32 utas SIMD, míg az előbbi konfigurációnál a 64 lane-ből álló wavefrontot a rendszer felbontotta két 32 lane-ből állóra, hogy azt két ciklus alatt le lehessen futtatni a két 32 utas SIMD-en, de logikailag ez olyan, mintha a hardver 64 lane-ből álló wavefrontot dolgozott volna fel.
Az RDNA 3 ezt az egészet úgy variálja át, hogy maga a skalár egységhez társított SIMD motor 64 utas lett, tehát egy ciklus alatt képes egy 64 lane-ből álló wavefrontot futtatni. Ezáltal ennek a működési módnak a kihasználtsága maximálisra, azaz 100%-ra nő, szemben első és második RDNA egy wavefrontra levetített 50%-os hatékonyságával. Az érdekesség azonban nem ez, hanem az úgynevezett VOPD mód, ami lehetővé teszi két 32 lane-ből álló wavefront lefuttatását a 64 utas vektormotoron, és mindezt egy ciklus alatt, a korábbi dizájnokkal megegyező függőségkezeléssel. Ez egyfajta dual-issue konstrukció, amelyben a Flynn-féle osztályozási modellt figyelembe véve a SIMD feldolgozó MIMD-ként is viselkedhet.
A VOPD mód csak 32 bites fix- és lebegőpontos operációkat támogat, ezen belül viszont logikai, összehasonlító, adatmozgató, feltételes, mátrixszorzó és aritmetikai utasításokat is kezel, beleértve a sűrűn használt FMA-t. Ráadásul a két darab, párhuzamosan futó wavefrontnak nem kell szükségszerűen ugyanazt az adattípust használnia. Ennek a változtatásnak leginkább majd a sugárkövetés veszi hasznát, mivel VOPD-t használva két olyan 32 lane-ből álló wavefront is futtatható egy vektormotoron, amelyek közül az egyik sugárkövetéssel kapcsolatos, integer feladatokat végez.
Az RDNA 3 másik újítása, hogy az egy skalár egységhez tartozó 64 utas multiprecíziós SIMD motor támogatja a WMMA-t (Wave Matrix Multiply Accumulate), amivel egy ciklus alatt BFloat16, FP16 és Int8 adattípussal 64 darab Dot2, míg Int4-gyel 64 darab Dot4 operáció hajtható végre. Erre a működési módra az AMD AI Matrix Acceleratorként hivatkozik.
Túllépve a vektormotort érintő átalakításokon, vissza lehet térni a CUP-hez, amelyben 128 kB-os Local Data Share (LDS) található, és ezen a négy darab, egyenként 192 kB-os regiszterterülettel rendelkező SIMD motor osztozik. A helyi adatmegosztás mellett CU-nként egy darab 32 kB-os L0 adat gyorsítótár is fellelhető. Itt látható, hogy az LDS-hez az AMD nem nyúlt, az amúgy is nagyra volt tervezve a korábbi RDNA dizájnokban is, de a regiszterterület másfélszer, míg az L0 adat gyorsítótár kétszer nagyobb lett.
A CUP-ken belül a saját regiszterterülettel és wave pufferrel rendelkező skalár egységekhez tartozik egy közös 16 kB-os skalár és egy 32 kB-os utasítás gyorsítótár. Előbbit csak a skalár feldolgozó éri el, míg utóbbit az összes feldolgozó hasznosíthatja, és természetesen mindkét gyorsítótár írható és olvasható is. Ezek mellett a textúrázást CU-nként egy blokk oldja meg, amely négy darab, csak szűrt mintákkal visszatérő, Gather4-kompatibilis textúrázó csatornát rejt, és a rendszernek ezen a részén egy sugárkövetéshez használható, metszésvizsgálatokat gyorsító blokkal is lehet számolni. Az SFU-k, vagyis a speciális funkciókért felelős egységek összesített száma nem változott, azaz vektormotoronként nyolc feldolgozóról beszélünk, illetve adott még a dupla pontosságot biztosító egy szem 64 bites feldolgozó is. Némileg módosult még a vektormotorok ütemezése is, ugyanis új, szoftveres függőségmenedzsmentet tervezett az AMD.
A gyorsítótárak szervezése logikailag az előző generációt másolja, de esetenként a kapacitás, illetve a gyorsítótárszinteket összeköttető busz sávszélessége nagyobb lett. A memóriavezérlőkhöz a 96 MB kapacitású, Infinity Cache nevű írható és olvasható gyorsítótár kapcsolódik, és a 2,25-ször gyorsabban kommunikáló 6 MB-os, szintén írható és olvasható másodlagos gyorsítótár ehhez van hozzákötve a ROP blokkal egyetemben. Az utóbbi részegységek továbbra is a másodlagos gyorsítótár kliensei, vagyis a pixel- és textúraadatokra vonatkozó memóriaelérések koherensek, továbbá minden ROP blokk saját RB gyorsítótára egy olyan 256 kB-os, L2 cache-sel másfélszer gyorsabb adatmozgást biztosító L1 gyorsítótárhoz kapcsolódik, amelyet még nyolc darab CUP is elér, és ezek az egységek a raszterizálóval együtt ezen osztoznak. Mindemellett az L1 gyorsítótárhoz van bekötve a CU-khoz tartozó L0 cache is.
A ROP blokkok tekintetében a korábbi logikai felépítés maradt meg, vagyis ezek továbbra is úgynevezett pixelmotorokat tartalmaznak, egészen pontosan kettőt, és egy pixelmotor 4 blending, illetve 8 Z mintavételező egységből áll, ami összesen 192 blending és 384 Z mintavételezőt jelent.
A cikk még nem ért véget, kérlek, lapozz!