share:truealiases:- Mikroarchitektura superskalárních CPU
complete:true
BI-PI.21-3
Mikroarchitektura superskalárních procesorů
Instrukční paralelismus
Vykonávání instrukcí mimo pořadí
Přejmenování registrů (Tomasulův algoritmus)
Statické a dynamické predikce skoků
Spekulativní provádění instrukcí.
Mikroarchitektura superskalárních procesorů
Představuje kombinaci časového a prostorového paralelismu
EX stupeň obsahuje více paralelních jednotek
Zpracovává víc instrukcí napříč stupni zřetězení
Načte několik instrukcí najednou, několik dekóduje a vykonává
Počet paralelních jednotek = Šířka zřetězení
Propustnost superskalárního CPU je > 1
Závislosti mezi instrukcemi
Brání paralelnímu zpracování
Nutné eliminovat nebo obejít
Typy závislostí
Datová
Instrukce odkazuje na data předchozí instrukce
Řídící
Vykonání instrukce je ovlivněno předchozí instrukcí
Spekulativní vykonávání instrukcí
Strukturální závislost
Víc instrukcí chce jednu část procesoru
Chce to více HW zdrojů
Nedostupný zdroj zdržuje instrukce
Unifikované instrukční zřetězení
Každá fáze musí podporovat všechny instrukce (neefektivní)
Rozdílné instrukce požadují rozdílné zpracování
Každá instrukce má jinou latenci
Nepoužívá se!
snaha dosahovat nejvyšší propustnosti zpracovaných instrukcí
tok zpracovávaných dat uvnitř procesoru
tok dat z/do paměti
tok instrukcí
cílem maximalizovat, tři hlavní typy instrukcí
ALU instrukce
Load/Store instrukce
Skokové/řídící instrukce
Instrukční paralelismus
ILP Instruction Level Paralelism
Provádění po sobě jdoucích instrukcí se může částečně nebo plně překrývat
Částečné překrývání
HW prostředek je využit hned po uvolnění
Instrukce odděleny v čase, je jich rozpracováno víc současně
časový paralelismus -> instrukční zřetězení
Úplné překrývání instrukcí
Instrukce v daný čas mohou využít stejný HW
Paralelismus v prostoru
Instrukce jsou zpracovány paralelně
Zvyšuje instrukce za čas
Vykonávání instrukcí mimo pořadí
Statická superskalární mikroarchitektura
Paralelně mohou být prováděny pouze po sobě jdoucí instrukce
Závislosti vedou k pozastavení vykonávání (STALL)
Rigid pipeline
Dynamická superskalární mikroarchitektura
Paralelně jsou vykonávané instrukce připravené k vykonání
bez ohledu na jejich pořadí
Instrukce se mohou předběhnout
Každá paralelní větev je specializovaná na určitý typ instrukcí
Nezávislé instrukce v jednotlivých větvích nepozastavují jedna druhou
Závislosti musí být vyřešeny před rozdělením na větve
Logické stupně
Instrukční a dekodovací fronta
Fronta načtených instrukcí
Mohou být částečně dekodované
Rozřazovací fronta
Instrukce v ní vyčkávají na volné execute unity
Přicháze in order
Odcházejí out of order
Rezervační stanice
Dedikovaná fronta instrukcí připravených k vykonání v dané jednotce
Řadící fronta
Zpětně řadí vykonané instrukce do správného pořadí
Nutná pro přerušení
Zápisová fronta
Fronta mezi execute units a cache
Přejmenování registrů (Tomasulův algoritmus)
Umožňuje eliminovat falešné datové závislosti (opětovné použití registrů)
Využívá sadu skrytých registrů RR1 až RRn
Algoritmus
Načti instrukci
Jsou vstupní reg přejmenovány?
Ano: použij nová jména
Ne : použij architekturní registry
Zapisuje instrukce do registru?
Ano: Přejmenuj tento registr
opakuj
Architektonické registry doplníme o další fyzické registry RRset
Každý registr ARCH doplníme o
Bit platnosti
Ukazatel RRn do RRSET
Finished
Rozšířen pro modifikaci architekturálních registrů v původním programovém pořadí
ROB (Reorder Buffer)
Když instrukce dokončí vykonávání, aktualizuj RRn a ROB nastav na finished
Pokud je instrukce finished a je nejstarší v ROB, je dokončená
Může změnit arch stav procesoru
Jinak zůstává v ROB a čeká na dokončení předchůdce
Alternativou pro maximální stupeň paralelismu je data-flow model
Neřídí se pořadím instrukcí v programu, ale dostupností dat
pokud má instrukce připravené svoje operandy, může být vykonána
jinak má závislost na některé předchozí a čeká
po přejmenování se sleduje dostupnost operandů, při dodržení RAW korektní přístup
rezervační
pozastaveny dokud nemají operandy
Statické a dynamické predikce skoků
Predikujeme cíl větvení
Statická predikce - 70..80%
Pro danou skokovou instrukci je výsledek vždy stejný
typy
BTFNT (Backwards Taken, Forwards Not Taken)
dopředný skok neskočí, zpětný ano
typicky cyklus
Heuristiky analyzující program během kompilace
výsledky se předávají jako tipy zakódované ve skokových instrukcích
nutná podpora ISA
profilace
vykonání s různými vstupy
nutná podpora ISA
dynamická predikce
80..98%
základní smithův prediktor
obsahuje několik k-bitových čítačů
popis množinou konečných automatů, stavy představují predikce a hrany jsou skutečné skoky
tvořen automaty, bitů k indexaci
různé skokové instrukce se mohou mapovat do stejného automatu
neutrální interference - nevadí, že se namapují různé skokové instrukce
negativní interference
namapuje se různé skokové instrukce a a dochází k negativnímu ovlivňování
index selection prediktor
používá konkatenaci pro vytvoření indexu do PHT
vhodný pro v sérii se opakující skokové instrukce, špatný pro rozpoznání vzorů
Spekulativní provádění instrukcí.
Prediktory umožňují spekulativně předzpracovat instrukce
Odhadují chování skoku a jeho cíl
spekulativní načítání, dekódování a vykonávání instrukcí
provádění větve programu kterou procesor odhadl jako tu která bude vykonána
spekulativní provádění instrukcí - predikce chování a provedení
validace spekulativního provádění/zotavení - ověření správnosti predikce, případné ukončení nesprávné větve a zahájení výběru instrukcí ze správné větve
všechny instrukce jsou označovány unikátním identifikátorem
identifikátor putuje s každou instrukcí, identifikuje spekulativní větev programu
ukládány adresy všech prováděných instrukcí
nutné pro zotavení v případě chybné predikce
validace/zotavení nastává v okamžiku známého skutečného směru skoku
správná predikce
identifikátor je zrušen a všechny jím označené instrukce jsou potvrzeny (mohou být dokončeny)