GeForce 8800GTX a GTS v testu
autor: Petr Štefek a Jiří Souček , publikováno 8.11.2006
GeForce 8800GTX a GTS v testu

Tak zde máme konečně recenzi dvou zbrusu nových grafických karet z dílen nVidie. Prvním pánem na holení je nejvýkonnější GeForce 8800GTX a druhým je ekonomičtější GeForce 8800GTS. Pojďme se tedy podívat jak si obě stojí a hlavně na novou architekturu čipu G80.


Abychom pochopili důvody, které vedly inženýry nVidie k navržení čipu G80 tak, jak je navržen, budeme se muset chtě-nechtě podívat na pixel pipeline NV40 a G70. Budu se snažit to probrat co nejstručněji a co nejsrozumitelněji, a protože se obojí vzájemně vylučuje, budu alespoň doufat, že se mi to podaří. Případně se na detaily zeptejte v diskusi pod článkem, nebo ještě lépe v diskusním fóru.

NV40

GeForce 8800GTX a GTS v testu

NV40 - první čip společnosti nVidia podporující shader model 3.0

Na obrázku vidíte celkem dobře znázorněnou pixel pipeline čipu NV40. Skládá se z jedné texturovací jednotky (vlevo nahoře), dvou pixel shader procesorů (= dvou ALUs, neboli aritmeticko-logických jednotek, na obrázku nazvaných "FP32 shader unit") a dvou mini-ALUs. Ostatní nás nemusí zajímat.

GeForce 8800GTX a GTS v testu

Nejpodstatnější úlohou ALUs je provádění matematických operací ADD (sčítání) a MUL (násobení). Často se setkáváme se zkratkou MADD (případně MAD) což značí schopnost ALU provádět obě operace (MUL+ADD) zároveň.

Mini-ALUs jsou jednotky, které v případě čipů NV40 a G70 slouží pro speciální operace (modifiers) používané především v shader modelu 1.x; operace ADD a MUL tedy nepodporují, takže nás nebudou příliš zajímat.

Dále tu máme texturovací jednotku, která je napojená na primární ALU. V případě architektury NV40/G70 slouží (stejně jako u NV30) primární ALU zároveň i jako texture-adress ALU - jednoduše řečeno, krom matematických výpočtů při pixel shadingu se z části podílí i na operacích s texturou. Nemůže ale provádět obojí najednou - buďto pracuje s texturou, nebo provádí pixel shading.

GeForce 8800GTX a GTS v testu

Protože v případě běžné počítačové grafiky pracujeme často s barvami ve formátu RGB-A (červená, zelená, modrá a průhlednost), jsou tomu ALUs uzpůsobené a jsou tedy schopny pracovat se čtyřmi složkami (viz obrázek). Pokud je ale třeba provést operaci např. jen s jednou složkou, znamenalo by to, že zbytek ALU zůstane nevytížený.

Pozn.: Čipy, jako např. R300 (Radeon 9700) to řešily tak, že ALU měly rozdělenou na "tří-složkou"  část a "jednosložkovou" část. Pokud bylo třeba, pracovaly obě části současně a chovaly se jako čtyřsložková ALU. Pokud ale bylo třeba pracovat jen s jednou složkou, fungovala jednosložková část nezávisle na trojsložkové, která mohla být využita pro jinou operaci. Jednosložkové části říkáme odborně "skalární", nebo také "1D", třísložkové (nebo libovolné vícesložkové) říkáme "vektorová", nebo také "3D" (případně "4D" atp.).

NV40 toto měla vyřešené ještě lépe - ALU se mohla podle potřeby libovolně "dělit" na dvě části - tedy krom 3D + 1D (3:1), jako u zmíněného Radeonu, mohla nabídnout i 2D + 2D (2:2) - obrázek výše. Tato vlastnost dala ALU NV40 velice slušnou efektivitu, protože mohla v některých situacích provádět více operací, než konkurenční R420 (ta to pro změnu kompenzovala tak, že její mini-ALU uměla provádět operaci ADD, takže byla použitelná i pro v PS2.0).

