Mlýnská architektura - Mill architecture

Mlýnská architektura
NávrhářIvan Godard
Mill Computing, Inc.
Bity64
DesignPásový stroj
OtevřenoNe
Registry
33

The Mlýn architektura[1] je román pásový stroj -na základě počítačová architektura pro všeobecné účely výpočetní. Vyvíjí jej zhruba od roku 2003 Ivan Godard a jeho startup Mill Computing, Inc., dříve pojmenovaný Out of the Box Computing, v East Palo Alto, Kalifornie.[2][3][4][5] Společnost Mill Computing tvrdí, že má „10násobný nárůst výkonu / výkonu v jednom vlákně oproti konvenčním mimo provoz superskalární architektury "ale" spouští stejné programy bez přepisování ".[6]

Společnost Mill Computing byla založena osobami, které dříve společně pracovaly na rodině procesory digitálního signálu (DSP), společnost Philips Multimediální.

Přístup

Návrháři tvrdí, že vylepšení výkonu a nákladů přicházejí přizpůsobením hluboce zřetězeného procesoru podobného DSP univerzálnímu kódu. Nebezpečí načasování z větví a Paměť o přístupu se říká, že není zpracován prostřednictvím spekulativní provedení, potrubí, a další pozdní vazba, ale staticky naplánovaná logika. Tvrdí se, že vylepšení výkonu a oblasti pocházejí z eliminace dynamického optimalizačního hardwaru: přejmenování registrů, řízení rizik mimo pořadí objednávek a dynamické mezipaměti optimalizace. Aby bylo možné tento hardware nahradit, je každý procesor Mill navržen tak, aby jeho chování načasování a přístupu do paměti bylo předvídatelné na jednotlivé cykly, takže veškeré plánování podléhá vysoceoptimalizace kompilátoru.

Velmi dlouhá instruktážní slova a instrukce split stream

Mill používá a velmi dlouhé instrukční slovo Kódování ve stylu (VLIW) pro umístění až 33 jednoduchých operací, a.k.a. opcodes širokými instrukčními slovy. Tato slova nejsou v paměti souvislá, ale jsou rozdělena do dvou balíčků instrukcí a umístěna do dvou datových toků. Každý stream je zpracováván většinou nezávislým dekodérem s vlastní mezipamětí instrukcí nejvyšší úrovně.

Pokyny jsou uspořádány v rozšířené základní bloky a dekódování pro obě poloviny začíná na stejné adrese uprostřed bloku. Protože jsou balíčky instrukcí dekódovány počítadlo programů v jednom proudu se zvyšuje a čítač v druhém dekodéru klesá [7]

Každý balíček instrukcí má záhlaví obsahující počet bajtů instrukce a offset svazků operačních kódů uvnitř. Mlýn používá 3 balíčky na instrukci. Každý operační kód ve svazku má pevnou délku bitu a řídí konkrétní prováděcí slot nebo kanál. Každý svazek má však proměnný počet skutečně zakódovaných instrukcí. Každý spouštěcí slot může začít spekulativně vykonávat své pole instrukcí ve vyrovnávací paměti svazku, a pokud se později zjistí, že je mimo skutečný balíček instrukcí, je slot zastaven a výsledky zahozeny.

Pokud jeden z dekodérů nemá ve svém toku žádné instrukce, může být vydáno zpoždění bez operace malou datovou položkou s pevným formátem umístěnou v zarovnávacím otvoru svazku instrukcí v opačném dekodéru. To pomáhá udržovat hustotu kódu snížením výskytu kódů bez provozu v kódu Mill.

Pás, systém evidence potrubí

Ivan Godard, designér společnosti Mill, cituje výzkum, který zjistil, že během provozu normy zaregistrovat stroj, hodnot uložených do registry procesorů: 6% není přístupných nikdy; 80%, jednou; a pouze 14%, více než jednou.

