4. 1. 2011

CELL - smooth criminal

Prakticky v každom pedeefku či pepetečku od first-second party vývojárov zaručene nájdem túto vetu : "spoľahnite sa na SPE, sú veľmi rýchle", a o pár strán ďalej to opäť priklincujú : "naozaj VEĽMI rýchle". V ružovom to isté o lokálnej pamäti pre SPE-LS a EIB zbernici čo jednotlivé SPE spája. Pre bežného laika sú to iba domorodé PR tance a jódlovanie pri krave. Ja vám však odhalím skutočnú pravdu, teda ozrejmím uhol pod akým sa treba na túto vec pozerať.

Moorov zákon z roku 1965 hovorí, že každých 18-24 mesiacov sa počet tranďákov zdvojnásobí, cena klesne a výkon sa samozrejme zvýši. Zatiaľ to v týchto intenciách po istom nezákonnom ohnutí celkom dobre funguje. Otázka však stojí takto - dokážu držať krok s výpočetnými časťami Neumannovej schémy aj tie ostatné /pamäť, zbernice/ a čo na to vlastne hovoria fyzikálne zákony ? Je naozaj to rýchlejšie - "rýchlejším" ? Odpoveďou je dvojité - nie. Tabuľky, čísla, vysvetlenie, pointa na konci. V boxérskom ringu budú tieto CPU/mem systémy:

Z80 : Zilog Z80 v minulom storočí veľmi rozšírený procesor. ZX Spetrum /1982, 3.5Mhz/, MSX, Sharp MZ 800, Game boy a ďalších asi sto arkáde mašín. Žiadna cache pamäť, realizovanie bežnej inštrukcie trvalo asi 4 takty. 68000 : Amiga 500 /1987/ a Atari ST, každý tieto dve 16 bitové stroje dobre pozná, bežná pracovná rýchlosť okolo 8Mhz, žiadna keška, 4 takty na jednu jednoduchú inštrukciu. Pentium P54C: legendárne CPU, prvé klasické Pentium 66-75Mhz /1993/, L1 keška, 0.5 taktu na jednu inštrukciu /2 inštrukcie v jednom takte/, latencia 15 taktov pri práci so systémovou pamäťou. P54C stála ako vzor pri vývoji Larrabee /jeho početné mini jadrá/. Xenon : 3200 MHz Power PC CPU pre xcrap /2005/, 0.5 taktu na jednu inštrukciu /2 inštrukcie v jednom takte/, má L1 a L2 kešku, extrémne vysoká latencia pri vstupe do UMA pamäte - až 500 taktov. Ak to niekto nevie, všetky požiadavky o dátový prenos smerom na hlavnú pamäť musia prejsť skrze GPU + dešifrovanie sa rovná výrazný časový sklz. Fachmani od Intelu napríklad nepovažujú Xenon sa dobrý čip a štastné riešenie, parodoxne by pri nižšom pracovnom kmitočte dosahoval vyšší udržateľný výkon vďaka nižšej latencii. Nehalem /2008/: Core i7 - 2930Mhz, L1-L2-L3 keška. V jednom takte - 4 inštrukcie. Podľa Anandtech testov je prístup do hlavnej pamäťe na úrovni 47 ns, to jest - latencia 137 taktov. Porovnajte s Xenonom. Design čipu bol extra navrhnutý aj s ohľadom na tento parameter.

-------------------------------------------MHz ------------ TnI ------------ MIPS ------------- ML ----------------------- L/ns
Z80      1982    3.5    4          0.9      4           1143
68k 1985 8 4 2 4 500
P54C 1994 75 0.5 150 15 200
Xenon 2005 3200 0.5 6400 500 156
NHM 2008 2930 0.25 11720 137 47

/TnI - počet taktov na inštrukciu, MIPS - počet inštrukcii za sekudnu, ML - mem latencia v taktoch, L/ns - mem latencia v nanonsekundách/

Dosiahli sme teda 10 000 krát viac inštrukcii za sekundu, avšak mem/ns latencia sa zlepšila iba 25 násobne !! Na drobné - cca 1.45 násobný nárast výkonu ročne, ale iba 1.13 rast výkonnosti pamäte. A nožnice sa roztvárajú, lebo v skutočnosti dnešná aj najvýkonnejšia pamäť zápasí s multiprocesorovým a SIMD /single instruction - multiple data/ útokom, proste všetkého veľa a všetko naraz. Riešenie. CELL procesor, XDR pamäť a Mike Acton. Maiki je šéf progišom Insomniac Games, stojí za ich grafickým enginom. Na svojej sajte má meter pekných /a pre laika/ extrémne nudných prednášok / "Data Oriented Design"/. Hlavná témou je pripomenúť/naučiť iných programátorov designovať svoj kód aj z pohľadu toho faktu, že celý ten nárast výkonu je bezcenný ak stojí a padá na výkonnosti pamäťového výkonu a napríklad cene za cache miss /častá vec - CPU príde do kešky a inštrukcia, ktorú tam chce nájsť - tam proste nie je , CPU sa vsak neposerie a ide ju pohľadať do hlavnej pamäte - bing a 500 taktov v zadku pri Xenone/. Dáta su totiž ako energia, nestráca sa, iba sa premieňa. Ako efektívne to dokážete urobiť, ušiť pre svoj hárdver, také výsledky aj čakajte. Tento problém sa riešil napríklad pri tom ako GPU shaders - fragment kód napasovať na SPE jednotky, teda na prvý pohľad negrafický hárdvér.

PS3. Prečo si teda Santa Monica /God of War/ nevie CELL a spol. vynachváliť ? Pozrite sa ešte raz do tej tabuľky, vidíte to Pentium. Tak presne tá P54C je vlastne naša, dosť modifikovaná SPE jednotka. Pentium v Ps3ke. Nebeži však na 75Mhz, ale na 3200Mhz. Zvládne 4 x 32-bit integer a 4 x SP FPU inštrukcie na jeden takt, 16 paralelných pamäťových operácii naraz /CELL teda dokopy 128 mem operácii !!/, SPE nemá kešku, nemá ani RAM. Je to softvérovo riadená extrémne rýchla eSRAM s extrémne malými latenciami /teda ako si ich naprogramujete/. Pri vývoji sa riešilo aj to, či má mať veľkosť 128 alebo 256 KB a išlo im práve o redukciu latencie na najnižšie možné hodnoty /128KB pamäť je rýchlejšia/. EIB zbernica /cez 200 giga za sekundu/ a DMA riadené presuny dát medzi SPE sú niekedy kritizované pre náročnú optimalizáciu, ale vo finále s výborným výkonom. XDR má asi o 50% lepšiu latenciu než GDR2 v xcrape, a to aj v tom krajne najhoršom prípade /CELL navyše nelozí do XDR cez RSX/. CELL maskuju nevyhnutné "cache miss" práve masívnou paralelizáciou každého procesu, preto aj často v ich prezentačkách vidíte, ako je spracovanie kódu jasne rýchlejšie, ak jeho 100% rozdelíte po 16.666% medzi 6xSPE, než aby to odtiahla iba jedna plne zaťažená SPE a pri prípadnom "cache misse" čumela do prázdna. Vivat Cézar.