Architektury VLIW M. Skrbek a I. Šimeček xsimecek@fit.cvut.cz Katedra počítačových systémů FIT České vysoké učení technické v Praze Ivan Šimeček, 2011 MI-PAP, LS2010/11, Predn.3 Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti
Architektury VLIW VLIW (Very Large Instruction Word) instrukční slova obsahují instrukce, které mohu být provedeny současně (paralelně). Více paralelně pracujících jednotek Explicitně vyjádřený paralelismus Široké instrukce rozdělené do několika subinstrukcí Pouze jedna skoková sub-instrukce na instrukci Vyhledávání paralelizmů v instrukcích (ILP, Instruction level parallelism) a jejich plánování do posloupností dlouhého slova VLIW provádí překladač.
Strukturální hazardy Vyplývají z omezeného počtu bran registrového pole Některé registry pouze vyhrazené dané jednotce Omezený počet registrů sdílený mezi jednotkami (případně sdílený jen mezi dvojicemi jednotek)
Řídící hazardy Pouze jedna skoková sub-instrukce na instrukci Výjimku může vyvolat kterákoliv z paralelně prováděných instrukcí Řešením problému výjimek je řídící spekulace
Datové hazardy Nutno vyloučit datové závislosti v rámci instrukce (lze programově) Datové závislosti v paměťových operacích (vzhledem k nepřímé adresaci nelze vyloučit programově) Řešením hazardů v paměťových operacích je datová spekulace
Druhy datových závislostí RAW (read-after-write) čtení po zápisu stejného registru mov r14 = r17; add r16 = r14, r15; WAW (write-after-write) zápis po zápisu mov r14 = r17; add r14 = r16, r15; WAR (write-after-read) zápis po čtení add r14 = r14, r15;
Itanium (Merced) Itanium bylo první 64-bit čip od Intelu používá EPIC (Explicitly Parallel Instruction Computing) instruction set. Obsahuje: 2 integer, 2 memory, 3 branch execution units, => 4 ALU instructions per clock. 2 floating point units. 10-stage instruction pipeline.
Itanium (Merced) Podmíněné instrukce 128 registrů (celočíselné, 64-bitů) registrový zásobník, rotace registrů 128 FP registrů 64 predikátových registrů 8 registrů pro adresy skoků Aplikační registry a registry pro měření výkonnosti Režimy IA-64 a IA-32
Itanium 128bit dlouhé instrukčního slovo 5bitů šablona (template). Zde zakódováno do kterých funkčních jednotek se budou vydávat obsahy jednotlivých slotů. 41 bitů pro subinstrukci (slot 1) 41 bitů pro subinstrukci (slot 2) 41 bitů pro subinstrukci (slot 3) Jednotný formát instrukce, jediná výjimka při načítání 64bit konstanty
Registrový zásobník Pro urychlení volání fcí Vstup a výstupy nejsou ukládány na zásobník, ale do registrů Ale nikoliv fixně (vhodné pro 1úrovňové volání) Pole registrů je bráno jako celek a pomocí jednoho z nich je v něm implementován zásobník
Paralelní provádění instrukcí Každý slot pojme jednu instrukci Skupina jedna nebo více instrukcí provedených paralelně V rámci skupiny musí být jedno v jakém pořadí se instrukce dokončí V rámci skupiny jsou zakázány datové závislosti typu WAW, a RAW
Predikátové registry 64 jednobitových registrů Označené p0-p63 p0 je vždy 1 Nastavovány porovnávacími instrukcemi Většinu instrukcí je možno podmínit těmito registry
Porovnávací instrukce Př. cmp.eq p4,p6=r1,r6 eq, ne; lt, le, gt, ge; ltu, leu, gtu, geu Kde u značí operaci bez znaménka Ukázka překladu: if (r7==r8) r3=r4 + r5; else r8 = r2 + r6; cmp.eq p3, p4 = r7, r8;; (p3) add r3 = r4, r5; (p4) add r8 = r2, r6;; Samotné porovnání lze také podmínit Např. (p5) cmp.eq p3, p4 = r7, r8;;
Porovnávací instrukce Kód v C/C++ if (x == 4) z = 9 else z = 0; Itanium řešení Compare x to 4 and store result in a predicate bit (we'll call it A) If A==1; z = 9 If A==0; z = 0
Řídící spekulace NaT (Not a Thing) = indikuje výjimku Je to buď 65. bit gr registru nebo hodnota NaTVal uložená v FP registru Instrukce jako add, sub apod. propagují NaT hodnotu NaT bitu do cílového registru Instrukce jako fadd, fsub apod. propagují hodnotu NaTVal do cílového registru Instrukce chk (check) kontroluje NaT bit a pokud je nastaven provede skok na recovery code.
Datová spekulace ALAT = Advanced Load Address Table možnost použití spekulativního nahrání dat (advanced load) Adresa a cílový registr se uloží jako další záznam do ALAT Pokud je adresa ve STORE instrukci totožná s adresou v některé položce v ALAT, je odpovídající adresa vymazána (zneplatněna) Recovery code se vyvolá v případě, že nebyla nalezena položka v ALAT
Itanium Indirect Access to Register mov r1=2 mov r2=4;; mov pmd[r1]=r11 mov pmd[r2]=r12
Itanium a VLIW shrnutí Snížení počtu podmíněných skoků = pomocí predikátových registrů Zvýšení počtu registrů (proti x86) Snížení počtu zásobníkových operací = pomocí registrového zásobníku VLIW = snížení požadavků na Dekóder = jednotný formát instrukcí Out of order jednotka = díky kompilátoru