Architektura, technologie
Kapitoly článků
GeForce GTX 280 (psát budeme v rámci lepší čitelnosti o tomto modelu, ale vztahuje se to samozřejmě i na 260) nabízí kromě všeho, co umějí předchozí modely, následující:
- podpora DisplayPort
- 10bitové interní zpracování barev a 10bitový výstup (více než 1 miliarda barev)
- podpora GPGPU aplikací v rámci CUDA
- podpora fyziky v rámci PhysX
GeForce GTX 200 GPU implementují druhou generaci shaderů a výpočetní architektury GPU. V průměru tak nVidia slibuje 50% nárůst výkonu oproti GeForce 8/9. Architektura od dob G80 v GeForce 8800 GTX spoléhala na tzv. „Scalable Processor Array“ (SPA), nyní přichází na scénu silně vylepšená verze.
Každé SPA (volně přeloženo „škálovatelné procesorové pole“ ve smyslu stream procesorů) se skládá z několika TPC alias Thread Processing Cluster, tedy elementárních výpočetních bloků sdružujících shader jednotky v blocích po několika. Každý TPC se tedy skládá opět z menších částí zvaných streaming multiprocessor (SM), kde každý SM je opět tvořen něčím menším, zde konkrétně osmi výpočetními jádry značenými SP (zkratka streaming processor, též bývají označovány za thread processor). Každý SM dále zahrnuje texture filtering procesory.
Více výpočetních jader
Nová generace GPU si polepšila jak v počtu TPC, tak v počtu SM připadajících na jedno TPC, počet SP v SM zůstává zachován, celkově jich je ale více (jak je v úvodní tabulce, G80 mělo 128 SP, GT200 má v případě GTX 280 rovných 240 SP).
Abychom nemlátili prázdnou slámu, ukažme si tuto změť zkratek na schématu.
GeForce 280 GTX má toto uspořádání: výpočetní jednotky GPU jsou rozděleny po deseti TPC, z nichž každý nese tři SM a každý z těchto SM oněch 8 výpočetních jader. Ve spodní části schématu jsou ROP (raster operations processors) a pamětová sběrnice.
Výsledkem této architektury jsou mnohá zlepšení oproti GeForce 8800 GTX.
Takto pak vypadá využití architektury GPU nikoli při renderingu grafiky, ale při GPGPU výpočtech:
Jednou z hlavních částí je hardwarový thread scheduler, neboli plánovač výpočetních vláken. Ten se stará o rozdělování výpočtů mezi jednotlivé TPC bloky.
Texturová cache je zde využívána pro správu přístupů k paměti aby se tak dosahovalo efektivnějšího nakládání s ní a tím zvýšení reálné propustnosti paměťového subsystému.
Prvky označené jako „Atomic“ nepřítomné v renderingu 3D grafiky referují schopnost GPU operací čtení, přepsání a zápisu v paměti. Atomic zajišťují přístup k částem paměti a usnadňují správu datové struktury paměti.
Podívejme se na to, jak uvnitř vypadá každý jednotlivý TPC blok ve výpočetním režimu.
Povšimněte si, že každá osmice výpočetních jader (shaderů) má k dispozici vlastní lokální paměť. Díky ní mohou sdílet data.
SIMT architektura
Unifikovaná architektura GPU je schopna pracovat ve dvou výpočetních modelech. Spouštění výpočtů skrze všechny TPC se využívá MIMD (multiple instruction, multiple data) architektura, pro výpočty na jednotlivých dílčích SM pak logicky SIMT (single instruction, multiple thread). Na SM pak probíhají čistě skalární výpočty plnou rychlostí bez ohledu na velikost vektorů. SIMT také dává možnost každému výpočetnímu vláknu využít „vlastní cestu“ skrze výpočetní jednotky. Branching je spravován hardwarově, takže se o to programátoři nemusí starat ručně.
Tisíce výpočetních vláken
Architektura GTX 200 poskytuje možnost zpracovávat současně více než 30 tisíc výpočetních vláken. Hardwarový thread scheduler zajišťuje, že jsou stream procesory vytíženy vždy optimálně, což v případě GPGPU výpočtů znamená „téměř 100 %“ (nějaká režie je vždy).
Architektura GPU je dle nVidia poměrně tolerantní k okamžikům, kdy se některý dílčí thread zastaví z důvodu čekání na přístup do paměti. GPU umí v takové situaci s nulovou režií přepnout na jiný thread, který je volný. SIMT multithreaded instruction jednotka v SM vytváří, spravuje a spouští výpočetní vlákna (thready) ve skupinách po 32 paralelních vláknech zvaných „warp“ (neplést s nadsvětelným pohonem Dr. Zeframa Cochrane :-). Na GTX 200 je podporováno až 32 warpů/SM zatímco na GeForce 8/9 to bylo jen 24 warpů/SM.
Pokud tedy GPU zvládá 32 warpů a současně má 32 výpočetních jader v SM, každý SM jak logicky zvládá až 1 024 výpočetních vláken současně. Při počtu tří SM v každém z deseti TPC v GeForce GTX 280 to dává výsledných 30 720 výpočetních vláken.
Větší registr souborů
Lokální souborový registr je v GTX 200 kartách dvojnásobný oproti GeForce 8/9. Zatímco starší generace GPU se mohly dostat do situací, kde s příliš dlouhými shadery došlo k vyčerpání kapacity registrů a nutnosti založit swap (což vedlo k výraznému zpomalení výpočtů), GeForce GTX 200 díky většímu registru toto riziko značně eliminuje, dokáže bez swapování počítat výrazně delší shadery. Přitom tyto nové větší registry zabírají jen malý zlomek z plochy GPU.
Celé se to pak hodí pro hry nadcházejících měsíců, které budou vykonávat daleko náročnější shaderové výpočty vyžadující větší registry. Graf prezentuje srovnání výkonu v Extremem nastavení 3D Marku Vantage.
Lepší Dual Issue
Special function units (SFUs) v SM mají na starosti transcendentní matematiku, interpolaci atributů (interpretuje pixelové atributy z primitivových vertexových atributů) a floating-point MUL intrukce (multiply - násobení).
Stream processing jádra v GTX 200 mohou nyní vykonávat tzv. full-speed dual-issue MAD (multiply-add) operace a MUL (při výkonu 3 FLOPs na každý SP) za použití MAD jednotky zvládající MUl a ADD v ejdnom taktu a současně za pomoci SFU jednotky zvládající další MUL ve stejném hodinovém taktu.
Optimalizované testy ukazují, že s touto kombinovanou metodou dosahují GeForce GTX 200 93 a 94% efektivity. GPU tak na vyšší kartě s danými frekvencemi dosahuje single-precision IEEE 754 výkonu téměř 1 TFLOPs.
Podpora Double Precision
Jak je ale všeobecně známo, single-precision radikálně omezuje množství realizovatelných výpočtů na GPU. Jako první přišla s double-precision na výpočetních společnost AMD u GPGPU karty FireStream 9170, nVidia to samozřejmě s GTX 200 nově také umí. GPU podporuje double-precision, 64-bit floating point výpočty, díky čemuž si konečně může dovolit větší škálu výpočtů od vědeckých, inženýrských, finančních a dalších.
Každý SM zahrnuje 64bitovou matematickou jednotku v plovoucí čárce, celkově tak karta nabízí 30 double-precision 64bit výpočetních jader, které splňují IEEE 754R floating-point specifikace. Celkový výpočetní výkon v této přenosti je zhruba 90 GFLOPs (ano, už se nemusíte v diskusi dohadovat o tom, že 1 TFLOPs se s těmi ~50 GFLOPs u Core 2 nedá porovnávat, neb jde o zcela jiná čísla).
Vyšší texturovací výkon
Nová generace zvyšuje výkon v texturovacích operacích. GeForce 8800 GTX a jejích osm TPC umožňovalo 64 pixelu za takt při filtraci textur, 32 pixelů za takt při adresaci, 32 pixelů/takt 2× při bilineární filtraci (8bit integer), nebo 32 bilineráně filtrovaných pixelů/takt (8bit integer nebo 16bit float).
Následné karty s GPU G92 na tom byly v rozložení podobně, třeba GeForce 9800 GTX uměla adresaci/filtraci 64 pixelů/takt, stejný počet bilineárně filtrovaných pixelů/takt při 8bit integer a poloviční počet při 16bit float.
GeForce GTX 200 na to jde s vyvážeností podobně (ale ne shodně), ale samozřejmě poskytuje vyšší celkový výkon. Každý z deseti TPC zahrnuje dual-quad texturovací jednotku schopnou adresace a bilineární filtrace 8 pixelů/takt, nebo 4 2:1 anisotropně filtrovaných pixelů/takt, nebo 4 FP16 bilineárně filtrovaných pixelů/takt. Celkový výkon adresace a filtrace je 80 pixelů/takt.
GPU ale obsahuje efektivnější plánovač, který umožňuje dosahovat teoretického špičkového výkonu při filtraci textur. V reálu tak je efektivita těchto operací na novém GPU o 22 % vyšší než u karet řady GeForce 9 (G92).