Betekintés az NVIDIA Turing architektúra rejtelmeibe

Sok szempontból a Volta köszön vissza, amely rendszerből nem is készült GeForce.

Végre akcióban az egységes gyorsítótár

Az L1 gyorsítótárat szándékosan hagytuk ki az előző oldalon, mivel itt is a Volta dizájnja köszön vissza, vagyis amíg a Pascal architektúrában az L1 gyorsítótár és a helyi adatmegosztás különálló volt, addig a Turingban ezek egységesek. Ez a struktúra korábban nem volt megtalálható a GeForce-okon, és igazából a Pascal megoldásával sincs akkora baj, de az NVIDIA korábbi architektúráira jellemző volt, hogy tipikusan regiszterszegények, nincs bennük utasítás-előbetöltés, illetve az L1 gyorsítótár elérése is rendkívül lassúnak számított a helyi adatmegosztáshoz viszonyítva, ráadásul a tárkapacitás szempontjából sem voltak eleresztve. Az utasítás-előbetöltés és a regiszterek tekintetében sok választása nincs az NVIDIA-nak. Előbbi eléggé nehezen építhető be egy nem megfelelően kialakított GPU-ba, míg utóbbi igazából elég sok tranzisztort igényel, tehát új gyártástechnológia nélkül ez aligha opció.

Hirdetés

Addig nincs is baj, amíg van elég regiszter és helyi adatmegosztás megfelelő számú warpot futtatni, de amint valamelyik elfogy, úgy csökken a futtatható warpok száma, és onnantól kezdve a multiprocesszorok egyre hosszabb ideig várnak majd az adatra. Végül kis számú warpok mellett már az is előfordulhat, hogy a feldolgozókat üresjáratba kell kapcsolni, ugyanis nincs adat, amivel végezhetnék a feladatukat.

Azt tudni kell, hogy a mai GPU-k statikus erőforrás-allokációt használnak, tehát az NVIDIA problémája egyáltalán nem egyedi. Az Intel és az AMD architektúrái is ugyanígy érintettek, csak a konkurensek már korábban elkezdték kezelni a helyzetet. Az Intel például rengeteg regisztert és helyi adatmegosztást épít a fejlesztéseibe, így nagyon nehéz elérni, hogy ezekből kifogyjon a multiprocesszor. Ez amolyan erőből történő megközelítés, aminek az ára a tranzisztorszámon meg is látszik, és az Intel képtelen kellő mennyiségű feldolgozót használni, mert az akkora lapkaterületet igényelne, hogy nem éri meg beépíteni. Az AMD a fenti gondokra először a Polaris architektúrában bevezetett utasítás-előbetöltéssel reagált, amely lerövidíti a memóriaeléréshez szükséges időt, így kevésbé jelent problémát, ha a futtatható wavefrontok száma csökken. A Vega ugyanezt megkapta, és további fejlesztésként az igénybe vehető helyi adatmegosztás kapacitása is nagyobb lett, ami nyilván sokat segít, hiszen innentől kezdve majdnem kétszer több adat fér el benne.


[+]

Az NVIDIA a Volta architektúrában egy másik irányt választott, és ezt örökölte meg a Turing is. Ebben a dizájnban már nincs különálló L1 gyorsítótár és helyi adatmegosztásra szánt memória, hanem ez össze van vonva egy 96 kB-os multiprocesszoronkénti gyorsítótár formájában. A Volta ugye 128 kB-ot használt erre a célra, de kiemelendő, hogy azért valahol kompromisszumot kell kötni a mérnököknek is, hiszen eleve óriásiak az új lapkák, ha nem vesznek vissza a gyorsítótár kapacitásából, akkor még nagyobbak lennének. Idővel visszatérhet a 128 kB-os, vagy akár a nagyobb gyorsítótár, de ahhoz mindenképpen 7 nm-es node-ra kell ugrani.

A strukturális változás következtében L1 gyorsítótár kétszer nagyobb sávszélességgel érhető el a Pascal különálló dizájnjához viszonyítva, illetve a textúra gyorsítótár is megszűnt. Utóbbinak nincs különösebb jelentősége, mivel csak pár kilobájtnyi kapacitásra van szükség, az pedig bőven lecsippenthető a 96 kB-os L1 gyorsítótárból. Maga az összevont L1 gyorsítótár tetszés szerint particionálható. A helyi adatmegosztás kapacitása maximum 64 kB lehet, és a maradék terület maradhat a hagyományos L1 gyorsítótár, ami ezúttal a textúraadatokat is tárolja. Ez a változás két előnyt kínál. Elsődlegesen kevésbé kell a programokat kihegyezni a helyi adatmegosztásra fenntartott adatok manuális menedzselésére, amire egyébként az NVIDIA architektúrája eleve érzékeny. Persze az optimális teljesítmény eléréséhez továbbra is szükség van némi manuális menedzsmentre, de ha ezt kihagyja a fejlesztő, akkor már messze nincs akkora gond, mint a Pascal esetében.

Bár az NVIDIA nem részletezte, hogy az összevont gyorsítótárhoz milyen fordítóoptimalizálást alkalmaznak, de itt hasznos megoldás lehet, ha a shadereket szándékosan limitált, de még relatíve sok warp futtatását lehetővé tevő erőforrás-allokációval fordítják le, és az L1 gyorsítótár elég gyorsan érhető el ahhoz, hogy erre építve a regiszterek felszabadíthatók legyenek. Valószínű egyébként, hogy az NVIDIA továbbra is a helyi adatmegosztásra fenntartott adatok manuális menedzselésére buzdít, az újítás igazából egy könnyítésként szolgál, és ha valakit mondjuk nem különösebben villanyoznak fel a Turing flancos funkciói, az egységes gyorsítótár mindenképpen egy olyan újítás, ami általánosan képes megmutatni az előnyeit. Persze a legtöbb mai alkalmazást még leginkább úgy tervezik, hogy ne nagyon fussanak ki a korábbi hardverek limitjeiből, de idővel a szabványosan előírtnál nagyobb helyi adatmegosztás szükségessé válhat, és erre most már mindhárom PC-s érintett új architektúrái is kellőképpen felkészültek.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés