2. 3. 2011

Počítam, teda som

Mini súboj dvoch hárdverových špecialít v PS3ke a xcrape vyhral hypervýkonný CELL. Prilepená pidi eDRAM xcrapu suplujúca neexistujúca video ram s vlastnou zbernicou a sľubujúca "antialialing zadarmo" sa dnes ukazuje ako jasná brzda pravých next gen enginov /eDRAM - nízke rozlišenie, žiadne AA, patetické výsledky pri deferred renderingu, penalizácia pri spracovaní geometrie ak je príliš rozšafne použitý tiling, nutnosť presunu dát z eDRAM do UMA pred ich zobrazením/. CELL nie je tiež žiadne neviniatko, ale každá minúta času doňho vrazeného sa dnes vracia desaťnásobne. Je to dar z nebies s takmer nevyčerpateľným potencionálom. V roku 2009 CELL zažiaril v hre Killzone 2 /deferred rendering/, o rok neskôr prevratný SPE-MLAA antialiasing. Medzitým banality ako SPE shaders, culling, deteselácia, skinning, particle systémy, záplava postefektov, fyzika, AI, matematika. Cieľ pre rok 2011 - dynamická radiosita, globálna iluminácia /GI/, indirektné nasvietenie a emulácia DX 11/Shader 5.0 modelu.

To čo bolo pre multiplat vývojárov mordovanie so CELL procesorom, bude pre PC vývojárov trápenie s Compute shaders, alebo presnejšie DirectX Compute shader. Ide po teoretickej stránke o značne komplikovanú tému. Takže vám budem pomáhať každým podobenstvom a metafórou, ktorú najdem. Začneme tým, čo všetci viete. Dnešné GPU obsahujú stovky nejakých ALU a desiatky ROPs. ROPs - rasterizéri su maliari a skrze fillrate nám určujú ten klasický oldschool hrubý výkon. ALU sú aritmeticko logické jednotky a ich úlohou je rýchle spracovanie malých/veľkých časti grafického kódu - shaders. Pixel, Vertex, Geometry a Compute. "Vynález" shaders techniky nám mal pomôcť prekonať obmedzenia staručkej rasterizačnej generácie. Ok, úloha splnená. Dnes však práve v najaktuálnejšej súčasnosti pre nás klasická "shaders" filozofia opäť začína narážať na svoje limity v krajne výkonovo superkritických situáciach. Proste pod koňom sa pri veľkom náklade zlomili nohy. Máme na to liek ? Jasné, že máme. CELL a DX 11 a hlavne Compute shader - CS /primarne určený pre vysokoefektívne spracovanie hlavne negrafických operácií/.

Dnešné priemerné GPU má teda 800 ALUs, a keď na ňom nedaj boh spustíte nejaký z hrobu vykopaný DX3 kód pre jednu ALU - bude vám v skutočnosti bežať na všetkých 800 !! Compute shader tieto pevne základy rozbije totálnou prestavbou pohybu dát v GPU jednotke. Od sdieľania dát/pamäte/registrov medzi jednotlivými grafickými threadmi, cez zápis/čitanie lokálnej památe, po organizáciu /thread, groups, dispatches/. Thready-vlákna v jednej skupine môžu vzájomne komunikovať, output jedného threadu, môže byť inputom ďalšieho /podobne pixel shader môže posunúť svoj produkt compute shaderu/. V rámci jedneho dispatchu môžu jednotlivé vlákna robiť svoju prácu asynchrónne !!. Je to obtiažne zvládnuteľný guláš, ale ide o pravé low end vysoko optimalizované programovanie /ako na konzolách/ a de fakto úplne obchádzate limity dané obmedzeniami DX API. Využívate skutočný výkon čipu. Aby som vám ešte viac zamotal hlavy. Pri DX CS môžte jednou inštrukciou spustiť kód na viacerých vláknach /SIMT - Single Instruction Multiple Thread/. Malý háčik. AMD-ATi a NVidia to robí každý po svojom a iný je aj počet vláken odštartovaný jednou inštrukciou. Pri AMD-ATi /Wavefront/ je to 64 a pri Nvidii /Warp/ 32 vláken. Kto povedal, že to bude jednoduché však !!



