Programování Larrabee
Kapitoly článků
Softwarová stránka věci je neméně důležitá jako hardware. Ostatně to, co sráží na kolena obě konkurenční řešení, AMD Stream Computing (dříve Close-to-Metal) a nVidia CUDA, je dostatek apliakcí pro uživatele, jako třeba rychlý H.264 kompresní nástroj atd. Larrabee bude od začátku bezproblémově plně programovatelné. Dokonce se v systému bude umět netvářit jako grafická karta, ale prostě jako x86 procesor, a to díky ovladačům.
Využití jeho výkonu pak bude záviset na volbě programátorově. Buď napíše DirectX či OpenGL kód (tady tiše předpokládejme, že prostě bude psát herní engine), nebo napíše „klasickou“ C/C++ aplikaci a zkompiluje nějakým tím kompilátorem, ať již v MS Visual C++, nebo pomocí ICC (Intel) či GCC (GNU). Larrabee si poradí se vším, ostatně je to v principu „jen halda procesorů Pentium s řadou vylepšení“.
Z hlediska psaní aplikací (a zde u Larrabee se nám označení GPGPU pro tyto aplikace skutečně moc do krámu nehodí) tak nemusí programátoři vůbec nic řešit ani speciálně kompilovat, budou pracovat se stejnými nástroji, jaké používají nyní, nebudou se muset učit žádné nové finesy ani počítat s nějakými omezeními a změnami.
DirectX a OpenGL Larrabe taktéž umí, ale řeší ho celkem logicky pomocí takové „vychytávky“. Není zde žádná přímá nativní podpora formou pevně daného hardware v čipu, ale součástí kompletu jménem Larrabee bude softwarový renderer pro DirectX a OpenGL, který bude umět toto počítat na oněch procesorových jednotkách obsažených v Larrabee. Tedy v principu totéž, jako byste chtěli softwarově pouštět Crysis na Core 2 Duo, akorát že v případě Larrabee to sice také pojede na „speciálním x86 procesoru“, avšak za přispění jeho obrovské a paralelizované výpočetní síly v principu podobné klasickým GPU.
To mě tak napadá hříšná myšlenka, jakou verzi DirectX vlastně Larrabee umí? Inu takovou, jakou softwaroví inženýři Intelu napíšou v rámci softwarového rendereru. Upgrade na podporu nové verze DirectX v případě Larrabbe v principu nevyžaduje nové GPU, jako u ATI/nVidie, ale pouze napsání nového kódu v rámci rendereru. Jaké to ale bude v praxi, to ukáže až čas. Ostatně tento renderer bude softwarovou mezivrstvou a jako takový bude ve svém důsledku maličkou žabičkou na prameni způsobující snížení maximálního dosažitelného výkonu. Intel sazmořejmě pracuje na vysoce optimalizovaném kódu, dopad by měl být minimální.
Dalším bonusem bude, že vývojáři budou moci využít „hybridního“ psaní kódu. To jest, pokud budou chtít věc, která není součástí dané specifikace DirectX/OpenGL a není tak obsažena v softwarovém rendereru (tj. již ji napsali v Intelu), napíší ji prostě klasicky v C/C++ a Larrabee ji spočítá, jakoby se nechumelilo. Výsledný výkon je zatím zahalen tajemstvím, ostatně i softwarový tým má před sebou ještě rok usilovné práce a právě kvalita kódu softwarového rendereru bude rozhodující.
Michael Abrash
Jedním z klíčových lidí pracujících na projektu Larrabee byl/je Michael Abrash, známý autor programátorských publikací a špičkový programátor. Wikipedia o něm mimo jiné říká, že pracoval na vývoji her již počátkem 80. let, poté jej „zlanařil“ Microsoft, kde pracoval na grafice a assemblerovém kódu Windows NT 3.1, aby se pak vrátil do herního průmyslu a podílel se na vývoji prvního dílu Quake (což byl z technického hlediska revoluční počin). Poté se opět vrátil do Microsoftu, kde se zaměřil na výzkum přirozeného jazyka, poté se přesunul do Xbox týmu a následně opět Microsoft opustil a přešel do RAD Game Tools, kde spolupracoval na vývoji Pixomatic, softwarového rendereru schopného vykreslovat DirectX 7 hry jako třeba Unreal Tournament 2004. Už vidíte, jak svítá?
Michael Abrash, jeden ze špičkových expertů IT průmyslu, začal na projektu Larrabee spolupracovat jako konzultant, kdy pomáhal definovat instrukční sadu tohoto procesoru. Stávající nástavby nad x86 (tedy SSE až SSE4.x) byly vždy trhem kvitovány s povděkem, ale vždy se našlo něco, co tam chybělo, co Intel opomenul. U Larrabee bylo z hlediska instrukční sady potřeba ukočírovat dva donedávna odlišné tábory: klasické CPU instrukce a potřebu počítat grafiku, která má léty definovaná pravidla. Právě proto Intel potřeboval experty a vizionáře jako Abrashe, aby vše klaplo co nejlépe. Vznikl tak unikátní návrh ISA (instruction set architecture), na kterém se kromě Intelu podíleli i další experti z herního průmyslu.
Přitom v Larrabe je pouze zhruba 5 % instrukcí čistě grafických, proto ten flexibilní softwarový renderer. Vývojáři dospěli ke zjištění, že definovat specializované instrukce není ta nejlepší cesta a v řadě případů by to kompilátorům zlomilo vaz, neboť by nebyly schopny optimalizovat výsledný kód. Místo toho došlo na sadu univerzálně použitelných instrukcí, jejich praktické použití lze snadno přiohnout pro dané účely.
Kompilátor i instrukční sada přitom byly vyvíjeny souběžně, čímž se zajistila možnost neustálého průběžného testování výsledků, aby finální ISA návrh byl optimální.
Plně programovatelná grafika
To nás přivádí k otázce míry ovlivnitelnosti kódu. Opět budeme vařit trochu z vody, Larrabee jsme v ruce neměli, takže je to v rovině teoretických úvah.
Univerzalita ISA Larrabee spočívá v možnosti vrtat se v kódu daleko hlouběji, než je tomu při vývoji her současnou běžnou cestou. Larrabee, jak již bylo řečeno, když jsme hovořili o tom, že když to neumí D3D/OGL, napíše se to v C/C++, umí teoreticky téměř cokoli. To vrací vývojáře zpět do dob, kdy každou ptákovinu, která je dnes součástí specifikací DirectX a lze s ní pracovat jako s hotovou věcí, museli napsat sami od podlahy. Larrabee může vývojáře, pokud si to bude přát, vrátit do doby, kdy si bude moci napsat sám svůj engine i metody jeho renderingu zcela od podlahy a klidně opomenout tu práci, kterou Microsoft na DirectX odvedl, oprostit se od těchto nástrojů a vrátit se k softwarovému engine, kerý ale Larrabee díky svému softwarovému rendereru „spočítá hardwarově“. Je to samozřejmě pouze hypotéza, protože asi jedině herní studio s bandou schizofreniků závislých na LSD, by vyvíjelo hru náročnější cestou, která navíc nebude fungovat na GPU ATI/nVidia, ale myšlenka je to rozhodně zajímavá ;-).
Stejná myšlenka nás ale také přivádí ke zjištění, že pokud si budete chtít zahrát nějakou starou hru (namátkou třeba System Shock, který disponoval jedním z nejnáročnějších softwarových 3D engine), tak pokud byste ji hráli na Larrabee jakožto hlavním procesoru, tak principielně poběží „hardwarově“ (snad to píšu dostatečně jasně). Stejně tak kupříkladu nepotřebujete na PhysX nový GPGPU kód od nVidie, Larrabee může počítat původní CPU kód, je mu to vlastně celkem jedno.
Princip návrhu architektury Larrabee zkrátka dává vývojářům daleko volnější ruce. Mohou napsat cokoli budou chtít a pokud to nebude možné v DirectX nebo OpenGL, napíší to prostě „v Céčku“. Zatímco ATI a nVidia v posledních letech inovovali GPU tak, aby dokázali počítat to, co bylo výsadou CPU, Larrabee je CPU upravené tak, aby dokázalo počítat to, co bylo dosud výsadou GPU. Pohled do budoucna možná jednou řekne, že obě řešení se za pár let sejdou v jednom bodě. Ale každopádně se dá vtipně poznamenat, že zatímco nVidia se snaží poslední měsíce/roky vytvářet dojem, že CPU hraje podružnou roli a jeho úlohu výrazně efektivněji může zastou pit GPU, Intel s Larrabee hlásá pravý opak: nepotřebujeme nějaké GPU, stačí nám hromada malých CPU na jednom kousku křemíku :-).
V tom bodě bude jedno, jestli chcete pouštět DirectX hru, nebo komprimovat x264 video ve VirtualDubu, nebo renderovat grafiku pomocí raytracingu, nebo provádět složité filtrace 7.1 zvukové stopy. Budete mít k dispozici „něco“, co se systému bude tvářit jako výpočetní jednotka. Jak to v té době budeme nazývat, si netroufám odhadovat. Ale jakmile se dočkáme doby, kdy herní engine a jím tvořený svět nebude limitován žádnými omezeními DirectX, bude chybět již jen krůček k dokonalosti. Důvodem pro upgrade nebude potřeba podpory nové verze nějakého rozhraní, ale pouze požadavek na vyšší výkon. Nové instrukce budou prostě podporovány díky návrhu univerzální architektury tak, jak jsme si nyní objasnili. Ale zpět do reality.