Jak jsem již zmínil, primární a sekundární ALU NV40 se lišily. Lišily se ale i operacích, které zvládaly provádět. Primární uměla operaci MUL (násobení) a sekundární jak MUL, tak ADD (tzn. dohromady MADD). Poměr operací MUL a ADD v pipelines NV40 byl tedy 2:1. Podívejme se na teoretický výkon:

  Teoretický výkon NV40 (@400MHz)
 PS (G)ADDs/s6,4
 PS (G)MULs/s12,8
 PS (G)MADDs/s6,4
 celkem (GFLOPS)19,2

Tato čísla si můžete sami snadno spočítat. Pokud např. víme, že pipeline NV40 zvládá dvě (2) operace MUL v taktu, stačí vynásobit tuto hodnotu počtem pipelines (*16) a frekvencí čipu (*400MHz) a máme výsledek (12800 milionů součinů za vteřinu). V tabulce jsem pro přehlednost převedly tyto hodnoty z milionů (mega) na miliardy (giga).

Výkon v GigaFLOPS vypočteme obdobně - potřebujeme jen vědět počet všech operací, které pipeline zvládá - což je ADD, MUL, MUL, tzn. celkem tři (3) opět vynásobíme frekvencí a počtem pipelines (400*16) a můžeme převést z MegaFLOPS na GigaFlops = 19,2.

Tato čísla odpovídají teoretickému výkonu v operacích s čtyř-složkovými hodnotami.

To nejhorší je za námi, popsal jsem jen ty nejpodstatnější parametry pixel pipeline, aby bylo z následujících odstavců jasné, jakým směrem se G80 ubírá.

G70

GeForce 8800GTX a GTS v testu

G70 - GeForce 7

Pipeline G70 se od pipeline NV40 liší v postatě jedním prvkem. nVidia při vydání G70 prohlásila, že provedli analýzu 1300 pixel shader programů v (tehdy) současných i budoucích hrách a zjistili, že operace MUL a ADD jsou vyžadovány ve stejném poměru, tedy 1:1 (NV40 nabízela poměr 2:1). A tak došlo na vylepšení primární ALU o operaci ADD. Obě ALU G70 tedy uměly MUL i ADD a z tohoto hlediska tedy byly rovnocenné. Tato symetrie byla podle tvrzení nVidie velice důležitá pro dosažení vyrovnaného výkonu a zvýšení efektivity pipeline.

Protože došlo k posílení schopností primární (sdílené) ALU, která byla také používána pro texturing, dostala se nVidia do nepříjemné situace, kdy vlastně tato ALU sama sobě konkurovala. Protože pokud prováděla operace s texturou, tak se vylepšení v podobě instrukce ADD pro pixel shading "nedostalo ke slovu" a rozdíl v efektivitě oproti pipeline NV40 nebyl o tolik vyšší, než by se čekalo. nVidia tedy byla nucena pro zajištění dostatečného výkonu v pixel shadingu snížit kvalitu filtrace textur, čímž zkrátila čas, po který byla ALU nucena pracovat s texturou a namísto toho se mohla věnovat pixel shaderům. To je důvod naprosté většiny "optimalizací" filtrace textur pro generaci GeForce 7 - tyto optimalizace nebyly prováděny pro úsporu fillrate, jak se mnozí domnívali (to by ani nedávalo smysl, když GeForce 7 má fillrate vyšší, než konkurence), ale pro úpravu rovnováhy mezi texturingem a pixel shadingem ve prospěch druhého.

  Teoretický výkon G70 (@430MHz)
 PS (G)ADDs/s20,6
 PS (G)MULs/s20,6
 PS (G)MADDs/s20,6
 celkem (GFLOPS)41,3

 

  Teoretický výkon G71 (@650MHz)
 PS (G)ADDs/s31,2
 PS (G)MULs/s31,2
 PS (G)MADDs/s31,2
 celkem (GFLOPS)62,4

