Architektura a novinky GPU Turing. Detailní pohled na novou architekturu Nvidie

15. 9. 2018

Sdílet

 Autor: Nvidia

Příští týden vyjdou recenze GeForce RTX 2080 a RTX 2080 Ti, čímž Nvidia konečně plně odhalí svá nová GPU s architekturou Turing. V posledních týdnech už prosákly některé architektonické podrobnosti (viz zdezde), ale včera Nvidia ukončila informační embargo na „teorii“ nové architektury oficiálně. Můžeme se tedy podívat na nové funkce a technologie, které se v těchto čipech nachází. 

Turing: Evoluce Volty plus Ray Tracing

Zveřejněné materiály k architektuře zatím potvrzují to, že Turing je víceméně odvozený z architektury Volta, nejde tedy o paralelní vývoj z Pascalu. Koncepce nicméně je podobná předchozím architekturám. Výpočetní jednotky v GPU Turing jsou členěny do bloků SM po 128 shaderech, ovšem každý SM se dělí na čtyři „subjádra“. Tato subjádra obsahují po 32 shaderech, dvě tensor jádra (dědictví Volty, ale zde jsou pokročilejší), warp scheduler a dispatch. Jádro SM dále obsahuje čtyři texturovací jednotky a konečně jedno „RT jádro“ či RT core, které slouží pro výpočty používané v ray tracingové grafice.

Schéma bloku SM v GPU architektury Turing Schéma bloku SM v GPU architektury Turing

Druhá ALU v shaderech

Co je podstatné i pro standardní rasterizační grafiku, je změna architektury jednotlivých shaderů (kterým Nvidia říká „Cuda jádra“, ale o samostatná jádra nejde). Nvidia převzala koncepci z GPU Volta a shader už není tvořen jen jedinou výpočetní jednotkou ALU. Místo toho má jednu ALU pro všechny klasické floating-point výpočty (tedy s pohyblivou řádovou čárkou) a nově ještě druhou ALU pro celočíselné (integer) operace. Turing tedy částečně používá dual-issue vykonávání instrukcí.

Shader v Turingu má kromě floating-point jednotky druhou ALU pro celočíselné operace, které přebírá část zátěže Shader v Turingu má kromě floating-point jednotky druhou ALU pro celočíselné operace, které přebírá část zátěže

Ačkoliv jsou floating point operace v shader programech dominující složkou, toto prý podle Nvidie dokáže některé shadery zrychlit až o 50 %. Vtip je v tom, že druhá jednotka není ani tak užitečná pro celočíselné výpočty, které budou vzácné, ale dokáže převzít i různé logické operace, včetně třeba porovnávání floating-point čísel. Primární ALU se jimi nemusí zabývat a má více času na násobení a sčítání.

Obrázek GPU Turing, čip TU102 Obrázek GPU Turing, čip TU102

FP16 s dvojnásobným výkonem

Výpočty v shaderech jsou podporovány se standardní přesností FP32 (nebo INT32), ale oproti Pascalu také s poloviční přesnosti FP16, přičemž tento režim má dvojnásobný výkon. Tedy stejně jako u schopnosti konkurenční GPU architektury Vega od AMD (funkce Rapid Packed Math). To znamená, že při výpočtech s FP16 je možné v jednom cyklu zpracovat dvakrát tolik operací a programátor může tedy FP16 použít k urychlení některých částí hry. Kromě Vegy a Turingu by FP16 s dvojitým výkonem měly snad podporovat také architektury Intelu (ale nevím, zda v kompatibilní formě).

Silnější paměťový subsystém

Další úpravou, která by mohla vylepšit výkon shaderů při stejném taktu, je vylepšený systém cache. 96 KB L1 cache je nově unifikovaná se sdílenou pamětí a cache pro textury. Lze přepínat mezi režimem 64KB L1 a 32 KB shared memory, nebo 32KB L1 a 64KB shared memory. L1 cache by měla poskytovat dvojnásobnou propustnost a také nižší latenci. L2 cache takto zrychlena není, ale má vyšší kapacity než u Pascalů (například TU102 má 6 MB).

Subsystém pamětí cache u Turingu a Pascalu Subsystém pamětí cache u Turingu a Pascalu

