Nvidia Fermi - Analýza nové generace GPU | Kapitola 2
Seznam kapitol
Nové Radeony už mají své uvedení za námi, na Nvidii jsme si museli chvíli počkat. Rok jsme hovořili o GT300, jež vzalo za své a místo toho se objevilo kódové označení Fermi. I když vám dnes ještě kartu fyzicky neukážeme, dozvíte se o jádru téměř vše. Prohlédneme si změny vůči architektuře G200 a zaspekulujeme o parametrech karty.
Jak už jsem naznačil v úvodu, není Fermi (GF100) přímým pokračovatelem G80-G200, ani žádné architektury před nimi. Jde o zcela novou filozofii přístupu ke GPU, kdy už prioritou není masivní herní výkon ale výkon výpočetní, kterého je možné využít místo CPU (ano NVIDIA stále bojuje proti Intelu a jeho CPU). Tato změna filozofie byla zřejmá a NVIDIA ji chtěla hodně prosazovat už při uvedení G200, ovšem dodnes se to mnoho nepodařilo.
Domácímu uživateli je totiž jedno, kolik jeho karta umí počítat GFLOPS v Double precision, jeho zajímají fps ve hrách. A tentokrát tomu bude také tak ... ať chce NVIDIA nebo nechce. Na nějakém fundovaném pracovišti Stanfordské univerzity, v buňce tvůrců Folding@Home může tato architektura zaznamenat bouřlivé ovace, stejně jako majitelů GPU výpočetních farem. U běžného hráče spíše nikoliv ... vše ukáže až čas, osobně jsem ale v tomto směru skeptik.
Pokud jste ale zákazník karet Tesla, můžete být skutečně novou generací nadšeni. Téměř všechny nevýhody stávající architektury, jako byl malý výkon v Double precision, žádná cache, nemožnost programovat paměť a hlavně "nízká" propustnost pamětí byla odstraněna právě u Fermi (GF100). Nahlédněme tedy nejprve zběžně do historie, jak se vyvíjel GPU Computing (Výpočty pomocí GPU) do dnešních dní ..
Zlom přišel s DirectX
Grafický čip pod zkratkou GPU uvedla na trh v roce 1999 právě NVIDIA. Už tenkrát se jednalo o procesor schopný vykonávat několik operací naráz - byl paralelní. Tehdejší hry vyžadovaly pro "jakousi" realistickou grafiku vysoký výpočetní výkon čipu, a tak se z čistě grafického GPU stával pomalu a jistě univerzální výpočetní stroj s vysokým výkonem v operacích s plovoucí desetinou čárkou. Dnešní GPU dalece v některých výpočetních operacích překonají běžná CPU, mnohdy i stonásobně. Čímž se stávají ideálním nástrojem pro paralelní výpočty.
Výraznější snaha využít výkon GPU i k jiným činnostem než hraní her, byla zaznamenána v roce 2003 s příchodem DirectX 9. V té době se pomalu opouštěl model renderování obrazu pevně danou pipeline a byly první náznaky programovatelných Pixel a Vertex Shaderů u grafických karet. Pro připomenutí té doby, trhu výkonem vládly ATi Radeony s jádrem R300 (Radeon 9500, 9700). Právě tehdy vzniklo GPGPU, využití výpočetní síly GPU k jiným operacím než grafickým.
Problém byl ovšem v použitelnosti, kdy vývojáři aplikací museli detailně znát architekturu GPU a napsat software přímo konkrétnímu čipu "na tělo". Ve vývoji a masivnímu vzniku GPGPU aplikací bránilo i mnoho technických omezení tehdejších GPU, a tak bylo nutné najít schůdnější cestu.
Prvním významným krokem bylo jádro G80 s unifikovanými Shadery, takže odpadla nutnost odlišného programování Vertex a Pixel Shaderů. Ani tady by nebylo napsat aplikaci zpočátku jednoduché, až do standardizace CUDA, jež byla uvedena v druhé polovině roku 2006 - v čase uvedení jádra G80. Už tehdy NVIDIA spustila na svém webu stránku pro vývojáře CUDA, tedy jde o dnes již tři roky starou záležitost, která potvrzuje zájem NVIDIA o toto odvětví opravdu už od uvedení G80.
Jádro G80
První grafické karty s jádrem G80 se objevily pod názvem GeForce 8800 v listopadu roku 2006. Tyto hlavní přednosti jádro G80 mělo:
- G80 bylo první GPU podporující k programování jazyk C (rozšíření CUDA), programátor se nepotřeboval učit nový speciální jazyk
- G80 byl první unifikovaný čip, kdy Vertex a Pixel shadery byly nahrazeny univerzální výpočetní jednotkou schopnou zastat jakoukoliv funkci předchozích shaderů
- G80 jako první nesl skalární thread procesor, programátor nepotřeboval ručně rozdělovat úlohy registrům
- G80 umožnila jako první vykonat jednu instrukci ve více threadech čímž se její vykonání urychlilo (SIMT)
- G80 přinesla sdílenou paměť a lepší synchronizaci mezi vláknové komunikace
Jádro G200
Druhou, vylepšenou inkarnací G80 bylo v červnu 2008 uvedené jádro GT200. Jak jistě všichni vědí, jde o druhou generaci (CUDA 2 a Tesla 2) architektury určené k výpočtům. Hlavními změnami bylo navýšení SP procesorů, dvojnásobná šířka registrů umožňující vykonání více instrukcí zároveň, zlepšena byla propustnost a efektivita paměťového subsystému a mnoho dalšího. Jádro se konečně dočkalo i Double precision, ovšem výkon nebyl nijak vysoký (+/- 78 GFLOPS). Na skutečné využití v HPC to stále nestačilo.
I když se jednalo u GT200 o viditelný pokrok, jehož plody dokonce využijí i běžní zákazníci (CUDA aplikace, enkódování videa, PhysX), jistá hardwarová omezení bránila skutečnému průniku do výpočetních superpočítačů, které mají vyšší nároky na svou výpočetní sílu. S GT200 byla NVIDIA napůl cesty, mezi herní grafikou a GPU výpočetním strojem, a právě tento kompromis dělal z GT200 spíše volbu do herního PC než do sálů superpočítačů. To se právě změnilo ...
Jádro Fermi
Už několikrát jsem řekl, a opět zopakuji, Fermi není pokračovatelem G80-G200, ale zcela nová architektura vyvíjena souběžně. Výrobce se z chyb a dobrých vlastností G80 a G200 poučil, a ze svých poznatků navrhl zcela unikátní a nový model. Podle nepotvrzených zvěstí, měla být G300 opravdu jen vylepšenou G80/G200. V pokročilé fázi vývoje byl ale prý celý návrh shrnut ze stolu a inženýři začali znova "na čistém stole" s Fermi. Proto je zde možná ono zdržení, a AMD má své levnější DX11 herní jádro na trhu dříve. Tyto nedostatky architektury G200 musely být v nové generaci vylepšeny:
- Single precision výkon byl vysoký, v Double precision byl výkon slabý a nedostatečný pro vědecké účely
- Pro náročné využití je nutné implementovat ECC paměti, což předešlá generace G200 neumožňovala
- Sdílená paměť pro některé operace nevyhovovala, a byla zapotřebí vlastní větší cache, kterou G200 neumožňovala přiřadit, tento problém byl velkou brzdou rozšíření a dokonce jej komentoval i Intel, jako hlavní brzdu rozšíření dnešních NVIDIA GPU do superpočítačů
- Programátoři vyžadovali více než 16KB cache pro běh svých programů
- Uživatelé požadovali větší výkon v operacích, kdy se zároveň počítá i zobrazuje obraz, čehož nejlepší příklad je PhysX. Karta renderuje scénu i počítá efekty, což je mnohdy na úkor fps.
- Uživatelé požadovali vyšší výkon základních paměťových operací
Všechny tyto požadavky se výrobce pokusil splnit a Fermi, jež přináší tato základní vylepšení:
- 32 CUDA procesorů (dříve Stream procesory) v jednom SM bloku - čtyřikrát víc než u G200
- 8x vyšší Double precision špičkový výkon proti G200 (+/- 750 GFLOPS)
- Dva Warp Shedulery v SM bloku jež umožní zpracovat 2x 32 threadů za takt, G200 umí jen polovinu
- Každý SM blok má k dispozici vlastních 64KB paměti + možnost přidělit ještě část s L1 cache a sdílené paměti
- Podpora rozšířené instrukční sady PTX 2 - Paralel Thread Execution ISA.
- Navrženo pro OpenCL a DirectCompute standardy, plná podpora IEEE 754-2008 v 32-bit i 64-bit precision
- Vylepšený paměťový systém. Programovatelná L1 cache. První GPU s podporou ECC pamětí. Razantně navýšena propustnost a rychlost paměťových operací.
- Nový GigaThread engine, je pokračovatelem první verze v G80. Stejnou logiku najdeme i u konkurenčních Radeonů, jednoduše řečeno tato část GPU rozděluje úkol jednotlivým částem a stará se o maximální vytížení celého jádra. Nová verze umí úkoly rozdělit 10x rychleji, umí pracovat i v Out Of Order režimu. Každou z vyjmenovaných novinek si prohlédneme na obrázku a vysvětlíme dále v článku.