R300 (R420)

Ve stručnosti se podíváme ještě na pipeline předchozí generace Radeonů - věřte nebo ne, bude se nám to hodit. Pipeline R300 (R9700) se skládá z jedné ALU, která umí MUL+ADD (tedy podobně schopné jako u G70), jedné mini-ALU, která krom operací pro PS1.x podporuje i operaci ADD a jedné texturovací jednotky, která je připojená k samostatné texture-adress ALU. To znamená, že operace s texturou nejsou závislé na matematických operacích, jako to bylo u NV30/NV40/G70, což zvyšuje výkon. ALUs jsou ale vnitřně uspořádány fixně jako 3D (vektorová) + 1D (skalární) a nemají tedy flexibilitu NV40...

GeForce 8800GTX a GTS v testu

pixel shader procesor  R420 (odmyslete si F-Buffer a máte R300)

Pipeline R300 nabízí poměr mezi MUL a ADD 1:2 - přesně opačně, než NV40.

GeForce 8800GTX a GTS v testu

pixel shader procesor R520 - téměř stejný jako u R420
... jen přibyla branch ex. unit a text. adress ALU se společně s texturovacími jednotkami osamostatníla

Celý tento odstavec platí i pro čip R420 (X800) a z většiny i pro R520 (X1800). Tam je rozdíl hlavně v oddělení texturovací jednotky, které vede k ještě větší volnosti a nezávislosti výpočtů matematických (pixel shadingu) a práce s texturou. Toto oddělení je klíčové mimo jiné pro zajištění minimálního propadu výkonu při anizotropní filtraci textur v plné kvalitě (bez tradičních úhlových optimalizací a s plným trilineárním základem). Parametry ALU ale zůstaly od dob R300 nezměněny, to znamená fixní 3D + 1D a poměr MUL a ADD 1:2. Čip R580 zvýšil počet pixel shaderů (díky oddělení texturovací jednotky bylo možné zvýšit pouze počet shader jednotek s možností ponechat počet texturovacích jednotek na 16ti). Pixel shadery R580 jsou uspořádány tak, že každá trojice může pracovat na jiném pixelu (jsou tedy paralelní), ale musí provádět tutéž operaci.

  Teoretický výkon R420 (@520MHz)
 PS (G)ADDs/s16,6
 PS (G)MULs/s8,3
 PS (G)MADDs/s8,3
 celkem (GFLOPS)25,0

 

  Teoretický výkon R520 (@625MHz)
 PS (G)ADDs/s20,0
 PS (G)MULs/s10,0
 PS (G)MADDs/s10,0
 celkem (GFLOPS)30,0

 

  Teoretický výkon R580 (@650MHz)
 PS (G)ADDs/s62,4
 PS (G)MULs/s31,2
 PS (G)MADDs/s31,2
 celkem (GFLOPS)93,6

 

Poslední věc, kterou se sluší zmínit je důvod pro rozdíl v počtu texturovacích jednotek a pixel shader jednotek u G70/G71 a R580. Operace, jako FP16 filtering/blending a některé jiné, jsou v čipech G70/G71 realizovány v texturovacích jednotkách a ROPs. Kdežto R580 FP16 filtraci na úrovni texturovacích jednotek nepodporuje, ale realizuje ji přes pixel shadery. Proto ji stačí méně texturovacích jednotek, ale pixel shader procesorů využije více.

G80

Kde začít? Nejlépe obrázkem:

GeForce 8800GTX a GTS v testu

G80 - 3D jádro - kliknutím zvětšíte

Nepropadejte panice, obrázek není tak složitý, jak se může na první pohled zdát :-) Zeleně jsou vyznačeny shader procesory, modře (hned pod nimi) texturovací jednotky, oranžově vyrovnávací paměti (cache) a modré bloky ve spodní části jsou ROPs. Na všechny části se podíváme podrobněji.

