0xDEADBEEF

RSS
««« »»»

EDGE, TRIPS a hon za vyšším ILP

26. 7. 2018

Tiskem proletěla zpráva, že Microsoft portoval Windows a Linux na vlastní experimentální CPU architekturu E2. Pročetl jsem pár publikací o architektuře a na pohled vypadá zajímavě. Tedy aspoň z technického pohledu je ambiciózní, jestli povede k reálnému produktu, si netroufám odhadovat.

To nejlepší na začátek: Microsoft se rozhodl vytvořit dataflow stroj. I když ne tak úplně, jde o omezený dataflow v technickém žargonu označovaný EDGE - Explicit data graph execution.

Článek An Evaluation of the TRIPS Computer System poskytne detaily o prvotní EDGE architektuře TRIPS, vyvíjené v akademickém prostředí. Její autoři se snažili dosáhnout vysokého ILP (instrukční paralelismus) v malém a úsporném procesoru a mít všechny výhody out-of-order bez křemíkové a energetické režie OoO.

CPU provádí bloky až 128 instrukcí bez skoků (kompilátor se je snaží nahradit predikací). Blok commitne atomicky jako celek a uvnitř se chová jako dataflow. Instrukce nezapisují výsledky do registrů, ale přímo je směřují závislým instrukcím. Pokud je blok dostatečně velký, může obsahovat velké množství instrukčního paralelismu (TRIPS jádro má 16 ALU) a díky jeho explicitní dataflow povaze je prováděn jako na OoO jádře. Závislosti mezi instrukcemi nemusí za běhu analyzovat procesor, ale jsou identifikovány už v procesoru.

Pro představu to může vypadat nějak takhle (hypotetický pseudokód):

i1: READ R1 i3     // přečte z globálního registru a data nasměruje instrukci i3
i2: READ R2 i3 i4  // to samé, ale pošle je instrukcím i3 a i4 najednou
i3: ADD i4         // až obdrží data, sečte je a výsledek pošle instrukci i4

Toto uspořádání řeší problémy, kterými trpěly obecné dataflow architektury. Ale jako obvykle komplikované větvení kódu se nekamarádí s ILP, protože vede k malým blokům instrukcí.

Paper Dynamic Vectorization in the E2 Dynamic Multicore Architecture představuje další pokrok již pod taktovkou Microsoftu. Jde o první nástřel z roku 2010, ale přesto ukazuje několik zajímavých inovací, jako například dynamické spojování několika fyzických jader do jednoho logického. Jedno fyzické jádro v gangu provádí nespekulativní kód a ty ostatní jsou použité pro spekulace. Po spojení jader tak vznikne agresivní superskalární OoO CPU. To dodá procesoru flexibilitu - na jedné straně v něm může běžet mnoho malých jader na druhé několik málo velice mocných jader pro jednovláknové programy.

Další chuťovkou je vektorový mód, kterého je dosaženo kombinací všech skalárních ALU v jádře. Nepotřebuje tedy novou sadu registrů nebo nové funkční jednotky, ale používá všechny existující hardwarové prostředky.

Všechno tohle EDGE šílenství je honem za stále ILP - TRIPS měl 16 ALU a výzkumníci dospěli k závěru, že ideální stroj s nekonečným množstvím funkčních jednotek a masivním instrukčním blokem by dokázal provádět desítky až stovky instrukcí každý takt. Jeden z prototypů E2 měl údajně mít 32 ALU.

Za ILP se dříve hnalo Itanium a všichni víme jak to s tímto dítkem Intelu a HP dopadlo. O podobný kousek se snaží i architektura Mill, ale jde cestou kompletně statického VLIW. Historie nedává příliš optimismu, že by to mohlo vyjít.

Jedním z mnoha problémů Itania byl fakt, že potřebovalo pokročilý kompilátor, který by dokázal ohnout kód tak, aby sedl na masivně paralelní spekulativní predikované srdce čipu. Stejně to budou potřeboval EDGE (a Mill) procesory. Pokud nebudou k dispozici, můžou skončit jako produkty s nevyužitým potenciálem.

Ale také nemusí, když končí moorův zákon, efektivita, i když v porovnání s exponenciálními zisky minulosti jen marginální, může hrát značnou roli.


K tématu:

píše k47 (@kaja47, k47)