6. 4. 2014

PS4 - Graphics Core Next


Emil Persson alias Humus /na jeho blog chodím od samého začiatku, to jest viac ako 12 rokov/. Veľmi šikovný programátor, dnes šéf progiš v Avalanche studios /Just Cause séria/. Známe fakty, nepredstavujem ho tu po prvý krát. Posledný príspevok, ktorý u seba zavesil sa týka jeho prednášku z GDC 2014 /reč je o DX11+, next gen konzolách a korení života - optimalizácii kódu/. Výborné čítanie, napríklad ten slajd nižšie. Zopár inštrukcií pre jednoduchý shader blending. Celkom vľavo je DX9 riešenie, v strede DX10 a úplne vpravo špecifické, šité na mieru GCN /Graphics Core Next/ architektúre AMD GPU, povedzme mimo DX štandardu. Zľava doprava sa stáva aj takáto banálnosť stále týchlejšou a rýchlejšou najmä vďaka počtu inštrukcií ktoré /ne/musíte vykonať /pokles z 5 na 3/. Aj preto je teda porovnávanie dvoch rôznych GPU /CPU/ tak zbytočnou stratou času. A PS4 GPU má more špeciálnych extenzií, ktoré v PC DX API nikde nenájdete, preto vám v dobrom hovorím ignorovať to PR divadlo okolo DX12, ktoré spasí XO a čo to vlastne znamená pre konzoly. Aj kvalita moje rannej stolice je totiž v tomto prípade omnoho dôležitejšia.

DX9 - DX10 - AMD GCN

A ideme ďalej. Množstvo komplikovanej teórie, aj manuál ku jadrovému reaktoru bude určite jednoduchší, keď v tom oko hráča konečne uvidíte niečo oveľa zrozumiteľnejšie. PS4, X1 a nejaké ROPs a BW. Skrátky, ktoré patria technickým pojmom: bandwidth a raster operations pipeline/s/. Nie sme stále o nič viac múdrejši. Takže ešte raz. Polopate povedané všetci viete, že "čím viac priepustnosti /BW/ tým lepšie". Prečo ? Nuž ROPs majú na priepustnosť vašej grafickej pamäte /a zbernice/ ohromné nároky. Preto aj to more "červenej" na slajdoch. Čo však vlastne ROPs robia ? Pokúsim sa o jednoduché vysvetlenie. Moderný grafický engine existuje 3D priestore, v ktorom sa grafické primitíva tiahnu do diaľky a grafické dáta sa nachádzajú v mnohých bufferoch /G-buffer/ a módoch /rendertargets/. Tento 3D guláš a množstvo vrstiev spoja ROPs do jedného 2D frejmu vo vami zvolenom rolíšení. Je to veľmi sofistikovaný a dosť komplikovaný, plne automatický, neprogramovateľný postup - sčítate, priemerujete, delíte, zaokrúhľujete /virtuálna 3D scéna má predsa viac pixelov ako 2D frame displaya/. A ide o jednu z najstarších časti grafickej pipeline. Mimochodm prvé 3D akcelerátory ako 3Dfx Voodoo vlastne neakcelerovali to "3D" ale práve túto rasterizáciu /ide to aj softvérovo, tak sme to robili celé veky/.


Háčiky. Priepustnosť ako taká je problém, ktorý vyrieší až príchod tzv. 3D pamätí. To jest sendvič a TSV /trough silicon vias/ spojky-mini zbernice o kumulatívne ohromnej šírke pásme. Hovoríme o terabajtoch za sekundu v roku 2016+. Bohužiaľ ide teda minimálne dva roky vzdialenú budúcnosť. GPU v PS4ke by potrebovala pre plnú saturáciu celého systému aspoň 512 giga/sec, optimálne tých 1000 gigabajtov /SONY istý čas zvažovala použitie eDRAM o tomto výkone/. Ninja PC GPU ešte krát 3 až 5. Zatiaľ neriešiteľne. Čo však s ROPs, prečo to viazne tam ?

Odpoveď je už zjavná - ich počet je priamo úmerné viazaný na dostupnú BW !! A tu nikto nemá. Pri PS4ke teda na 32 ROPs treba aspoň tých 180 giga/sec. Aj keď celá pravda sa má trochu inak, ale k tomu sa hneď dostaneme. Aj preto XO "stačí" tých 16 ROPs, viac jeho BW proste neuživí. A prosím neverte blábolistom, čo pri XO "sčítavajú" jeho DDR3 a eSRAM. Ďakujem.