Stream Processors - jádro unifikovaných shaderů

Už jsme si vysvětlili, proč má unifikace smysl z hlediska hardwarového návrhu čipu a nyní se podíváme na hledisko softwarové. Dosavadní grafické čipy realizovaly pixel shading i vertex shading na oddělených výpočetních jednotkách. SM4.0 ještě vyžaduje podporu pro geometry shadery. Dokud na trh nepřijdou nové hry, které by je dokázaly využít, tak by bylo neekonomické jim věnovat samostatnou část čipu. Naopak PS a VS využívají všechny současné hry, ale každá si žádá jiný poměr. Některé hry a programy jsou limitované spíše geometrickým výkonem čipu (VS) - třeba třetí a čtvrtý test 3DMarku 2005, z her byl nejvíce tímto aspektem limitovaný v době svého vydání PainKiller (a následně i datadisk Battle out of Hell). Limit v podobě PS se projevuje u tak vysokého procenta her, že je snad nemá smysl ani jmenovat.

Co ale může být překvapující, je fakt, že tyto limity kolísají i v rámci jedné hry, v rámci jedné scény a dokonce i na úrovni vykreslování jediného snímku.

GeForce 8800GTX a GTS v testu

Proměnlivé požadavky aplikace na pixel / vertex shading na časové ose

Toto je další důvod, proč fixní architektura s pevně daným počtem výpočetních jednotek přestává být v současné době optimální. Téměř vždy totiž zůstanou některé výpočetní jednotky nevytížené. nVidia to ilustruje následujícími slajdy:

GeForce 8800GTX a GTS v testu

Popisu v tomhle případě nebude třeba. Pozitivní na celé situaci je především to, že na výhodách unifikované architektury se shodli všichni významnější výrobci (ATi, nVidia i PowerVR), což se stává opravdu málokdy. Alespoň máme jistotu, že je to krok správným směrem.

GeForce 8800GTX a GTS v testu

Nyní se podívejme na samotný Stream Processor (SP). Čip G80 jich nese celkem 128 (toho čísla se neděste, vysvětlím níže) a jsou uspořádány v osmi skupinách po šestnácti. Samotné šestnáctice jsou ještě rozdělené do dvou skupin po osmi - což je patrné i z obrázku výše. Toto uspořádání má určitou logiku, která nás ale zatím nemusí tížit, dostaneme se k ní postupně. Všechny SP ("zelená" část obrázku) běží na frekvenci 1350MHz.

GeForce 8800GTX a GTS v testu

detail shader-core čipu G80

 

nVidia zatím blíže nespecifikovala, jak této úctyhodné frekvence dosáhla, ale pokud jste průběžně sledovali situaci před vydáním čipu G80, mohli jste si povšimnout dvou dokumentů (ke stažení zdezde), které pocházejí od nVidie a pod kterými je pod podepsán Stuart Oberman (inženýr původem z AMD, autor FPU jednotky procesoru Athlon, který nyní pracuje v nVidii). Tyto dokumenty se mimo jiné týkají návrhu FP32 unifikovaných procesorů pro grafický čip, které budou umět pixel a vertex shading. Zřejmě už tušíte, o co jde - ano, řeč je o SP jednotkách čipu G80, které podle těchto informací navrhl právě Stuard Oberman. Návrh GPU se od návrhu CPU liší mimo jiné tím, že uspořádání jednotlivých částí jádra je v případě grafických čipů rozvrženo počítačem (na ruční návrh není čas, nové generace GPU jsou vydávány několikanásobně rychleji, než nové generace CPU), kdežto procesory jsou téměř kompletně rozvrženy ručně, a proto jsou schopné fungovat na  mnohem vyšší frekvenci, než které je se stejným výrobním procesem možno dosáhnout u GPU. Pokud SP G80 byly navrženy inženýrem, který pracoval jako architekt výpočetních jednotek procesorů, není divu, že mohou běhat na frekvenci 2x vyšší, než je typické pro grafické čipy 90nm výrobního procesu.