L0 instrukční cache

V schématu výše to sice chybí, ale podle popisu architektury má Turing navíc ještě jedno zlepšení. Nvidia mimoděk uvádí, že shadery v subjádrech mají navíc ještě mezipaměť L0 cache pro instrukce. To by byla docela závažná úprava (pokud nejde o nějakou chybu, což se nezdá moc pravděpodobné), i když není úplně jasné, k čemu L0 cache slouží. V případě CPU L0 cache obvykle drží již dekódované instrukce, takže při jejich opětovném použití už je není třeba dekódovat znovu, což šetří energii. L0 cache by mohla sloužit například jako loop buffer pro smyčky v kódu.

GDDR6 a lepší komprese

Větší L2 cache by měla také poněkud zmírnit spotřebu paměťové propustnosti, kterou budou hry generovat. Paměťová propustnost je jedním ze základních limitujících faktorů ve výkonu GPU a Turing toto omezení omezuje ještě dvěma cestami. Používá paměti GDDR6 na frekvenci 14 GHz efektivně, což dává výrazné navýšení propustnosti při stejné šířce sběrnice (GDDR5X například u Pascalů běžela na 10 GHz efektivně).

Efektivní paměťová propustnost ve hrách u Turing narostla kombinací lepší komprese a rychlejších pamětí Efektivní paměťová propustnost ve hrách u Turing narostla kombinací lepší komprese a rychlejších pamětí

Navíc má ale Turing vylepšenou kompresi pamětí, která dovoluje využitelnou propustnost ještě o něco zvýšit. Kombinace vyšších taktů a lepší komprese podle Nvidia dává GPU Turing až o 50 % lepší využitelnou propustnost proti GPU Pascal.

Článek pokračuje na další straně.

NVLink a další nové technologie

Nové SLI s NVLinkem

Nejen paměťová propustnost stoupla. Nvidia do GPU Turing integrovala konektivitu NVLink druhé generace ze serverových architektur. V čipech TU102 a TU104 bude sloužit pro rychlejší komunikaci GPU při zapojení do SLI. To by díky vyšší propustnosti NVLinku mělo lépe fungovat ve vyšších rozlišeních. Čip TU104 obsahuje jednu linku, takže při propojení je rychlost 25 GB/s obousměrně a stačit to má na obyčejné 8K, 4K surround při 144 Hz nebo na 5K při více jak 75 Hz. Čip TU102 má dvě linky NVLink dodávající celkem 50 GB/s opět duplexně. To má dovolovat použít ve SLI rozlišení až 8K v surround režimu.

Rozhraní NVLink poskytuje mnohem větší komunikační propustnost pro SLI Rozhraní NVLink poskytuje mnohem větší komunikační propustnost pro SLI

NVLink nahrazuje „high bandwidth“ SLI rozhraní z Pascalu, což ovšem také znamená, že budete opět muset pořizovat jiné můstky, pokud budete SLI chtít. Jeden stojí v USA 80 dolarů, jenže u nás je cena přímo u Nvidie 2200 Kč (pokud vám to přijde jako moc, radši nechtějte vědět, kolik stojí můstky pro karty Quadro s čipem GV100). Přičemž můstek není pružný, takže si musíte předem vybrat mezi rozestupem tří a čtyř slotů (a pak neměnit desku). Mimochodem – ačkoliv má GeForce RTX 2080 Ti díky čipu TU102 dvě rozhraní NVLink, SLI je podporováno jen se dvěma kartami.

SLI můstky pro rozhraní NVIink SLI můstky pro rozhraní NVIink

8K výstup a video

Turing má podporu rozlišení 8K (7680 × 4320 bodů) při 60 snímcích za vteřinu na rozhraní DisplayPort 1.2. To je dosaženo podporou komprese DSC, díky čemuž stačí jeden kabel. Výstup je podporován také přes rozhraní VirtualLink a USB-C.

V rozlišení 8K budou také GPU Turing umět enkódovat video, a to do formátu HEVC při 30 FPS. Kvalita výstupu má být o něco zvýšena, údajně je dosaženo 25% snížení bitrate pro HEVC a 15% snížení pro H.264 při stejné kvalitě. U dekódování je také podporováno rozlišení 8K a Turing umí formáty H.264, HEVC (včetně 10bitové a 12bitové hloubky a obrazu YUV 4:4.4) a VP9 (i s 10/12bitovou hloubkou).