Mlýn tedy používá nové schéma adresování dočasných registrů, pás analogicky k a pásový dopravník. Operandy aritmetické logické jednotky (ALU) a další funkční jednotky mohou být převzaty z jakékoli polohy na pásu a výsledek výpočtu je upustil (uloženo) v přední poloze pásu, posunutím pásu uvolněte místo. Vzhledem k tomu, že pás má pevnou délku, poklesům vpředu odpovídají starší operandi padající ze zad; vytlačené operandy se stanou nepřístupnými a musí být výslovně uloženy, pokud jsou ještě potřeba pro pozdější práci. Většina operací instrukční sada pracujte pouze s daty na pásu, ne s datovými registry nebo hlavními paměťovými buňkami.[8]

Pro typický návod jako přidat, oba argumentové operandy pocházejí z explicitně pojmenovaných pozic na opasku a výsledek je vpředu upuštěn, připraven na další instrukci. Operace s více výsledky jednoduše snižují více hodnot vpředu pásu. Například, divize může produkovat a kvocient a a zbytek. Operace s přetečením mohou přinést výsledky dvojnásobné šířky. Většina pokynů k opasku je zakódována pouze jako provozní kód (operační kód ) a dvě polohy pásu, bez přidaných polí k určení registru výsledků, adresy paměti nebo doslovné konstanty. Toto kódování lze snadno rozšířit na bohatší operace s více než dvěma vstupy nebo více než jedním výsledkem. Konstantní operandy jsou zrušeny odděleně načíst okamžitě instrukce. Veškerý přístup k programovým proměnným v hlavní paměť s náhodným přístupem (RAM) je oddělena do samostatných zatížení nebo obchod instrukce obsahující jednu adresu paměti, nebo nějaký způsob, jak tuto adresu vypočítat z operandů pásu.

Všechny pásové stroje mají varianty načíst / uložit opcodes pro přístup lokální proměnné a hromada. Může to být posunutí, ukazatel na opasku nebo různé speciální základní registry. Podobně budou pokyny k větvení na adresu převzatou z pásu, spolu s větvemi vzhledem k počítadlu programu.

Časové adresování

Protože každý pokles výsledku přesune obsah předchozího pásu do pozdějších pozic ve frontě, daný operand neustále mění svou pozici (a tedy adresu) v důsledku pozdějšího provedení. Ve skutečnosti je přístup k operandu v poloze nula požadavkem na nejnovější hodnotu spadlou na opasek, zatímco (například) odkaz na pozici pět je na šestý poslední pokles. Adresy operandů pásu tedy odrážejí historii pásu v průběhu času. Tohle je dočasné adresování. Pro lidské programátory je těžké při psaní kódu sestavy pro pásový stroj sledovat obsah pásu, a tedy adresy operandů. Pro kompilátor je však snadné sledovat měnící se obsah a generovat správné adresy pozic v generovaném kódu.

Rozlijte a naplňte

Pás má pevnou délku a může být příliš krátký, aby držel všechny živé přechodné operandy, než budou odtlačeny od konce. Pokud je operand potřebný déle, než je jeho životnost, musí být uložen, zatímco je stále na pásu (rozlití), a později jej v případě potřeby znovu obnovit (doplnit). Tato situace je ekvivalentní nutnosti rozlití registrů do paměti, když dojde program v registrech na stroji s obecným registrem. Rozlité operandy lze zapisovat do paměti pomocí běžných pokynů k ukládání a obnovit pomocí pokynů k normálnímu načítání, nebo rozlití a vyplnění mohou používat speciální úložiště a související operace, které jsou rychlejší nebo nabízejí jiné výhody oproti načítání a ukládání.

Svoboda před nebezpečím

Operandy na opasku jsou jen pro čtení. Nové výsledky nepřepisují předchozí hodnoty. Pás je tedy a jedno přiřazení a je imunní vůči datová rizika to musí řešit moderní stroje mimo obecný registr mimo pořadí.

Kód kompaktního objektu