Každý SP je jednoduchý unifikovaný skalární (1D) procesor. Unifikovaný znamená použitelný pro pixel/vertex i geometry shading. Skalární znamená, že dokáže pracovat pouze s jednou složkou. Pokud si vzpomenete na popis pixel shader jader současných čipů z předchozích stránek, tak ty uměly pracovat se čtyřmi složkami (tří-složková (3D) vektorová ALU + jednosložková (1D) skalární). Teoreticky tedy nemůžeme srovnávat SP G80 na stejné úrovni jako ALU starších čipů. Pokud shader vyžaduje čtyřsložkovou (4D) operaci, stačí pro její provedení 1 ALU starších čipů (NV40/G70/R420/R520) ale G80 musí zaúkolovat  hned 4 ALU (každá pro jednu složku).

GeForce 8800GTX a GTS v testu

nVidia G80 WaterWorld demo
- kliknutím zvětšíte (doporučuji) -

Asi už vás napadlo, proč jsou uspořádány právě po čtyřech a proč jich je tolik :-) Tím ale vyvstala další otázka - proč byly ALUs rozděleny na skalární (1D)? Je to pro zvýšení efektivity. Pokud na starších čipech (3D+1D) bylo třeba provést např. dvě operace s jednou složkou, mohla jednu operaci provést 1D ALU, druhou 3D ALU, ale ta zůstala ze 2/3 nevyužitá. To se v případě G80 nemůže stát. Všechny SP jednotky jsou 1D (skalární), takže ať má shader libovolné požadavky, nemůže dojít k tomu, aby nějaká zůstala z tohoto důvodu nevytížená. Matematicky řečeno, ať má shader pracuje s jakýmkoli množstvím složek, je toto množství vždy dělitelné jedničkou (1D) beze zbytku, takže nic nezůstane žádný "zbytek", který by byl nevyužit.

To je na jednu stranu velice dobrý přístup, ale zase stojí více tranzistorů (čtyři SP procesory jsou větší než jedna klasická čtyřsložková ALU).

GeForce 8800GTX a GTS v testu

nVidia G80 WaterWorld demo
- kliknutím zvětšíte (doporučuji) -

Nyní víme, že SP dokáže pracovat přesně s jednou složkou, takže se podíváme, jaké operace na ní dokáže provádět. SP G80 nabízí stejné operace, jako v případě pipeline NV40: tedy 2x MUL a 1x ADD (=poměr 2:1). To bylo pro mnohé oborníky velkým překvapením; mnozí čekali, že poměr bude 1:1, jako v případě G70, kdy nVidia tuto vyváženost prezentovala jak zásadní krok pro dosažení maximální efektivity. Co bylo podnětem pro toto rozhodnutí mi zatím není jasné, nVidia tento údaj prezentuje jako hotovou věc bez dalšího vysvětlení.

Spekulace: Nabízí se vysvětlení, zda by operace MUL nebyla výrazněji vyžadována vertex/geometry shaderem, ale vzhledem k tomu, že tyto výpočty budou prováděny jen zlomek času, po který bude na unifikovaných jednotkách probíhat pixel shading, si nemyslím, že by se vyplatilo upřednostnit požadavky vertex shaderu před typickými požadavky pixel shaderu. Druhá teorie vychází z informace, že G80 byla vyvíjená čtyři roky, tzn. její vývoj započal ještě před vydáním NV40 (MUL : ADD = 2:1) a dávno před započetím vývoje G70 (MUL : ADD = 1:1). Znamenalo by to, že nVidia pro NV40 i G80 volila stejný poměr, zatímco upravený poměr 1:1 byl implementován až v případě G70). To evokuje otázku, proč by nVidia poměr během vývoje neupravila přidáním ADD instrukce nebo ubráním instrukce MUL. Přidání podpory pro další instrukci by při počtu 128 SP procesorů zřejmě vedlo k přílišnému navýšení počtu tranzistorů, zatímco ubrání MUL instrukce by o třetinu snížilo výkon této výpočetní jednotky. Tedy ani jedna z možností se nejeví jako schůdná.

