Revoluční GeForce 8800: specifikace a popis
8.11.2006, Michal Talanda, článek
Dnes, 8. listopadu, uvádí oficiálně nVidia po 4 letech vývoje novou generaci grafických karet GeForce 8. Jak vypadá zbrusu nová architektura, jaké má požadavky na systém a co všechno přinese? Předem můžeme říci, že se jedná o revoluci na poli grafických karet.
Kapitoly článku:
Až doposud zpracovávaly prakticky všechny GPU použité v PC data víceméně stejným způsobem – sekvenčně. I přestože programovatelné shadery daly programátorům velkou volnost, stále zde máme specializované jednotky a pevně dané pořadí, v jakém data pipeline procházejí. To se dnes mění.
Principielní rozdíl mezi dedikovanými a unifikovanými shadery hezky ilustruje následující obrázek. Unifikovaný shader nemá přesně určeno místo v rámci renderovací pipeline a může být nasazen kdekoli je potřeba.
Dedikované vs Unifikované shadery
DirectX 10 přináší Shader Model 4.0 a s ním unifikované instrukce pro shadery. Nepředepisuje sice přímo, že shader jednotky musejí být unifikované, nicméně u G80 tomu tak skutečně je. Fakt, že místo několika specializovaných typů jednotek máte jeden univerzální, má své výhody i nevýhody.
Z hlediska vývoje čipu je jednodušší mít jeden typ shaderů (byť značně sofistikovaný), návrh se snáze ladí a hlavně se dá lépe škálovat výkon. Určitě si vybavíte, že ATI do některých svých modelů (X1300 XT, X16xx) dávala výrazně více pixel shaderů, aby tak podpořila výkon v nejnovějších hrách. Někde to pomohlo, jinde moc ne – tam patrně pixel shadery nebyly limitující. Protože DirectX 10 specifikuje 3. typ shaderů (geometry shadery), bylo by prakticky nemožné vybalancovat poměr vertex : geometry : pixel shaderů a proto unifikace.
Unifikovaný shader “zaskočí” tam, kde je zrovna nejvíce práce, takže prakticky stále jede celé GPU na plný výkon. ATI měla na demonstraci tohoto fenoménu notoricky známý obrázek se žralokem, nVidia to ilustruje pomocí těchto obrázků hypotetického GPU s 12ti shadery:
Dedikované shadery (4 vertex + 8 pixel) – část GPU může být nevyužita
12 unifikovaných shaderů v plné akci
Podmínkou skutečného dosažení maximálního výkonu je dostatečná rezerva výkonu ROP a velmi rychlý přístup k pamětem.
Nevýhodou unifikovaných shaderů je výrazně větší počet tranzistorů na shader (proto těch 681 milionů). Uvážíme-li, že ve 3D teoreticky jedou všechny shadery naplno, je jasné, odkud se bere ta nenasytnost karty. Bude zajímavé pozorovat, nakolik se podaří stlačit spotřebu u mobilních čipů.
Obrázek vydá za tisíc slov a proto jím začneme:
Blokové schéma nVidie GeForce 8800 GTX
Data se do karty dostávají přes PCIe sběrnici (na obrázku Host). Input assembler se stará o příjem geometrických dat, konvertuje je do FP32 a provádí též indexovaní. Indexování se hodí při provádění opakovaných operací, například při instancingu (generování mnoha objektů z jedněch vstupních dat – např. listy na stromech).
Zelené jednotky jsou označovány jako scalar stream procesors (procesory pro skalární proudové zpracování dat) – na obrázku SP. Právě ony jsou srdce karty, které se stará o všechny shaderové operace. Z obrázku je vidět, že tyto stavební kameny jsou sdruženy do bloků po 16ti, přičemž každý blok sdílí jednotky pro adresování textur a filtrování textur a blok L1 cache. Frekvence těchto procesorů je 1,35GHz (GTX) respektive 1,2GHz (GTS). Podporují paralelní provádění MAD a MUL operací (nejčastější operace ve shaderech) v přesnosti dle standardu IEEE 754 (ať už to znamená cokoli :-).
Dle nVidie má tak GeForce 8800 GTX hrubý shaderovací výkon zhruba 520 gigaflops. Pro srovnání jsem hledal na internetu, kolik má Core2 Extreme X6800, údajně by to mělo být asi 47 gigaflops. Toto házení gigaflopsy berme s rezervou, konkrétní čísla nejsou až tak zajímavá jako fakt, že dnešní GPU ve specializovaných operacích mohou poskytnout o řád lepší výkon než CPU.
Tyto procesory jsou zajímavé také tím, že jsou přísně skalární. Shaderové programy mohou obsahovat mix skalárních a vektorových instrukcí, dle nVidie je výhodnější mít rychlé skalární jednotky. Vektorové operace jsou pak realizovány ve více krocích.
Oddělením jednotek pro adresování a filtrování textur je velmi chytrý krok. Jednak se tím poněkud redukuje počet tranzistorů - 16 procesorů má 4 jednotky pro adresování a 8 pro filtrování textur. Hlavně však filtrování textur nezatěžuje shaderové jednotky. Dle nVidie tak např. zapnutí bilineárního anisotropního filtrování nemá prakticky dopad na výkon. Nárůst výkonu ve filtrování textur oproti 7900 GTX ilustruje následující obrázek.
Srovnání výkonů ve filtrování textur - GeForce 8800 GTX vs. GeForce 7900 GTX
Díky oddělení výpočtů a texturovacích operací se tak redukují latence při shaderových výpočtech. To by mělo přispět k omezení latencí u komplikovanější výpočů ve shaderech.
GeForce 7 matematické a texturové operace prokládá, nová řada je má oddělené
Výstup ze SP může být přesměrován na vstup dalšího SP, nebo může být poslán do ROP. Průchod dat shadery tak může být dle současného schématu vertex – pixel shaderů ale také mnohem komplikovanější, se zapojením geometry shaderů a několikanásobných návratů dat na začátek pipeline.
GeForce 8800 GTX má 6 ROP, každá může zpracovávat najednou 4 pixely (16 subpixelů). Pokud se zpracovávají zároveň barvy a Z souřadnice, zvládá tedy ROP 24 pixelů za takt. Jestliže se ovšem pracuje pouze se Z souřadnicemi, tak při 4x multisamplingu je výstup 48 pixelů / takt.
Každá ROP má 64bitový interface k pamětem, odtud tedy vyplývá poněkud exotická šířka paměťové sběrnice 384 bitů. GTS má ROP pouze 5 a tedy o 1/6 nižší výkon tohoto subsystému a „jen“ 320-ti bitovou sběrnici.
Unifikované shadery
Principielní rozdíl mezi dedikovanými a unifikovanými shadery hezky ilustruje následující obrázek. Unifikovaný shader nemá přesně určeno místo v rámci renderovací pipeline a může být nasazen kdekoli je potřeba.
Dedikované vs Unifikované shadery
DirectX 10 přináší Shader Model 4.0 a s ním unifikované instrukce pro shadery. Nepředepisuje sice přímo, že shader jednotky musejí být unifikované, nicméně u G80 tomu tak skutečně je. Fakt, že místo několika specializovaných typů jednotek máte jeden univerzální, má své výhody i nevýhody.
Z hlediska vývoje čipu je jednodušší mít jeden typ shaderů (byť značně sofistikovaný), návrh se snáze ladí a hlavně se dá lépe škálovat výkon. Určitě si vybavíte, že ATI do některých svých modelů (X1300 XT, X16xx) dávala výrazně více pixel shaderů, aby tak podpořila výkon v nejnovějších hrách. Někde to pomohlo, jinde moc ne – tam patrně pixel shadery nebyly limitující. Protože DirectX 10 specifikuje 3. typ shaderů (geometry shadery), bylo by prakticky nemožné vybalancovat poměr vertex : geometry : pixel shaderů a proto unifikace.
Unifikovaný shader “zaskočí” tam, kde je zrovna nejvíce práce, takže prakticky stále jede celé GPU na plný výkon. ATI měla na demonstraci tohoto fenoménu notoricky známý obrázek se žralokem, nVidia to ilustruje pomocí těchto obrázků hypotetického GPU s 12ti shadery:
Dedikované shadery (4 vertex + 8 pixel) – část GPU může být nevyužita
12 unifikovaných shaderů v plné akci
Podmínkou skutečného dosažení maximálního výkonu je dostatečná rezerva výkonu ROP a velmi rychlý přístup k pamětem.
Nevýhodou unifikovaných shaderů je výrazně větší počet tranzistorů na shader (proto těch 681 milionů). Uvážíme-li, že ve 3D teoreticky jedou všechny shadery naplno, je jasné, odkud se bere ta nenasytnost karty. Bude zajímavé pozorovat, nakolik se podaří stlačit spotřebu u mobilních čipů.
Struktura GPU
Obrázek vydá za tisíc slov a proto jím začneme:
Blokové schéma nVidie GeForce 8800 GTX
Data se do karty dostávají přes PCIe sběrnici (na obrázku Host). Input assembler se stará o příjem geometrických dat, konvertuje je do FP32 a provádí též indexovaní. Indexování se hodí při provádění opakovaných operací, například při instancingu (generování mnoha objektů z jedněch vstupních dat – např. listy na stromech).
Zelené jednotky jsou označovány jako scalar stream procesors (procesory pro skalární proudové zpracování dat) – na obrázku SP. Právě ony jsou srdce karty, které se stará o všechny shaderové operace. Z obrázku je vidět, že tyto stavební kameny jsou sdruženy do bloků po 16ti, přičemž každý blok sdílí jednotky pro adresování textur a filtrování textur a blok L1 cache. Frekvence těchto procesorů je 1,35GHz (GTX) respektive 1,2GHz (GTS). Podporují paralelní provádění MAD a MUL operací (nejčastější operace ve shaderech) v přesnosti dle standardu IEEE 754 (ať už to znamená cokoli :-).
Dle nVidie má tak GeForce 8800 GTX hrubý shaderovací výkon zhruba 520 gigaflops. Pro srovnání jsem hledal na internetu, kolik má Core2 Extreme X6800, údajně by to mělo být asi 47 gigaflops. Toto házení gigaflopsy berme s rezervou, konkrétní čísla nejsou až tak zajímavá jako fakt, že dnešní GPU ve specializovaných operacích mohou poskytnout o řád lepší výkon než CPU.
Tyto procesory jsou zajímavé také tím, že jsou přísně skalární. Shaderové programy mohou obsahovat mix skalárních a vektorových instrukcí, dle nVidie je výhodnější mít rychlé skalární jednotky. Vektorové operace jsou pak realizovány ve více krocích.
Oddělením jednotek pro adresování a filtrování textur je velmi chytrý krok. Jednak se tím poněkud redukuje počet tranzistorů - 16 procesorů má 4 jednotky pro adresování a 8 pro filtrování textur. Hlavně však filtrování textur nezatěžuje shaderové jednotky. Dle nVidie tak např. zapnutí bilineárního anisotropního filtrování nemá prakticky dopad na výkon. Nárůst výkonu ve filtrování textur oproti 7900 GTX ilustruje následující obrázek.
Srovnání výkonů ve filtrování textur - GeForce 8800 GTX vs. GeForce 7900 GTX
Díky oddělení výpočtů a texturovacích operací se tak redukují latence při shaderových výpočtech. To by mělo přispět k omezení latencí u komplikovanější výpočů ve shaderech.
GeForce 7 matematické a texturové operace prokládá, nová řada je má oddělené
Výstup ze SP může být přesměrován na vstup dalšího SP, nebo může být poslán do ROP. Průchod dat shadery tak může být dle současného schématu vertex – pixel shaderů ale také mnohem komplikovanější, se zapojením geometry shaderů a několikanásobných návratů dat na začátek pipeline.
GeForce 8800 GTX má 6 ROP, každá může zpracovávat najednou 4 pixely (16 subpixelů). Pokud se zpracovávají zároveň barvy a Z souřadnice, zvládá tedy ROP 24 pixelů za takt. Jestliže se ovšem pracuje pouze se Z souřadnicemi, tak při 4x multisamplingu je výstup 48 pixelů / takt.
Každá ROP má 64bitový interface k pamětem, odtud tedy vyplývá poněkud exotická šířka paměťové sběrnice 384 bitů. GTS má ROP pouze 5 a tedy o 1/6 nižší výkon tohoto subsystému a „jen“ 320-ti bitovou sběrnici.