Schopnosti akcelerace vida na architektuře Turing Schopnosti akcelerace vida na architektuře Turing

Mesh Shading

Turing má podporovat tzv. Mesh Shading. Ten zavádí nové modely shaderového programu pojmenované Mesh shader a Task Shader, které budou fungovat na vertexech, teselaci i výpočtech geometrie (jako u geometry shaderů). Má to dovolit zpracovat více objektů na scéně, protože se při stejném množství výsledné práce sníží počet draw calls a sníží se tím zátěž CPU. Jde tedy o cestu, jak na scénu dostat více geometrie a zvýšit tím kvalitu objektů.

Task shader a Mesh shader jsou flexibilnější modely shaderů pro zpracování geometrie Task shader a Mesh shader jsou flexibilnější modely shaderů pro zpracování geometrie

Variable Rate Shading

Další novinkou je Variable Rate Shading. Tato technika je trochu koncepčně podobná foveated renderingu. Jde o funkci, s kterou vývojář hry může ovládat kvalitu shader efektů, které se budou aplikovat v určité oblasti obrazu. Redukcí těchto výpočtů se ušetří výkon za cenu horší kvality obrazu.

Kvalitu lze nastavit pro jednotlivé bloky obrazu o rozměru 16 × 16 pixelů, přičemž lze volit mezi sedmi stupni kvality. Výchozí je počítání shaderů pro každý pixel, ale pro méně náročné oblasti lze shadery počítat s jakýmsi subsamplingem, kdy se rozlišení sníží a efekt je vypočítáván pro blok 2×2, 4×4, 1×2/2×1 či 4×2/2×4 pixelů.

Variable rate shading dokáže měnit kvalitu shaderů po jednotlivých blocích obrazu Variable rate shading dokáže měnit kvalitu shaderů po jednotlivých blocích obrazu

Variací na tento trik je Context Adaptive Shading, kdy hra sama určuje, jak moc se může v určitém bloku (stále 16 × 16) kvalita snížit podle jeho obsahu. Postprocesing bežící na konci zpracování snímku analyzuje charakter bloku a rozhoduje automaticky, zda a jak moc se v příštím snímku může zredukovat kvalita shaderů (pro aktuální snímek už je na redukci pozdě). Motion Adaptive Shading je podobná věc, kdy se kvalita redukuje podle toho, jestli v bloku došlo k pohybu. Oko totiž na pohybujících se objektech není schopné rozpoznat tolik detailů jako na stacionárních.

Multi-View Rendering

Turing také přináší technologii Multi-View Rendering. Ta umožňuje výstup více úhlů pohledu na vypočítávanou scénu v jednom průchodu. Jde o rozšíření techniky Single Pass Stereo (či také Simulatneous Multi Projection) u Pascalů na více jak dva pohledy.

Článek pokračuje na další straně.

Tensor Cores, RT Cores, Ray Tracing

Největším rozdílem proti Voltě a zejména Pascalu jsou ale v architektuře Turing nové specializované jednotky. To jsou jednak Tensor Cores, což jsou akcelerátory provádějící maticové operace používané neuronovými sítěmi při strojovém učení, a RT cores, která slouží pro ray tracing.

Tensor jádra

Tensor Cores provádějí operace FMA nad maticemi. Maximálně počítají s přesností FP16, tehdy operují s maticemi 4 ×4 hodnot. Osm tensor jader v jednom bloku SM dokáže za jeden cyklus provést v rámci těchto maticových operací 512 dílčích FMA s jednotlivými hodnotami (takže 1024 FLOPS, protože jde o násobení a součet v jednom).

Proti architektuře Volta ale byla přidána schopnost operovat s celočíselnými hodnotami INT8 a INT4, které jsou méně přesné. Ale díky poloviční a čtvrtinové datové šířce je s nimi výkon dvojnásobný, respektive čtyřnásobný.

Tensor jádra v architektuře Turing podstatně zvyšují výkon v operacích strojového učení. Nová je podpora výpočtů v hodnotách INT8 a INT4 Tensor jádra v architektuře Turing podstatně zvyšují výkon v operacích strojového učení. Nová je podpora výpočtů v hodnotách INT8 a INT4