GeForce 8800GTX a GTS v testu

SP jsou univerzální procesory, které mohou být využity v podstatě pro jakékoli účely. Krom operací s pixely / vertexy a geometrií je lze využít k akceleraci fyziky, multimediálním výpočtům a GP-GPU aplikacím. Vzhledem ke své skalární architektuře jsou velice univerzální a pro podobné účely vhodné. 

Teorii SP jsme rozebrali, ale jak je to s hrubým výkonem? 128 SP jednotek se s předchozími čipy nedá srovnávat přímo, takže je nutné provést nějaký umělý přepočet, abychom se pohybovali na úrovni srovnatelných jednotek. Nejschůdnější bude vyjádření výkon ve 4D operacích, stejně jako v případě předchozích tabulek. Tzn. výsledek spočítáme stejným postupem: 1350MHz * 128 * 3 (ADD+MUL+MUL), ale protože nám jde o výkon při operacích se třemi složkami a SP jsou jen jednosložkové, musíme ještě výsledek vydělit čtyřmi.

  Teoretický výkon G80 (@575/1350MHz)
 PS (G)ADDs/s43,2
 PS (G)MULs/s86,4
 PS (G)MADDs/s43,2
 celkem (GFLOPS)129,6

Pokud bychom srovnávali výkon čistě ve skalárních operací, byly by výsledky 4x vyšší (tedy např. 520GFLOPS, jak uvádí nVidia) ale v této podobě je nelze srovnávat s výsledky starších GPU. Podrobnější srovnání výkonu pro specifické operace (1D, 2D+2D, 4D...) najdete na konci článku.

Pokud rádi srovnáváte teoretická čísla, pak mám pro vás ještě několik lahůdek:

  • Čtyři SP jednotky G80 mají stejný teoretický výkon (MUL, MUL, ADD), jako jedna pipeline NV40 - běží ale na 3,4x vyšší frekvenci
  • To znamená, že pro dosažení teoretického výkonu G80 bychom potřebovali 7 čipů NV40 běžících na standardních 400MHz
  • Kdyby G70 a G80 běžely na stejné frekvenci (650MHz), byl by jejich teoretický výkon v pixel shadingu stejný, tedy 62,4 GFLOPS
  • Jinak řečeno, teoretický výkon G80 v tomto směru odpovídá dvěma kartám GeForce 7900GTX v SLI.

Proč je ale G80 rychlejší? Důvodů je několik:

  • skalární 1D architektura
  • samostatná ALU pro texture adressing, která neubírá výkon pixel shaderům
  • oddělená (nezávislá) texturovací jednotka
  • více než dvojnásobná frekvence, na které běží všech 128 SP
  • nesrovnatelně efektivnější dynamic branching

Dynamic branching v případě čipu G80 pracuje s granularitou 16-32 pixelů. Pokud si vzpomínáte na slajd ATi, určitě si pamatujete, že čím menší hodnota, tím lepší výsledek.

GeForce 8800GTX a GTS v testu

Můžeme si připomenout, jakou granularitu (či chcete-li "thread size") nabízely předchozí čipy:

  • architektura NV4x: řádově tisíce pixelů

  • R520/RV515: 16 pixelů

  • R580/RV53x: 48 pixelů*

  • G80: 16-32 pixelů

* počet v případě R580 vzrostl z důvodu ztrojnásobení počtu pixel shader procesorů (přičemž počet dispatcherů zůstal nezměněn)



 
Komentáře naleznete na konci poslední kapitoly.
1067 čtenářů navrhlo autorovi prémii: 517.5Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
Tento web používá k poskytování služeb soubory cookie.