ROPs však majú ešte jeden problém. Ide o také malé nechcené dieťa. Obludné množstvo silikónu sa napríklad na ich úkor vráža do ALUs /GPU SIMD jednotky/ . Má to pragmatickú príčinu. ROPs vlastne maľujú vaše vypočítané pixely na obrazovku. No a tie výpočty /shaders/ vlastne odmakávajú tie ALUs. Od čas DOOM1 po KZ:SF stúpol počet kalkulácii na jeden pixel z 10 na 10 000 a bude horšie. Preto ide kremíkový budget hlavne do ALUs a čo zostane padne na ROPs, ktorých počet aj tak nesmie presiahnúť stále smiešne maličkú BW. To sú tí kostlivci v skrini dnešných GPU.

Existuje teda nejaký spôsob ako si trochu pomôcť kým príde definitívne riešenie ? Samozrejme. Zrušme ROPs, Z/stencil buffer a všetky už dnes prekonané postupy. Kompletne nová paradigma. Presne o to sa pokúsil Intel s Larrabee. Takmer to vyšlo, práve odstránenie ROPs sa ale ukázalo ako závažný performance problém. Naspäť ku rysovacím doskám. To však neznamená, že tu nie sú ďalšie pokusy.

Direct compute /DC/ - API, extra programovací režim vašej GPU. A sme pri inom dev tíme. Sucker Punch /Infamous/ a ich programátorské čoromoro. ROPs teda "niečo zoberie, prežuje a hodí to do ram". Direct compute dokáže to isté, pričom /okrem iného/ vie obísť takmer celú štandardnú grafickú pipelajnu. Oči sa vám iste pretočili. Potenciál je technicky nekonečný, ako si to urobíte /varovanie: drsné high-end "ručné" programovanie ako v ére pred 3D kartami, rozhodne nie pre každého/, také to budete mať. Výhodou PS4 GPU je aj novší GCN 2.0 dizajn a asynchrónny ACE engine. Ten si kradne voľné cykly GPU a používa ich ako bonus pre GPU, či CPU akceleráciu. PS4 hra Infamous teda podľa ich prednášky využíva GPU dvojitým spôsobom. Primárna grafická karta /low level GNM API/ a "sekundárna grafická karta" /direct compute via ACE/ pre peknú kôpku grafických fines a často je ich riešenie aj rýchlejšie ako oficiálny hardwired GPU pixel shader !! A obe tieto grafické karty pracujú paralelne. Tomuto sa hovorí skutočne efektívne využivanie /utilizácia/ hardvéru. A budúcnosť je úplne bláznivá, skutočne tu beží ešte len základný výzkum. O tomto vlastne hovoril Mark Cerny, keď povedal, že ide o future proof rezervu, ktorá to rozbalí v mainstreame tak o 2-3 roky.
----------------------------

Viete aký je vlastne základný rozdiel medzi PC a konzoláckym GPU ? Pri PC hre výrobca náklady spojené s kvalitnou optimalizáciou kódu hodí na vaše plecia. On totiž nerobí nič a vás prinúti si kupiť nový HW. Brute force prístup. Pri konzolách je to presne naopak. Celé bremeno znášajú vývojári, z HW dolujú viac a viac a viac výkonu a práve tu sme svedkami revolúcií v programovaní /moderný ACE+GPU engine je evolučne dokonalou kópiou heterogénneho CELL programovania/. Je to skostnatelé, rigidné DX PC čo brzdí vývoj. Tie ich 300 wattové GPU dlhé 32 cenťákov a panika v MS centrále keď sa ukázala konzolácka obdoba API - Mantle od AMD. Tož sa pekne usaďte a sledujte, v nasledujúcich aspoň 6 rokoch, čo skutočne dokáže špeciálne vyladené PC GPU triedy "7860" /cirka PS4 GPU/. Iba v hnilom PC protredí, by ste nikdy nezistili, ta karta by už po 18 mesiacoch a s biednym 35% využitím potenciálu skončila na smetisku dejín.