Tensor cores lze ve hrách použít pro různé operace, v nichž jsou zapojeny neuronové sítě. Jde například o postprocessing a jiné typy filtrů. Nvidia jako významnou funkci Turingu představila upscaling DLSS, který běží právě na Tensor jádrech. Jeho cílem je zvýšit výkon GPU za cenu určité ztráty kvality. Obraz vykresluje na nižším než výstupním rozlišení, které se pak pomocí neuronové sítě vylepší na vyšší.

Ray Tracing

Letos Microsoft oznámil možnost vykreslovat v grafickém API DirectX místo tradiční rasterizace také metodou ray tracing. Ta dokáže být realističtější díky tomu, že emuluje osvětlení a stíny na základě jejich fyzikálního fungování. Nevýhoda je, že to stojí mnoho výkonu, takže pro grafiku počítačových her počítanou v reálném čase nebyla tato metoda používána.

GPU architektura Turing má jako první hardwarovou podporu pro některé operace prováděné při ray tracingu. Respektive jako první v rámci DirectX – GPU pro ray tracing existovala již před lety. Turing podporuje jak klasickou rasterizační grafiku, tak raytracing a také hybridní přístup používající obojí. Ten bude v dohledné době asi používaný častěji, než čistý ray tracing. Pokročilejší vykreslování se bude používat jen na části scény, které z něj nejvíce profitují – světla, stíny a odlesky.

Fáze vykreslování v ray tracingu a rasterizační grafice Fáze vykreslování v ray tracingu a rasterizační grafice

Ray tracing funguje tak, že z oka kamery (či pomysleného pozorovatele) jsou zpětným směrem sledovány paprsky dopadajícího světla přes všechny povrchy a objekty, od nichž se odrazily nebo kterými prošly, až po jejich zdroj – světlo, slunce, oheň atd. Analýza postupuje směrem nazpět, takže není třeba analyzovat všechny možné pomyslné paprsky světla, které scénou musí létat, ale jen ty, které svou pouť skončí na imaginární sítnici.

Ray tracing: schéma analýzy světelných paprsků určujících pixely Ray tracing: schéma analýzy světelných paprsků určujících pixely

I tak je trajektorií světla, které je třeba analyzovat, teoreticky skoro nekonečné množství a v praxi je výzva propočítat jich dost na to, aby byl výsledný obraz na sítnici dost dokonale vypadající. Pro každý pixel musí být obvykle vícero paprsků. Pokud jich není zanalyzován dostatečně „hustý svazek“, projeví se to tak, že obraz vypadá zašuměně. Podobně jako digitální fotografie exponovaná s nedostatečným množstvím světla.

RT jádra

RT jádra budou na výpočtech ray tracingu akcelerovat část operací – mělo by jít o analýzu toho, zda paprsek světla interaguje s určitým objektem. DirectX Ray Tracing používá při hledání metodu BVH (Bounding Volume Hierarchy). Při té jsou paprsky testovány proti kolizi s trojúhelníky tvořícími polygony scény.

Metoda BVH analyzuje průniky/interakce paprsků a objektů na scéně hierarchicky pomocí tzv. bounding boxů Metoda BVH analyzuje průniky/interakce paprsků a objektů na scéně hierarchicky pomocí tzv. bounding boxů, čímž šetří výpočty proti brute-force algoritmu

Toto testování probíhá postupně a hierarchicky, přičemž nejprve jsou analyzovány tzv. bounding boxy, které programátor předpřipraví okolo objektů scény, aby se jimi usnadnilo hledání průniků se samotným objektem. První boxy v hierarchii jsou velké, za nimi následují menší a menší. Na každé úrovni se zvolením jednoho boxu eliminuje velké množství možností, které by bylo třeba analyzovat, takže analýza paprsků potřebuje méně prostředků, než „brute-froce“ přístup.

Na úrovni GPU tyto operace probíhají tak, že se nejprve načítá hierarchie oněch bounding boxů příslušného objektu, pak je postupně analyzováno, s kterými došlo k průniku paprsku a nakonec je vyhodnocen přímo průnik/interakce s konkrétním trojúhleníkem polygonu.

