Chtěl bych uvést na pravou míru pár detailů ohledně SLI-AA, o kterých se tu párkrát diskutovalo (přesněji řečeno mystifikovalo)...
SLI-AA stejně jako CrossFire Super-AA nebo i původní 3Dfx-AA fungují tak, že každý z grafických čipů vykresluje obraz s jiným rozložením AA vzorků (laicky řečeno každý čip vykresluje obraz vyhlazený trochu
jinak) a před zobrazením na monitoru jsou takto vykreslené obrazy prolnuty (grafickou kartou) v jeden a kvalita výsledného vyhlazení se sečte.
Co to tedy znamená? Abychom dosáhli minimálního propadu ve výkonu a maximální kvality, potřebujeme,:
1. ... aby rozdíl ve vyhlazení mezi oběma snímky (které budou prolnuty ve výsledný) byl co největší - jistě pochopíte, že prolneme-li identické snímky, nijak to neovlivní kvalitu a výsledkem bude zase tentýž snímek.
2. ... aby se snímky ze všech čipů dostaly co nejrychleji do (napíšu to obecně) výpočetní jednotky, která je prolne. Čím déle to bude trvat, tím déle trvá vykreslení jednoho snímku, tím déle čekáme na započetí ve vykreslování dalšího snímku a klesá FPS
3. ... aby jednotka, která prolínání (=blending) provádí, toto provedla také co nejrychleji (ze stejných důvodů jako v bodě dva)
První bod se tedy týká kvality, druhé dva výkonu. Pro začátek se můžeme podívat, jak to před 6 lety řešila 3Dfx (v profi segmentu 3Dfx toto řešení používala už před 8 lety, jen pro info) na čipech VSA-100 (Voodoo 5):
3Dfx
Grafická karta nesla dva až čtyři čipy, každý uměl provést FSAA 2x. Rozložení AA vzorků pro pixel bylo plně programovatelné v rámci mřížky 8x8, takže rozložit vzorky tak, aby rovnoměrně vykryly plochu pixelu, nebyl problém. Na následujícím screenshotu je zobrazeno rozložení vzorků pro jeden pixel - vidíte mřížku 8x8, na které je rozloženo 8 vzorků, každá dvojice (vyznačil jsem je barevně) pochází z jiného čipu.
Rozložení je optimální, v každém sloupečku i v každém řádku je přesně jeden vzorek, takže se v rámci řádku ano sloupce "nepřekrývají" a účinek AA je maximální možný, kterého lze s použitím 8 vzorků dosáhnout (říká se tomu maximální EER).
Když tedy každý čip vykreslil svůj snímek se dvěma vzorky (laicky řečeno, každý čip vykreslil snímek s použitím FSAA 2x), byly tyto snímky přes SLI rozhraní poslány do specializovaného RAMDACu primárního VSA-100 čipu, který je real-timově (ještě v digitální podobě) prolnul. Čip tedy obsahoval samostatnou jednotku, která byla určena výhradně pro tento účel - jinak řečeno nebyla součástí 3D jádra, takže její použití nebrzdilo vykreslování 3D scény stejně jako vykreslování 3D scény nebrzdilo tuto jednotku, takže prolínání snímků ve výsledný obraz již nezpůsobovalo žádný dodatečný propad ve výkonu.
shrnuto - 1. rozložení vzorků je 100%, 2. přesun snímků (po SLI data-path) je taky 100% a 3.blending je prováděn samostatnou jednotkou, takže taky 100%.
ATi (CrossFire)
Na 3Dfx SLI jsem to rozebral docela podrobně, takže tady už to vezmu jen letem-světem. ATi má (na R300-R580) pro AA vzorky programovatelnou mřížku velkou 12x12, což znamená, že může být použito až 12 vzorků při optimálním rozložení (max. EER). Vzhledem k tomu, že ATi ani víc nepoužívá, je to OK. Vykreslené snímky posílá sekundární karta té primární (=CrossFire Master) po propojovacím kabelu a bledning (prolínání snímků ve výsledný obraz) provádí samostatný čip (compositing-engine, kompozitor, onen čip na master kartě s logem Xillinx).
Shrnuto - rozložení vzorků = 100%, pro přesun snímků je použitý samostatný kabel, tzn. běží v plné rychlosti = 100% a prolínání provádí také samostatná výpočetní jednotka = 100%. Je to tedy podobné jako u 3Dfx - po vykreslení jednotlivých snímků už nedochází k žádnému dodatečnému propadu výkonu.
nVidia SLI G70 - GeForce 7800GTX
Čip G70 (stejně jako NV40) pro rozložení AA vzorků nenabízí programovatelnou mřížku (vedou se debaty o tom, jestli je rozložení při FSAA 4x prostě fixní, nebo jestli nVidia používá mřížku 4x4, pro níž jsou logicky 4 vzorky maximem, pokud chceme, aby rozložení bylo optimální). Použijeme-li tedy SLI-AA 8x, vykresli každý ze dvou čipů snímek s použitím AA 4x stejným způsobem, jaký by použil i v případě, že bychom zapnuli pouze AA 4x. To se děje z toho důvodu, že díky absenci programovatelnosti rozložení vzorků v rámci nějaké větší mřížky prostě nemůže změnit rozložení vzorků za nějaké efektivnější (viz obrázek u 3Dfx, nahoře). Výsledek tedy vypadá
takto - sekundární čip vykreslí snímek se stejným rozložením vzorků jako ten primární - jen s malým posunem oproti primárnímu čipu. Když se výsledky prolnou (spodní část obrázku), není rozložení v rámci pixelu příliš optimální, několik dvojic vzorků téměř leží na jedné horizontále či vertikále. A krom toho jsou rozmístěny prakticky ve dvou řadách, nikoli rovnoměrně po celé ploše.
Vraťme se ale do okamžiku, kdy každý čip vykreslí vlastní snímek a sekundární čip posílá svůj snímek tomu primárnímu, aby došlo k jejich prolnutí. SLI rozhraní čipu G70 nepodporuje přenos těchto snímků mezi čipy, takže elegantní SLI propojka mezi kartami je v tomto okamžiku k ničemu a snímek je třeba protlačit cestou VRAM#2 -> čip#2 -> PEG 16x -> čipset základní desky -> PEG16x -> čip#1, ve které si tato data konkurují s daty, která system posílá grafické kartě (textury, vertex data atp., prostě vše potřebné pro vykreslování 3D scény)
Když se snímek ze sekundární karty dostane do primární a má dojít k prolnutí, jsou k tomuto účelu použity ROPs jednotky 3D jádra, resp. jejich bledning units. G70, ačkoli má 16ROPs, tak má pouze 8 blending jednotek. Ty jsou samozřejmě používány při renderingu a jediné štěstí je, že nejvíce bývají vytíženy při HDR rednderingu, který G70 v kombinaci s FSAA či SLI-AA nepodporuje (skutečně naštěstí, protože propad výkonu by byl obrovský, bledning units vytížené HDR renderingem by ještě měly prolínat snímky pro SLI-AA)
...shrnuto - rozložení vzorků není zdaleka optimální, tzn. kvalita je nižší, než jakou lze čekat od propadu výkonu spojeného s vykreslením 8 AA vzorků; snímky jsou odesílány po systémové sběrnici, kde si konkurují s dalšími daty, což způsobuje další propad výkonu; pro prolnutí snímků není použita žádná specifikovaná jednotka, ale 3D jádro (které už je samo o sobě vytíženo vykreslováním)
Můžeme tedy objektivně říct, že čip G70 ani karta GeForce 7800GTX nebyly v žádném aspektu navrženy s ohledem na provozování SLI-AA a veškerá podpora pro tuto technologii je pouze softwarové řešení doplněné dodatečně formou ovladačů jako reakce na konkurenční produkt.
nVidia SLI G71 - GeForce 7900GTX
Čip G71 se od G70 ale liší. Rozložení vzorků zůstalo (pro jeho zlepšení by bylo třeba kompletní překopání některých částí čipu, které by vedlo k výraznému nárůstu v počtu tranzistorů - což je proti současné politice nVidie - a navíc by vzrostly i požadavky na grafickou paměť, což by vedlo k poklesu výkonu zvlášť u 128 a 256MB karet).
G71 však má upravené SLI rozhraní a je tak prvním čipem nVidie, který je schopen přenášet celé snímky přes SLI propojku, nikoli jen po sběrnici.
K prolínání je ovšem i nadále použito 3D jádro (bledning units), ovšem jejich počet byl v G71 (oproti G70) zdvojnásoben a je jich nyní celkem 16 na čip.
shrnuto - rozložení vzorků je stejné jako u G70, data jsou ale přenášena vlastní cestou (nikdy jsem nepochopil, proč nVidia rovnou nepřevzala ozkoušené prvky 3Dfx SLI a musela zkoušet vlastní horší cestu než zjistila, že optimální řešení mělo 3Dfx už před 8 lety) a blending stále probíhá ve 3D jádře, ale aspoň byl zvýšen počet blending units.
můžeme tedy říct, že čip G71 je prvním čipem nVidie, který je navržen s ohledem na SLI-AA a to konkrétně s ohledem na výkon (kvalita zůstává beze změny).
Pro ilustraci přidám několik grafů výkonnostního rozdílu SLI-AA mezi G70 a G71 (při SLI AA 8x je G71SLI o 40-60% rychlejší než G70SLI!):