nárast výkonu zodpovedá SLI /2xGPU/ konfigurácii pri danom efekte - vysokokvalitný depth of field

Naprogramovanie grafického kódu pre Compute shader vyžaduje tú istú zručnosť ako pri programovaní CELLu. Výsledky sú však fascinujúce /viď obrázok vyššie/. Podobne ako pri forward /vhodný pre jednoduchú geometriu, veľmi málo svetelných zdrojov/ versus deferred rendering /veľmi komplexná geometria, záplava svetiel/ platí, že použitie daného Compute shadera pre "priliš jednoduchú" operáciu je pomalšie ako využitie štandardného pixel shadera. DICE tím vo svojej hre Battlefield 3 využíva iba DX 11 GPU technológiu a masívne aj DX CS kód. Ako však to isté zrealizovať na "DX9" konzolách /silné úvodzovku sú na mieste, verte mi/. Podobne ako PS3 aj DX11 tu s nami ešte nejakú dobu pobudne, treba sa s tým chlapsky vyrovnať. Ako nám pripomína história "párne" DX čisla dlho nepožili - DirectX 2,6,8,10. Tie nepárne sa stali/stanú klasikou DX 1,3,5,7,9, 11 /DX 4 chýba zámerne, túto verziu MS preskočilo/. DX 11 Compute shaders už z princípu /GP GPU kód/ nie je až tak ťažké napasovať na masívne paralelizované SIMD /Single instruction multiple data/ SPE monštrá na 3.2hz. A DICE to aj urobili.

Prečo je to pre PS3 veľká výhra ? Nuž DICE pre BF3 licencovalo a upravilo lighting GI modul Enlighten firmy Geomerics a ten podáva excelentné výsledky pri kalkulácii prirodzene vyzerajúceho nasvietenia s jednou malou zákernou hnidou pod chrastou. Obrovská časť výpočtov toho svetla beží na CPU /indirektná, tá najdoležitejšia ambientná zložka, bounce-odrazy svetla/, direktné nasvetenie /"slnko to reže do steny", stále beží na GPU/. Pri high end PC DX 11 GPU je iba na vás ako a kde to rozhodíte - CPU, GPU, ALUs, DX CS. Konzolácke GPU však už tretí rok melú z posledného a vyžaduju CPU asistenciu, niet tam voľnej kapacity. Teda voľné CPU thready.

Rátajte so mnou. PS3 - 8 jadier, 1xPPE /2xHW thread/ + 7xSPE /7x1 HW thread/ = 9 vláken na 3.2 Ghz krát 4x32bit "slovo" v SPE SIMD. Xcrap - 3 jadrá, každé po 2 x HW thread = 6 vláken na 3.2 Ghz. Xcrap CPU je na papieri o 50% pomalšie, prakticky o 100%. Dôsledky toho budeme hľadať v BF3 pri porovnaní verzií /hlavne nasvietenie, antialiasing, fyzika - deštrukcia/. Špeciálna DICE prednáška na GDC 2011 je venovaná PS3ke, a to konverzii DX11 kódu pre CELL a unikátnemu CELL rendereru - SPE tile based deferred shadingu. Táto bude na internete dostupná o týždeň a vychutnám si ju patrične. Jemne vám iba naznačím, že výstup a globálne možnosti tohto grafického enginu s ľahkosťou prekonajú ako snahu Cryteku na PS3, tak aj famóznu Killzone 3 /tu však GG riadením art designu hry prekonalo aj samu seba/. Hrozné je už "iba" to, že DICE nechce licencovať svoj Frostbite engine /a teda ani ten CELL renderer/ iným firmám !!