NGG, ami teljesen működik
A Navi 10 geometriáért és raszterizálásért felelős rendszere is teljesen új, ráadásul nagyon fura a felosztása. A korábbi architektúráknál leginkább azt láttuk, hogy a skálázhatóság érdekében gyakorlatilag több részre voltak bontva a szóban forgó részegységek. Ennek az előnye nyilván a skálázás, vagyis a számítási teljesítmény növelésével a grafikus vezérlő egyéb képességei is javultak, így nem keletkezett szűk keresztmetszet, ami rontaná a hatékonyságot. A GPU-k azonban heterogén többmagos processzoroknak tekinthetők, tehát a skálázás érdekében ugyan jó az egyes részegységeket felosztani, majd a számukat növelni, de ilyenkor egyre többször fordul elő az a helyzet, hogy valamelyik shader blokk rengeteg compute feladatot kap, és olyankor a geometriai motor nem tud csinálni semmit.
Az AMD szerint ez tranzisztorpazarlás, így a korábban alkalmazott strukturális felépítést átalakították. A fő alapegység a shader motor, amelyből kettő van a Navi 10-es GPU-n belül. Ezek két-két compute blokkra vannak osztva, és egy-egy compute blokkon belül van egy 128 kB-os L1 gyorsítótár, öt darab WGP, négy pixelmotor, egy raszterizáló és egy Prim egység.
Az új geometriai motor alapvetően egyetlen egy geometriai processzorból áll, amin belül persze számos, részfeladathoz kapcsolódó egység van, de ezek egyik compute blokkba sincsenek direkten bekötve, ahogy például a korábbi generációknál. A célja ennek a koncepciónak az, hogy ha egy compute blokkon belül esetleg csak compute shaderek futnak, akkor a hardver ne veszítse el az adott blokkba épített geometriai részegység teljesítményét. Ezzel a felépítéssel a geometriai processzor megosztható mind a négy compute blokk között, vagy akár egy blokkhoz is hozzárendelhető, vagyis maximálisan lehet alkalmazkodni az adott feladathoz. Az említett egységen belül egyébként minden olyan elem továbbfejlesztett verziója megtalálható, ami a régebbi hardverekben benne volt.
A geometriai processzorhoz compute blokkonként kapcsolódik egy-egy raszterizáló, aminek a képessége megegyezik a Vega architektúrában bemutatkozóval, tehát az IMR mód mellett támogatja a DSBR, vagyis a draw-stream binning rasterizer módot is, ami nem csak gyorsítja a feldolgozást azzal, hogy a lapkán belül tartja a számításokat, hanem még a fogyasztást is csökkenti a memóriabusz terhelésének visszafogásával.
Újdonság az a Prim egység, ami szintén a geometriai processzorhoz kapcsolódik, és compute blokkonként egy van a GPU-n belül. Ez segíti a nem látható háromszögek korai kivágását. Itt érdemes visszautalni a Vega 10 egyik érdekes újítására, vagyis az NGG-re, ami utólag csak részben került engedélyezésre. Ennek oka az volt, hogy a primitive shader ugyan képes volt működni direkt támogatás esetén, de az AMD úgy akarta ezt megoldani, hogy ezzel a fejlesztőknek ne is kelljen foglalkozniuk. Ez igazából logikus, ha egy fejlesztő korán meg akar szabadulni a potenciálisan felesleges háromszögektől, akkor arra vannak szabványos, compute shaderre épülő megoldások. A vállalat ezért nem erőltette a primitive shadert, mert ez direkt támogatás esetén a Vega architektúrára korlátozta volna az egyes programkódokat. A compute shadereket viszont régóta támogatja minden GPU, tehát egy grafikus motoron belül igenis a szabványos kivágási technikákat érdemes célozni.
Az AMD ma is olyan rendszert képzel el, amelyet a fejlesztőknek nem kell direkten támogatni. Elég, ha a megszokott módon írják a programokat, a shader fordító majd a háttérben elvégzi azokat a feladatokat, amelyek ahhoz szükségesek, hogy az NGG mód teljesértékűen üzemeljen. Ez volt a Vega esetében is a terv, csak maga a hardver nem működött megfelelően, és információink szerint a háromszögek kivágása terén hozott néha problémás döntéseket. A Navi esetében azonban a vállalat korrigálta a problémákat, így az NGG mód már teljes mértékben aktív. Ennek persze szerves része a shader fordító is, hiszen el kell dönteni, hogy a vertex és geometry shadereket hogyan fordítsák le a hardver felé, de ez már szoftveres optimalizálás kérdése, vagyis maximum javulni fog a jövőben a hatékonyság, a hardver viszont már most működik.
Az ebből származó előnyt nehéz pontosan meghatározni, mert az NGG mód nem kikapcsolható, illetve az AMD szerint nagyon sok függ az adott alkalmazástól. Annyi biztos, hogy hatása mindenhol pozitív, és ehhez igazából tényleg nem kell tenniük semmit a programozóknak, a mai szabványos kódokat elemezve a meghajtó dönt minden kérdésben, a hardver pedig dolgozik, ha esetleg primitive shadereket kap.
A cikk még nem ért véget, kérlek, lapozz!