Hustý strojový kód byl velmi cenný v 60. letech, kdy byla hlavní paměť velmi nákladná a omezená, dokonce i na sálové počítače. Zpočátku se to stalo důležitým pro zpočátku malé vzpomínky na minipočítače, a pak mikroprocesory. Hustota je dnes pro aplikace pro chytrý telefon, nebo staženy do prohlížečů přes pomalé připojení k internetu a v pamět pouze pro čtení (ROM) pro vestavěné aplikace. Obecnější výhodou zvýšené hustoty je zlepšená účinnost mezipamětí a předběžného načítání instrukcí.

Pásové stroje mají menší instrukce než stroje založené na registrech, protože pro výsledky nepotřebují cílovou adresu. Toto uložení může významně ovlivnit formáty instrukcí s pevnou délkou, které běžně používají sílu dvou instrukčních šířek. Pokud existuje třicet dva adresovatelných prvků (registry na stroji s obecným registrem, polohy pásu na stroji s pásem), pak každá adresa prvku zabírá v instrukci pět bitů, což vyžaduje 15 bitů pro formát se třemi adresami obecného registru stroj, ale pouze 10 bitů používajících formát dvou adres pásového stroje. Protože bity jsou také potřebné pro operační kód a další informace v instrukci, šířka instrukce (omezená na dvě mocnosti) často určuje maximální počet adresovatelných prvků v návrhu. Typicky může instrukce pásového stroje podporovat kódování dvojnásobného počtu adresovatelných prvků ve srovnání se strojem obecného registru se stejnou šířkou instrukce. Podobné zisky existují v kódování instrukcí s proměnnou délkou.

Celkově je pásový strojový kód méně kompaktní než u stohovacích strojů, které nepoužívají žádné adresy operandů, ale často musí zavést pokyny pro manipulaci se stohem, které na pásovém stroji nejsou potřebné. Pokyny pro akumulátorové stroje nejsou vyplněny více poli registru, místo toho používají návratový zásobník a nepotřebují žádné další pokyny k odkazování na paměť.

Implementace

Zatímco pásový stroj představuje operandovou frontu jako model programu, architektura mlýna neimplementuje pás jako fyzickou frontu (posuvný registr ) v implementovaném hardwaru. Místo toho se jedná o sémantickou reprezentaci obtokové sítě přítomné ve většině rychlých počítačů, která zachycuje zřetězené přístupy k registrům a směruje je přímo k vykonávacím jednotkám, které potřebují výsledek. Počet registrů je přiměřeně malý: ty, které jsou potřebné k pipeline výstupu každé funkční jednotky, a jeden pro každou možnou položku pásu. Malý počet registrů snižuje velikost, výkon a složitost sítě pro přístup k registrům. Hodnoty živých dat jsou uchovávány v pohodlně adresovatelných fyzických zdrojích (jednotlivé registry, soubory registrů, statická paměť s náhodným přístupem (SRAM) nebo přesměrování operandů z funkčních jednotek) a obecně se nepohybují po dobu jejich životnosti pásu. Instrukční dekodér mapuje logické polohy pásu na fyzická místa. Mapování se aktualizuje, aby odráželo změny logické polohy vyplývající z nově vynechaných výsledků.

Patent USA 9513921  na pásu byla udělena v roce 2016.

Použití metadat

V závislosti na typu a úspěšnosti operací načítání také přiřazuje frézování metadata ke každé položce pásu, včetně stavu, šířky a počtu vektorizace. Operace probíhají u popsaného předmětu. Šířka a počet vektorů tedy nejsou součástí kódování instrukce. Pokud operace selže, jsou informace o selhání hašováno, a umístěny do cíle s metadaty pro použití při ladění.

The Mill také používá metadata k usnadnění spekulativního provádění a pipeline. Například pokud selže operace vektorového zatížení (např. Její část opustí hranici ochrany), budou tyto části této položky pásu označeny jako ne výsledek (NaR) v metadatech. To umožňuje spekulativně provedenému vektorovému kódu emulovat poruchové chování jednotlivých položek. Položky NaR vytvoří chybu, pouze pokud dojde k pokusu o jejich uložení nebo provedení jiného nespekulativního kódu. Pokud nebudou nikdy použity, nikdy nedojde k chybě.

