Pod pokličkou unifikovaných shaderů, DirectX 10/10.1 a WDDM 2.0/2.1
Kapitoly článků
„Elitní bastardi“ (přesněji kolegové ze serveru Elite Bastards :-) se nedávno setkali v Londýně s Richardem Huddym ze společnosti ATI a právě z jeho prezentace vzešla velká část nadcházejících informací. Pojednání o WDDM pak pochází navíc i z pera redmondských a kalifornských expertů.
Jako první si vezměme na paškál „jednotné shadery“. Již tento neomalený český překlad, který jsme v minulosti úmyslně několikrát použili, nasvědčuje, o co jde. Doposud všechna GPU pro stolní PC/Macy/Pegasus/cokoli_dalšího používají zaběhlé schéma pixel a vertex shaderů. Ty jsou určeny pro „rozdílné typy výpočtů“, byť ten rozdíl je samozřejmě podstatně menší než třeba mezi pověstnými jablky a hruškami.
Při uvedení R520 alias Radeonu X1800 XT jsme si povídali i u jeho skvělém Ultra Threaded Dispatch Procesoru podpořeného řadou univerzálních registrů pro dočasná data, tedy části architektonicky „zděděné“ (byť dědictví rozhodně není to správné slovo) spíše po Xenosu než R400 řadě. Ten má jednoduchý, ale nesmírně důležitý úkol. V podstatě se dá říci, že z hlediska shaderů sedí v GPU v místě, kde místo něj doposud seděla „žába na prameni“. Má totiž na starosti přidělování jednotlivých dílčích výpočů pixel shader jednotkám. Příliš dlouhé instrukce trhá na menší a rozesílá je mezi právě nevytížené pixel shadery, zatímco dřívější přístup prostě „bezmyšlenkovitě“ nechával počítat shaderové záležitosti bez jakékoliv takto pokročilé kontroly a docházelo tak k situacím, kdy jedna část GPU měla hodně na pilno, zatímco druhá neměla co na práci (znáte tu reklamu na šampón, kde jedna z plážových prodavaček má ve frontě všechny muže zatímco druhá si „stěžuje“ na nedostatek práce? Tak to je zhruba ono :-).
U R580 (alias Radeonů X1900) doznal tento způsob práce další výkonové injekce. Každá pixel pipeline (neboli volně řečeno, každé dílčí výpočetní vlákno, kterých má nyní ATI v GPU šestnáct) už nemá ve svém portfoliu jednu, nýbrž tři pixel shader jednotky. Sice toto řešení nemá zdaleka takový výkonový potenciál, jaký by mělo plných 48 pixel pipeline, ale i tak se jedná o velmi elegantní architektonické řešení čipu na úrovni pixel shaderů. Ono těch plných 48 pipeline by také nebylo zrovna efektivní řešení, ale to bychom zabíhali do podružných věcí, kvůli kterým tu „dnes nejsme“.
Teď je pravý čas dokončit myšlenku. Unifikované shadery nejsou nic jiného, než další, tentokráte však znatelně obsáhlejší, „zuniverzálnění architektury“. Pokud se do příchodu R520 mohlo stát, že jedna část pixel shaderů dře jakoby chtěla splnit pětiletku za čtyři roky, zatímco jiná část se poflakuje, což řešil právě Ultra Threaded Dispatch Procesor, pak tentýž jev řešící jistý problém, ale v globálním měřítku, přinese R600. I bez ohledu na Ultra Threaded Dispatch Procesor totiž mezi GPU ATI panuje stejný nepoměr vytížení mezi pixel a vertex shader jednotkami, jaký do příchodu R520 pracoval mezi jednotlivými pixel shadery. Právě R600 má tomuto ve spojení s patřičnou softwarovou podporou pro programátory (nejen) her v DirectX 10 učinit přítrž.
Již by totiž prakticky neměla nastat situace, že by se pixel shader jednotky mohly zbláznit z přebytku práce, zatímco vertex shader jednotky nemají co dělat, popř. čekají na výsledek, který jim vyplivnou pixel shadery. Do příchodu R520 se stávalo, že jeden pixel shader čekal na výsledek dlouhého výpočtu z jiného pixel shaderu. Pak přišel Ultra Threaded Dispatch Procesor a dlouhé výpočty začal štěpit na menší, které dal počítat oběma (nebo více) pixel shaderům, popřípadě rozvnoměrně rozhazoval dodávané výpočty, a výsledku tak bylo dosaženo o něco dříve a hlavně efektivněji. R600 tuto schopnost dotáhne dál. Nyní již pixel nebo vertex shader nebude muset čekat na výsledek výpočtu z vertex resp. pixel shaderu. Shader jednotky budou univerzální a tak jim bude možno předhodit jak pixel tak vertex výpočty a oni je prostě spočítají. Rozložení výpočtů v GPU tak bude nejen efektivní ale také o něco svižnější.
ATI onu efektivnost demonstruje grafem, který ukazuje různě nerovnoměrné zatížení pixel a vertex shader jednotek v GPU současné generace. Prostě většina stavů, ve kterých se současná GPU nacházejí, buď znamenají „flákání se“ pro vertex nebo pro pixel shader jednotky. V R600 bude výpočty mezi unifikované shadery rovnoměrně rozhazovat Thread Arbiter (nevíme jistě, zda toto je finální pojmenování) a čip tak pojede vždy na 100 % výkonu a také s maximální efektivností (modelově se zde bavíme o top GPU, takže se automaticky bavíme o top hrách s náročností přesahující schopnosti jakéhokoli myslitelného GPU. Představte si třeba takový Oblivion v 2560×1600 s 4096×4096 texturami, 4×AA + 14×AF + HDR spolu s požadavkem na >60 fps za všech okolností). Zpět k Thread Arbiteru. Ten je prozatím zakryt závojem tajemství, ale tak nějak se ví, že v Xenosu je na každých šestnáct pixel shaderů jeden vlastní jim přidělený Thread Arbiter. Tedy pro 48 pixel shader jednotek jsou v Xenosu celkem tři. Něco podobného předpokládejme i u R600.
Doprovodný obrázek v prezentacích pak není nijaká marketingová záležitost. ATI prezentuje scénu jako náročnou na vertex výpočty (žralok) a pixel výpočty (voda). Volně lze říci, že podle toho, jaký je poměr na obrazovce mezi vodou a žralokem, mění se i poměr mezi pixel a vertex shader výpočty.
Unifikovaná architektura však sebou nese i jistá negativa z hlediska návrhu čipu. Jednotky jako Ultra Threaded Dispatch Procesor či Thread Arbiter totiž nevykonávají žádnou přímou spoluúčast na výpočtech v GPU. Ano, jejich přínos pro výkon a efektivnost GPU je zcela neoddiskutovatelný, ale ve skutečnosti nic nepočítají. Z hlediska výpočtů 3D grafiky jen rozesílají data, která počítají teprve jejich „zákazníci“ tedy shader jednotky. Zvětšuje se tak v GPU poměr prvků, které nemají přímý podíl na výpočtech a proto jsou GPU od ATI při srovnatelném výkonu momentálně znatelně větší než ta od nVidie. Už i právě třeba R520 nebo R580 nesl prvky architektury, které v G70 nebo G71 (GeForce 7800/7900) nejsou obsaženy a ani architektura unifikovaných shaderů nebude v GPU G80 plně implementována. Z tohoto pohledu se nebojím označit ATI jako jakéhosi “průkopníka“ nových technologií, které ihned po uvedení na trh nenaleznou uplatnění ve hrách, zatímco nVidii jako výrobce, který se sice drží v těsném závěsu, ale „veze se“. Koneckonců ATI i díky pokrokovým firmám, které v minulosti skoupila, je tímto tahounem již řadu let. Vzpomeňme třeba akceleraci RealVideo v GPU Radeonu 9000 (na nějž šel přeflashovat o malinko starší model 8500), anebo, a to hlavně, doslova „předčasné“ uvedení Radeonu 9700 s DirectX 9 architekturou v době, kdy DirectX 9 ještě nebyly hotovy (a to nemluvíme o tom, že právě kvůli zpožděním ve vývoji DirectX 9 kanadská ATI uvedení Radeonu 9700 nějakou dobu odkládala). Ale, učiňme přítrž nostalgickým vzpomínkám a pokročme dále.