Minulý pátek jsme tu měli porci nových detailů o architektuře Nvidia Ampere, které byly odhalené v Q&A vlákně na Redditu. Od té doby vypršelo NDA na další architektonické informace, takže se teď na architekturu podíváme znovu a více kompletně.
Parametry jednotlivých odhalených – a brzy uvedených – grafik (GeForce RTX 3090, GeForce RTX 3080 a GeForce RTX 3070) jsme probírali separátně v tomto článku. Zde se jim tedy už věnovat přímo nebudeme a zaměříme se na jejich celkovou architektonickou povahu.
První dva Ampere: charakteristiky čipů GA102 a GA104
Pro začátek nejdříve oficiálně potvrzené charakteristiky čipů. Jak již víme, jsou vyráběné procesem „8N“, což znamená 8nm proces Samsungu s úpravami specifickými pro Nvidii, které by měly přinášet lepší charakteristicky.
Velký (herní Ampere) GA102
Čip GA102, který je v RTX 3080 a RTX 3090, má plochu 628,4 mm² (únik od twitterového leakera kopite7kimi říkal 627 mm², což je tak blízko, že si nejspíš nevymýšlel). Obsahuje 28,3 miliard tranzistorů, což dává vysokou hustotu tranzistorů (45 milionů na mm², proti 24,7 milionům u Turingu TU102).
Čip obsahuje 84 bloků SM uspořádaných do zdá se sedmi bloků GPC neboli Graphic Processing Clusters (každý obsahuje 12 bloků SM). Jeden blok SM má 128 shaderů (proti 64 v architektuře Turing). Základním stavebním kamenem není přímo blok SM, ale pár bloků SM, který je sdružený to tzv. bloku „TPC“ (Texture Processing Cluster), těch je v čipu tedy 42. Čip má 384bitovou sběrnici a 6 MB L2 cache. Počet tensor jader je 336 a RT jader 84. Celkej má čip 10 752 shaderů.
V modelu GeForce RTX 3090 Nvidia vypíná dva bloky SM (jeden TPC), což je asi minimum, co se dá najednou vypnout. Počet RT jader a současně i bloků SM tím klesá na 82 (41 TPC), tensor jader je 328, shaderů 10 496.
Konfigurace GeForce RTX 3080 má stejné GPU výrazněji ořezané. Nvidia zde ponechává jen 8704 shaderů, jen 320bitovou paměťovou sběrnici a také je neaktivní rozhraní NVLink pro SLI. Ořezání by modelově mělo vypadat tak, že je vypnutý vždy jeden celý GPC ze sedmi a dále dva TPC v nějakém dalším (nebo dvou dalších). Je ale asi možné, že ořezání může vypadat i jinak (tedy že by bylo aktivních 7 GPC), jinak by si tímto Nvidia poměrně svazovala ruce při využívání zmetků z výroby – není-li chybovost velmi nízká. RTX 3080 má 68 bloků SM (34 TPC), 68 RT jader a 272 tensor jader. Nemáme informace o tom, že by byla osekána L2 cache.
Menší Ampere: GA104
Levnější mainstreamovější čip GA104, který bude v kartách už od 499 dolarů (a eventuálně možná i levnějších), obsahuje 17,4 miliardy tranzistorů, což je o něco málo méně než TU102. Jeho plocha je 392 mm², tedy o dost menší, než TU102. Na tom je vidět škálování mezi 12nm (16nm generace) a 8nm (10nm generace) procesem.
Toto GPU má aktivních 46 SM, tedy 5888 shaderů, 184 tensor jader, 46 RT jader. Ovšem nevíme jistě, zda je jich na čipu fyzicky víc, nebo je to plná palba. Sběrnice pamětí je 256bitová a čip má 4 MB L2 cache.
ROP už nejsou navázané na paměťový subsystém
Velmi zajímavá změna nastala u rasterizačních jednotek. Ty bývaly dlouho navázané na řadič pamětí a šířka sběrnice tak nepřímo udávala, kolik ROP je v GPU přítomných/aktivních. Karty s 384bitovou sběrnicí by měly 96 ROP, ty s 256bitovou 64 ROP a tak dále. U Ampere je ale Nvidia oddělila a ROP jsou místo toho distribuované v blocích SM. Podle Nvidie tato změna příslušnosti nemá příliš ovlivňovat celkový výkon, ale znamená, že kapacita rasterizérů škálovat nahoru se šířkou GPU co do počtu bloků SM/shaderů.
Článek pokračuje na další straně.
Galerie: Architektura a detaily GPU Nvidia Ampere
Architektura bloku SM v architektuře Ampere
Nejzásadnější změna v Ampere se odehrává na úrovni bloku SM s shaderovými jednotkami. Jde o ono zdvojení jednotek FP32 (alias „Cuda jader“), o kterém jsme psali již minule. To nespočívá v prostém zdvojení všech prostředků v SM, implementace je jiná.
Blok SM má stejně jako v architektuře Turing čtyři nezávislé Warp Schedulery a Dispatche, které posílají instrukce do jednotlivých shaderů. Lze si to představit jako čtyři jádra se širokým SIMD – Scheduler posílá na všechny jemu příslušné shadery (= čtvrtinu SM, zde 32 shaderů) jednu vektorovou instrukcí, tzv „warp“. Warp je vlastně SIMD16 instrukce (poznámka: AMD tomuto říká wavefront a šířka wavefrontu u architektury RDNA je SIMD32; u GCN to bylo dvakrát širší SIMD64).
V Pascalu posílal scheduler jednotlivé warpy 16 shaderům (SM měl tedy celkem 64 shaderů). V Turingu jak známo přidala Nvidia separátní celočíselné jednotky, takže warp sheduler mohl celočíselné (INT) instrukce (warpy) poslat do separátních 16 jednotek INT32 a paralelně poslat FP32 warp do klasických FP32 shaderů. Toto značně zlepšilo výkon na 1 MHz, neboť část operací se počítala paralelně, INT warpy už nezabíraly cykly, které se tak mohli předělit FP32 operacím.
Ampere ponechává úplně stejně čtyři warp schedulery, takže na SM se pořád dá v jistém smyslu pohlížet jako na čtyři jádra. A warpy by pořád měly mít šířku 16 shaderů. Ovšem do oněch drujých paralelních jednotek byla doplněna podpora pro výpočet nejen INT, ale už i standardních FP32 operací. Takže tyto sekundární jednotky nyní mohou dělat i to, co ty primární. Scheduler tak může do jednotek poslat dva FP32 warpy za jeden cyklus místo jednoho – v takové situaci je potenciální hrubý výkon 2× vyšší než u Pascalu nebo Turingu. Alternativně může poslat jeden INT a jeden FP32 warp, což už uměl Turing – v takovém případě výkon nestoupne.
Celý blok SM se čtyřmi warp schedulery/dispatchy má tedy celkem 4× (16+16) shaderů, což dává 128 shaderů, a dokáže spočítat až osm warpů za takt (pokud by se náhodou sešly samé INT operace, tak jenom čtyři, ale to bude asi spíš vzácné).
V Turingu ještě Nvidia INT jednotky nepočítala mezi počtem „Cuda jader“ (shaderů), uvedeným ve specifikacích. Nyní, když sekundární jednotky zvládají i FP32 operace, už je jako shadery uvádí, proto mají GPU více jak dvojnásobné počty shaderů proti předchozí generaci. GeForce RTX 2080 (2944 shaderů) a RTX 3070 (5888 shaderů) mají ve skutečnosti stejný počet bloků SM (46), rozdíl je jen ve schopnosti oněch sekundárních jednotek.
Dále v SM
Kromě samotných shaderů obsahuje jeden blok SM jedno RT jádro pro výpočty ray tracingu a čtyři tensor jádra. V každém SM jsou čtyři texturovací jednotky a sdílená 128KB L1 cache. Registry a load/Store jednotky (čtyři) nejsou sdílené pro celý SM, ale vždy pro onu jednu čtvrtinu (16+16 shaderů) sdruženou pod jeden ze čtyř Warp Schedulerů.
Herní Ampere je výrazně odlišný od výpočetního
Mimochodem: toto je unikátní jen pro herní verzi Ampere. Výpočetní verze Ampere v akcelátoru A100 má v SM místo toho, co jsme popisovali, uspořádání stejné jako Turing. Na jeden warp scheduler je 16 FP32 jednotek a 16 separátních INT jednotek, které operace FP32 neumí. Takže počet shaderů je ve specifikacích jen 64 na blok SM, ne 128 jako u herního Ampere. Na oplátku má blok SM ale vyhrazené jednotky pro výpočty FP64 – těch je osm na blok SM.
Článek pokračuje na další straně.
Galerie: Architektura a detaily GPU Nvidia Ampere
Jednotky pro ray tracing a pro AI/DLSS
Kromě samotných FP32 shaderů přináší Ampere ale v blocích SM a celém GPU i další změny.
RT jádra druhé generace
RT jádra jsou v Ampere již v druhé generaci, která je proti první vylepšená. Nvidia u nich uvádí až dvojnásobný výkon, ale víceméně by mělo jejich fungování být stejné jako u Turingu. Ray tracingová operace je tedy iniciována shadery, ta zadají RT jádro za úkol vyhledání průsečíku paprsku s objektem.
RT jádra nejprve hledají průsečík s bounding volume boxy v pomocné hierarchické struktuře (tzv. BVH strom) a poté na nejnižší úrovni hierarchie hledají už rovnou průsečík s konkrétním trojúhelníkem. Když se tímto RT jádro prokouše, vrátí výsledek shaderům (podrobněji viz zde v článku o architektuře Turing). Stejně by to mělo fungovat i na architektuře RDNA 2 od AMD.
Míra akcelerace raytracingového efektu se tedy zřejmě nezměnila (to je asi dáno také tím, jak Microsoft v standardu DXR tento postup ray tracingu koncipuje), jen se zvýšil výpočetní výkon, který RT jádra pro akcelerovanou část postupu mají k dispozici. Nvidia ukazovala slajd ukazující nárůsty výkonu v ray tracingu proti Turingu, kde zrychlení byla od nějakých 1,6× až po 2,1×. Nejlepší bude to ovšem posuzovat až z reálných testů.
RT jádra umí počítat motion blur
Zajímavá novinka ale je, že Nvidia v rámci RT jader zabudovala hardwarovou podporu pro výpočet motion bluru, tedy rozmazání pohybu jako v kině/ve filmu. Během onoho hledání průsečíku paprsku a trojúhelníku RT jádro dokáže provést temporální interpolaci tohoto trojúhleníku – místo samotného průsečíku pro daný snímek tedy přidá ještě průsečíky pro pozice paprsků a trojúhelníků v sousedních snímcích – tedy například celkem třech snímcích jdoucích po sobě. To se pak při výpočtu finálního pixelu může smíchat, takže vznikne časově rozmazaný pohyb.
Motion blur se ve hrách používá jako speciální efekt, zde by ho vzala na svá bedra RT jádra, takže by nemusel stát tolik výkonu. Nevýhoda je zřejmě taková, že tuto metodu nelze použít pro běžnou rasterizační grafiku (u hybridní by asi mohl motion blur být aplikován jen tam, kde se požívá ray tracingový efekt?).
RT jádra a Tensor jádra mohou běžet paralelně
Uvnitř bloků SM došlo ještě k jedné změně ve výpočtech ray tracingu. Nevím, jestli to bylo obecně známo, ale u GPU Turing se nedaly naráz paralelně používat tensor jádra a RT jádra. Například výpočty DLSS tedy musely počkat, až nebude žádné RT jádro v daném bloku aktivní.
U Ampere už toto omezení není a oboje může běžet najednou. Současně s těmito jednotkami může teoreticky běžet i nějaký shader nebo obecný výpočet, ale AnandTech píše, že to není doporučeno z hlediska výkonu, protože tensor jádra konzumují registry bloku SM a kvůli tomuto konfliktu by tak shadery měly problém dosáhnout rozumného výkonu (výpočetní/shaderové operace paralelně s RT výpočty by snad takto limitované být neměly).
Tensor jádra 3. generace: stejný počet jako v Turingu, výkon je uměle omezen
GPU Ampere v kartách GeForce nemají navýšenou kapacitu tensor jader. Na jeden blok SM má připadat stejná porce jednotek/FMA jako v Turingu, ale je to jinak rozděleno. Turing má 8 tensor jader na SM, kdy každé dá 64 16bitových operací FMA za cyklus. Herní Ampere má jen 4 tensor jádra, ale ta dají 128 operací za cyklus.
Jak Turing TU102, tak Ampere GA102 tak zvládnou 512 operací FMA pracujících s FP16 hodnotami za jeden cyklus/na jeden blok SM. Nové GeForce RTX 3000 ale efektivně mohou poskytnout vyšší výkon díky použití funkce Sparsity, která část výpočtů eliminuje, takže je víc místa na zbývající. S touto optimalizací tedy má Ampere ekvivalent výkonu 1024 operací FMA za cyklus na jeden blok SM. A spolu s navýšením počtu bloků SM v čipech pak vychází, že AI výkon karet je více než dvojnásobný (tj. Sparsity je v Nvidií udávaných TFLOPS už započítána).
Výkon v umělé inteligenci zůstává uměle omezen (bude Titan?)
Nvidia údajně v grafikách GeForce neodemyká plný AI výkon těchto tensor jader (hraní, kde jsou tensor jádra reálně používána zejména nebo téměř výhradně pro upscaling DLSS, asi plnou kapacitu nepotřebuje). Výpočetní výkon je údajně omezený na polovinu, pokud používáte tensorové operace se FP16 vstupem, ale s akumulací do FP32 hodnot.
Jde o umělou segmentaci patrně udělanou proto, aby herní karty nebyly houfně používány pro profesionální trénování neuronových sítí, tj. aby tito movitá zákazníci neměli cukání kupovat levné GeForce místo profi karet Tesla (respektive teď už jen Nvidia A100), Quadro či alespoň Titan. Je možné, že toto zde ponechává místo pro vydání grafiky Titan s čipem Ampere právě pro potřeby práce s umělou inteligencí, kde už bude výkon v těchto operacích plně odemčený.
Článek pokračuje na další straně.
Galerie: Architektura a detaily GPU Nvidia Ampere
Další podrobnosti: virtualizace, RTX IO
Kromě změn v hlavních výpočetních jednotkách, které jsme popisovali na předešlých stranách, pak Ampere přináší i další změny, z nichž některé budou možná odhalené až při recenzích. GPU samozřejmě podporují PCI Express 4.0, což dodá dvojnásobnou propustnost v propojení mezi CPU/operační pamětí a grafikou. Dále také Nvidia využívá úplně nové paměti GDDR6X s kódováním signálu PAM4. Těmi jsme se podrobně zabývali zde:
Tip: Nvidia GeForce RTX 3090 má nové paměti GDDR6X s rychlostí až 21 GHz, potvrdil Micron
SR-IOV v GeForce!
GeForce RTX 3000 má mít zřejmě něco, co dosud bylo v hráčských kartách nedostupné a zapnuté jenom u enterprise karet. Totiž virtualizaci SR-IOV umožňující používat GPU mezi více virtualizovanými systémy. Tato funkce bude údajně povolená u všech karet GeForce RTX 3000. Zatím nevíme, kolik bude moct být maximálně hostů.
Aktualizováno (12.9. 2020):
Bohužel toto už neplatí. Ryan Smith z webu AnandTech, který tuto informaci přinesl, teď píše, že šlo o omyl. Nvidia mu původně uvedla, že podpora existuje, ale ve skutečnosti na hráčské verzi GeForce nebude k dispozici, stejně jako tomu bývalo i dříve. GPU samotné SR-IOV podporuje. Ale podle Nvidie jde o "enterprise funkci" a do karet GeForce ji neplánuje zařadit.
RTX IO je implementace DirectStorage
V představení architektury Xboxu Series X jsme psali, že Microsoft integroval pro svou konzoli akcelerátory určené k dekompresi textur při načítání ze SSD (tzv. Velocity Architecture). To dovoluje je rychleji dostat z úložiště do grafické paměti a tedy je možné jich část držet mimo a šetřit tím její kapacitu.
Nvidia teď odhalila, že podobné přímé načítání textur z SSD má už i GPU Ampere. Jmenuje se RTX IO a údajně až 100× vylepšuje propustnost načítání textur z HDD/SSD při 20× snížení zátěže CPU. Na slajdu, ke Nvidia funkci prezentuje, slibuje, že s SSD pro PCI Express 4.0 ×4, které má rychlost čtení 7000 MB/s (taková teprve přicházejí, viz Samsung SSD 980 Pro nebo Sabrent Rocket 4 Plus a jiná SSD s Phisonem E18), má použitá komprese dosáhnout efektivní propustnost až 14 GB/s.
Nvidia tvrdí, že dekomprese tolika dat by potřebovala až 24 jader CPU (těžko posoudit, tato čísla raději berte s rezervou…), ale dekomprese v grafice pomocí RTX IO má snížit spotřebu na půl jádra CPU. Důležitý je také ten rozdíl, že data zřejmě pomocí DMA plynou rovnou z SSD do GPU, ne oklikou přes CPU a RAM. Je možné, že čísla Nvidie jsou pro nějaké extrémní situace, nezdá se moc reálné, že by hry najednou konzumovaly tolik dat najednou, nebo aspoň ne běžně. Nicméně tato technologie by do budoucna otevírala potenciál pro mnohem agresivnější streamování textur z úložiště, než bylo možné bez podobného offloadu.
Nvidia sice tuto funkci pojmenovala RTX IO, ale měla by to být kompatibilní implementace standardní technologie DirectStorage od Microsoftu. Jako součást platformy DirectX by ji měla podporovat i GPU jiných značek.
Dekomprese textur u RTX IO běží na shaderech, nejde o zvláštní akcelerátor
Při odhalení jsme psali, že funkce RTX IO obnáší hardwarovou dekompresi textur a díky tomu výrazně šetří výkon CPU. Ovšem zde to nebylo přesné. Dekomprese nemá vlastní hardwarovou jednotku nebo blok, který by ji akcelerovat. Nyní vysvitlo, že probíhá běžně pomocí shaderů, čili jde o „GPGPU“ výpočet. Teoreticky by tedy použití RTX IO mohlo ubírat 3D výkon, ovšem podle Nvidie je prý ztráta drobná/nevýznamná.
Asi tedy platí, že dekomprese na shaderech pořád může dosahovat lepšího výkonu než přes CPU, ale není to zadarmo. Je možné, že v onom marketingovém srovnání, kde Nvidia uváděla, že RTX IO dokáže ušetřit výkon až 24 jader CPU, by zátěž na GPU (tj. propad FPS) už byla dost znatelná.
Toto samozřejmě neznamená, že je funkce DirectStorage zbytečná, efektivita asi bude vyšší a také je zde ta výhoda, že textury se natahují ze SSD po PCI Expressu (prolétnou při tom samozřejmě přes čipset nebo northbridge procesoru) přímo do paměti GPU a nemusí procházet přes systémovou RAM.
RTX IO bude backportováno pro GeForce RTX 2000
RTX IO je tak nakonec spíše (GPU) softwarová než hardwarová funkce (u herních konzolí by ale zřejmě tato technologie měla být skutečně akcelerovaná). To vás možná teď trošku zklamalo, ale má to i své výhody. Nvidia totiž uvádí, že v ovladačích doimplementuje tuto funkci zpětně i pro grafiky Turing, kde bude fungovat stejně, na shaderech.
Preview DirectStorage přijde v roce 2021
DirectStorage budou moci vývojáři her využít asi až v příštím roce. Bude podporováno jen ve Windows 10. Nvidia by teoreticky mohla mít implementaci na vlastní pěst v ovladačích, ale není jasné, zda bude možné RTX IO použít, když ve Windows nebude podpora (kvůli tomu, že funkce zasahuje do komunikace s SSD).
Galerie: Architektura a detaily GPU Nvidia Ampere
Zdroje: AnandTech, techPowerUp, HotHardware VideoCardz