Zdá se, že architektura Millu dokáže zmenšit velikost a složitost kódu zřetězené smyčky. Ve videu kanálu byla každá operace nutná ke zvládnutí speciální hodnoty operandu s názvem Žádný (nezaměňovat s ne číslo v formáty s plovoucí desetinnou čárkou ), který má pro tento účel speciální sémantiku: operace, kde alespoň jeden argument je a Žádný obecně produkují a Žádný jako výstup, a když a Žádný se pokusí uložit do paměti, která ukládá (nebo část ukládá vektory, kde jsou pouze některé prvky Žádný) je ignorován, takže toto místo v paměti zůstane nerušené. Tento speciální Žádný hodnota není implementována jako vyhrazený bitový vzor, ​​ale pomocí bitů metadat navíc, které jsou přidruženy ke každé položce pásu. V prvních několika iteracích zřetězené smyčky kód upustí skupinu Žádná na pásu pomocí speciální odejít operace, která sděluje CPU, kolik položek by mělo v tomto cyklu klesnout (to znamená, že mnoho skutečných položek spadne na pás z předchozích plánovaných operací, odejít kapky jen dost navíc Žádná přivést celkový počet kapek, které se cyklují, na požadované množství - jakmile je dosaženo ustáleného stavu, obvykle ne Žádná bude vygenerováno). Tímto způsobem má pás vždy očekávaný počet nových položek pro obvyklé tělo smyčky v ustáleném stavu, které má fungovat, s Žádná jedná jako zástupci pro data, která nejsou připravena. Vzhledem k tomu, že operace naplánované z předchozích iterací smyčky začínají klesat výsledky, pás proto spustí každou novou iteraci smyčky s více skutečnými datovými položkami a menším zástupným symbolem Žádná (pravidla řazení pro současné poklesy z operací s odlišnou latencí a odejít zajistit, aby se při nových iteracích objevily reálnější výsledky, vždy zaujímaly pozici, která měla a Žádný ve všech předchozích iteracích, aby každá operace mohla používat stejné číslo vstupního pásu pro všechny iterace). Mezitím se operace úložiště v těle smyčky přijímají Žádný hodnoty, dokud není dosaženo ustáleného stavu smyčky, a proto nemají žádný účinek, dokud nejsou k dispozici skutečné výsledky pro uložení. Tedy tělo smyčky, které zpracovává ustálený stav kódu kanálu, který zahrnuje vhodné odejít operace, funguje jako vlastní prologový kód. Zpracování konečných prvků prostřednictvím kanálu lze obecně dokončit tak, že tato stejná smyčka bude záměrně provádět další iterace, takže zbývající naplánované operace mají čas dokončit a uložit do paměti, protože téměř všechny operace nemají žádné vedlejší účinky (pokus o neplatnost čtení paměti pouze produkuje a NaR hodnota na pásu, která nezpůsobuje poruchu, pokud ji poté nepoužívá operace obchodu nebo řízení toku).

Aby pipeline vnořené smyčky, Mill zachází každou smyčku téměř jako volání podprogramu, s automatickým ukládáním a obnovováním příslušného stavu (pás a zápisník).

Fázované provedení Lockstep

Mill instrukce jsou fázované, přičemž až 33 operací v jediném slově instrukce je vydáno během tří hodinových cyklů. Fázování Mill může zachytit velmi krátké stopy a datové toky v jedné instrukci a tvrdí se, že vylepšuje dostupné paralelismus na úrovni instrukcí, zejména kolem regulačního toku. Každá fáze se překrývá s různými fázemi sousedních instrukcí. Fáze jsou také úzce svázány s uspořádáním svazku dekódování a umožňují, aby byl dekódovací hardware jednodušší a lemovaný potrubím.