Schéma výpočtu ray tracingu na shaderech bez specializovaných RT cores Schéma výpočtu ray tracingu na shaderech bez specializovaných RT cores…

A právě tyto analýzy provádí hardwarově RT cores, což údajně má podávat několikanásobné zrychlení proti výpočtům těchto kolizí na obecných jednotkách stream procesorech (shaderech). Nakonec dochází ke shadingu pixelů pomocí normálních výpočetních jednotek, které jsou zapojené i do inicializace těchto výpočtů. Ray tracing není tedy oddělený od ostatních výpočetních prostředků GPU, ale výpočty běžící na RT jádrech mohou běžet současně s jinými operacemi v shaderech.

A výpočet na shaderech a RT cores s architekturou Turing …a výpočet na shaderech a RT cores s architekturou Turing

Článek pokračuje na další straně.

Tři čipy: TU102, TU104 a TU106

Nvidia zatím publikovala tři čipy Turing s různou velikostí, cenou a výkonem. První dvě už známe, TU106 je nově potvrzená třetí varianta.

TU102 je nejvýkonnější a má plochu 754 mm² a 18,6 miliardy tranzistorů. Obsahuje 4608 shaderů, 96 ROP, 288 texturovacích jednotek, 6MB L2 cache a 384bitovou sběrnici pamětí GDDR6. Čip má 576 tensor cores a 72 RT cores pro ray tracing, skládá se celkově z šesti GPC, což je jednotka složená z bloků SM. V kartě GeForce ovšem čip TU102 bude ořezaný na 4352 shaderů a na 352bitovou paměťovou sběrnici. Plnotučnou verzi dostanou jen grafiky Quadro RTX 8000 a RTX 6000.

Schéma čipu TU102 Schéma čipu TU102

Také TU104 se skládá z šesti GPC, ale v každém je o třetinu méně shaderů, celkem tedy 3072. Tensor jader je 384, RT jader 48, ROP 64 a texturovacích jednotek 192, sběrnice je 256bitová a L2 cache 4MB. Až na použití šesti GPC místo čtyř jde tedy skoro přesně o dvě třetiny čipu TU102. Plocha je s 13,6 miliardami tranzistorů 545 mm². V kartě GeForce RX 2080 bude čip TU104 ořezaný na 2944 stream procesorů. Plnou konfiguraci budou mít karty Quadro RTX 5000.

Schéma čipu TU104 Schéma čipu TU104

GeForce RTX 2070 bude tvořena třetím GPU označeným TU106. To by implikovalo mainstream (GTX 960/1060), ale jde stále o hodně velký čip – s 10,6 miliardami tranzistorů zabírá 446 mm². Stále tak jde spíš o highendové GPU, čemuž ale ostatně odpovídá i cena karty GeForce RTX 2070. V modelu RTX 2070 bude toto GPU neosekané a v plné síle, na rozdíl od TU102/104 v kartách RTX 2080/2080 Ti.

Schéma čipu TU106 Schéma čipu TU106

TU106 obsahuje jen tři GPC a 2304 shaderů, 144 texturovacíh jednotek, 288 tensor cores a 36 RT cores. To z něj dělá do značné míry polovinu čipu TU102. Ovšem paměťový subsystém je stejný jako u GPU TU104 – 256bitová sběrnice, 64 ROP, 4MB L2 cache. Výkon mezi GeForce RTX 2070 a RTX 2080 proto asi nebude škálovat právě lineárně. Levnější model bude mít stejný či podobný výkon pamětí, ale výrazně méně hrubé síly.

Všechna tři tato GPU jsou jinak vyráběna na procesu 12FFN, což by měla být stejná pro Nvidii optimalizovaná varianta 12nm procesu TSMC, jaká byla použita pro čipy Volta. Zda se k nim ještě přidají další (například pro nižší modely jako GeForce RTX 2060), to zatím firma neprozradila. Pro připomenutí: GeForce RTX 2080 a 2080 Ti se začnou prodávat 20. září, GeForce RTX 2070 někdy v říjnu. Zvěsti o případných dalších a levnějších Turinzích by se asi mohly začít objevovat poté.