V rámci instrukce dojde nejdříve k fázi čtení. Jedná se o operace, které nevyžadují žádné vstupy a vytvářejí výstup, který je k dispozici v příštím cyklu. Tyto hodnoty klesají přímo z proudu instrukcí nebo ze čtení statických bajtových adres zápisníku.

Další je operace nebo výpočetní fáze, která přijímá vstupy z pásu a klesá hodnoty na pásy, jako jsou zatížení nebo aritmetické operace. Výstupy z výpočetní fáze mohou trvat několik cyklů, než se odejdou, a spadnou na opasek s hardwarově vynucenou statickou latencí a řádem.

Poté fáze zapisovače přečte hodnotu z pásu a změní globální stav, ale nevytvoří hodnoty pásu. Zde se vyskytují obchody a pobočky, stejně jako zápisy na adresy zápisníku.

Existuje několik dalších koncepčních fází, které nejsou součástí zkosení 3 cyklů. Operace pick je ekvivalentní operátoru ternární if (?: ) a je implementován na řízení bypassu mezi fází výpočtu a zapisování a nepřidává žádné výpočetní zpoždění. Fáze volání je implementována na stejném místě a hardware ukládá / obnovuje stav tak, že z modelu programu nenastaly žádné cykly v volané, přestože do návratu mohlo uplynout mnoho skutečných cyklů.

Rodinné rysy

Ve vývoji je několik verzí procesoru Mill, které se rozprostírají Cín (low-end použití) až Zlato (vysoce výkonné použití). Společnost odhaduje, že dvoujádrové zlaté čipy implementovány s 28 nm litografie může pracovat na 1,2 GHz s typickým tepelný návrhový výkon (TDP) ze dne 28 wattů a výkon 79 miliard operací za sekundu.[7]

Různé verze Mill jsou určeny pro různé trhy a říká se, že mají různé architektury sady instrukcí, různý počet prováděcích jednotek, různá časování potrubí a tedy velmi odlišné binární soubory. Aby se tomu vyhovělo, musí kompilátoři emitovat a Specifikace který je poté znovu zkompilován do spustitelného binárního souboru recompilerem dodaným společností Mill Computing. Tímto způsobem je kód, který lze distribuovat, přizpůsoben specifikům potrubí přesného modelu, binárnímu kódování atd.

Vývoj tolika sad nástrojů a návrhů procesorů může být neprakticky nákladný. Ivan Godard uvedl, že Millův plán je vyvinout softwarové nástroje, které přijmou specifikaci pro procesor Mill, a poté napsat softwarové nástroje (assembler, kompilátor backend a simulátor) a Verilog popisující CPU. V ukázkovém videu Mill prohlašoval, že ukazuje rané verze softwaru, aby vytvořil assembler a simulátor. Převážná část kompilátoru je považována za port LLVM. Od roku 2014, je neúplný.

Reference

  1. ^ https://millcomputing.com/technology/docs/
  2. ^ „Hardware, úložiště a periferní zařízení ETTechnology: Přehled společnosti Mill Computing, Inc“. Bloomberg. Bloomberg L.P. 23. června 2016. Citováno 22. června 2016.
  3. ^ Kraft, Caleb (20. listopadu 2013). „The Mill: Ivan Godard vysvětluje nový revoluční procesor“. EETimes. A. Citováno 23. června 2016.
  4. ^ Godard, Ivan (29. května 2013). „Drinking from the firehose: How the Mill CPU decodes 30+ instructions per cycle“. Katedra elektrotechniky na Stanfordské univerzitě. Stanfordská Univerzita. Citováno 23. června 2016.
  5. ^ Benchoff, Brian (2. srpna 2013). „The Mill CPU Architecture“. Hackaday. Citováno 24. června 2016.
  6. ^ The Mill CPU Architecture, Specification (8 z 9). 2014-05-24. Citováno 2014-07-23.
  7. ^ A b Gwennap, Linley (5. srpna 2013). „Cesta z krabice“. Zpráva o mikroprocesoru: Watch Processor. Linley Group. Citováno 23. června 2016.
  8. ^ http://millcomputing.com/docs/belt/

externí odkazy