Proudové zpracování instrukcí II. Hazardy v proudovém zpracování Proudové zpracování FP instrukcí Ing. Miloš Bečvář
Architektura počítačů
Osnova přednášky ° Implementace pozastavení v pipeline ° Datové hazardy a jejich řešení (pozastavení, forwarding) ° Řídicí hazardy – implementace instrukce podmíněného skoku (zpožděný a rušící skok) ° Strukturní hazardy - příklady ° Proudové zpracování FP instrukcí ° Komplexní hazardy v FP pipeline a jejich řešení
Architektura počítačů
Ideální proudové zpracování instrukcí Pipeline produces result every clock cycle
Latency to fill pipeline
instr1 instr.2 instr.3 instr.4 instr.5
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
CPI pipeline_ideal = 1
Architektura počítačů
WB
Příklad narušení sémantiky SUB přečte starou hodnotu R1
ADD R1,R2,R3
IF
SUB R4,R1,R3
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
Programátor očekává toto provádění:
ADD R1,R2,R3
SUB R4,R1,R3
IF
ID
EX
MEM
ADD zapíše novou hodnotu R1
Write
WB
Read IF
ID
EX
MEM
WB
Čtení R1 instr. SUB má být provedeno po zápisu R1 instrukcí ADD. V pipeline toto pořadí není dodrženo.Tuto situaci nazýváme Read after Write (RAW) hazard. Architektura počítačů
Řešení datového hazardu pomocí pozastavení ADD zapisuje novou hodnotu do R1
SUB čte starou hodnotu R1
ADD R1,R2,R3
IF
SUB R4,R1,R3
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
Řešení: Pozastavení pipeline v ID dokud není hazard odstraněn.
ADD R1,R2,R3 SUB R4,R1,R3
IF
ID IF
EX
MEM
WB
ID stall ID stall
ID
EX
MEM
WB
SUB čeká v ID dokud ADD nezapíše novou hodnotu do R1 Pozastavení = pipeline stall, pipeline bubble insertion, pipeline interlock Architektura počítačů
Reálné proudové zpracování – pozastavení 1 takt
instr1
instr.2
instr.3
1
2
3
4
5
IF
ID
EX
MEM
WB
IF
ID stall
ID
IF stall
IF
instr.4
Žádná instrukce nenačtena v taktu č. 3
8
6
7
EX
MEM
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
9
WB
Žádná instrukce nedokončena v taktu č.6
CPI pipeline_real = CPIpipeline_ideal + Stalls Per Instruction
Architektura počítačů
Zrychlení pomocí proudového zpracování (S je počet stupňů pipeline) Tcpu_no_pipeline Speedup =
Tcpu_pipeline
=
IC * CPIno_pipeline * Tclk_no_pipeline IC * CPIpipeline_real * Tclk_pipe
CPIno_pipeline = 1; CPIpipeline_real = CPIpipeline_ideal + SPI Stalls per Instruction
1 Speedup =
CPIpipeline_ideal + SPI
*
S Speedup =
CPIpipeline_ideal + SPI
Tclk_no_pipeline Tclk_pipe
=
S 1 + SPI
Cílem je minimalizace SPI => maximalizace zrychlení. Architektura počítačů
Jiný diagram proudového zpracování Clock cycle 1 2 3 4 5 Clock cycle 1 2 3 4 5 6 7
IF stage
ID stage
EX stage
MEM stage
WB stage
Instr1 Instr2 Instr3 Instr4 Instr5
Instr0 Instr1 Instr2 Instr3 Instr4
Instr-1 Instr0 Instr1 Instr2 Instr3
Instr-2 Instr-1 Instr0 Instr1 Instr2
Instr-3 Instr-2 Instr-1 Instr0 Instr1
IF stage
ID stage
EX stage
MEM stage
WB stage
Instr1 Instr2 Instr3 Instr3 Instr4 Instr5 Instr6
Instr0 Instr1 Instr2 Instr2 Instr3 Instr4 Instr5
Instr-1 Instr0 Instr1 NOP Instr2 Instr3 Instr4
Instr-2 Instr-1 Instr0 Instr1 NOP Instr2 Instr3
Instr-3 Instr-2 Instr-1 Instr0 Instr1 NOP Instr2
Instr2 je pozastavena ve stupni ID Architektura počítačů
Způsob implementace pozastavení pipeline Stage 1
Stage 2
Stage 3
Stage 4
Comb. Log. S1
Comb. Log. S2
Comb. Log. S3
Comb. Log. S4
Stall occurred here
Recycle all stages before the stall source until stall is resolved
Continue flow through the pipeline Insert NOP in the following stage until stall is resolved
Architektura počítačů
Proč pozastavujeme pipeline ? - Pipeline musí být pozastavována k zabránění hazardům. Hazard je potenciální narušení sémantiky vykonávání programu. ° Datové hazardy: narušení datových nebo jmenných závislostí ° Řídicí hazardy: narušení řídicích závislostí ° Strukturní hazardy: důsledek neúplné replikace prostředků v pipeline, kolize na sdílených prostředcích (paměti, porty reg. polí, funkční jednotky ) Všimněte si, že datové a řídicí hazardy jsou důsledkem konfliktu mezi sémantikou programu a pipeliningem. Strukturní hazardy jsou důsledkem nedokonalého pipeliningu.
CPI = 1 + SPIdata + SPIcontrol + SPIstruct Architektura počítačů
Datové a jmenné závislosti – vlastnosti programu InstrI Variable1, Variable2, Variable3 (True) Data Dependency (Skutečná) datová závislost
.... InstrJ Variable4, Variable5, Variable1 InstrI Variable1, Variable2, Variable3
Output Dependency Výstupní závislost
.... InstrJ Variable1, Variable4, Variable5 InstrI Variable3, Variable2, Variable1
Antidependency Protizávislost
.... InstrJ Variable1, Variable4, Variable5
Name (False) Dependencies = Output Dependency + Antidependency Jmenné (Falešné) Závislosti = Výstupní závislost + Protizávislost Architektura počítačů
Datové závislosti – typické sekvence v programu InstrI Variable1, Variable2, Variable3 ....
Data Dependency
InstrJ Variable5, Variable4, Variable1 Output …. Antidependency Dependency
Typická „define-use-reuse“ sekvence pro Variable1
InstrK Variable1, Variable6, Variable7 InstrI Variable1, Variable2, Variable3 Output .... Dependency InstrJ Variable1, Variable4, Variable5
Redundantní výpočet Variable1 – typický postranní efekt agresivní optimalizace programu.
Závislosti existují mezi proměnnými v registrech (snadno rozpoznatelné) a také proměnnými v paměti (více obtížné pro rozpoznání). Architektura počítačů
Datové hazardy – klasifikace Datové hazardy jsou potenciální narušení datových a jmenných závislostí v programu při proudovém zpracování. Nechť i < j jsou 2 celá čísla
(Instrukce i je dříve v programu než instr. j)
° RAW (Read After Write) hazard : 1. Mezi i a j je skutečná datová závislost 2. Instrukce j chce číst novou hodnotu dříve než ji instrukce i může zapsat. ° WAR (Write After Read) hazard : 1. Mezi i a j je protizávislost 2. Instrukce j chce zapsat výsledek dříve než instrukce i přečte předchozí hodnotu. ° WAW (Write After Write) hazard : 1. Mezi i a j je výstupní závislost 2. Instrukce j chce to zapsat výsledek dříve než instrukce i Existence hazardu závisí na - vzdálenosti mezi i a j vzhledem k latencím v pipeline - pořadí ve kterém instrukce čtou a zapisují operandy vzhledem k jejich programovému pořadí. Pouze RAW hazardy mohou nastat v naší celočíselné pipeline. Proč ? Architektura počítačů
Pouze RAW hazardy hrozí v celočíselném DLX Proměnné v registrech All instructions
1.
2.
3.
4.
5.
IF
ID
EX
MEM
WB
read
w rite
Všechny instrukce jsou vykonávány v programovém pořadí. Čtení registrů nastává ve 2. taktu, zápis do registru v 5. taktu. Nechť j>i: Instrukce j je načtena v taktu j, instrukce i v taktu i RAW hazard ? Instrukce j čte v taktu j+1, instrukce i zapisuje v taktu i+4 RAW hazard hrozí pokud j+1
ji+4 WAR hazard ? Instrukce j zapisuje v taktu j+4, Instrukce i čte v taktu i+1 WAW hazard nemůže nastat neboť platí j+4>i+1
Podobně lze dokázat že RAW, WAR ani WAW hazardy nehrozí mezi load a store instrukcemi. Architektura počítačů
Ne každá datová závislost vede na hazard ! ADD zapisuje novou hodnotu do R1
SUB čte starou hodnotu R1
ADD R1,R2,R3
IF
SUB R4,R1,R3
ADD R1,R2,R3
OR R5,R2,R3
AND R6,R2,R6
SUB R4,R1,R3
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
Závislost a hazard WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
Závislost ale ne hazard
WB
Překladač může vložit nezávislé instrukce a odstranit tak hazard ! Architektura počítačů
Příklad RAW datového hazardu 1) Řešeno pozastavením pipeline:
ADD R1,R2,R3
IF
ID IF
SUB R4,R1,R3
EX
MEM
ID stall ID stall
WB ID
EX
MEM
WB
2) Lepší řešení – (přeposílání) forwarding (též zvaný register bypassing)
ADD R1,R2,R3
IF
ID
EX
MEM
WB
Forward the new value for R1 SUB R4,R1,R3
IF
ID
EX
MEM
WB
Výsledek instrukce ADD vypočítaný ve stupni EX je ihned forwardován následující instrukci => není třeba pozastavovat pipeline !
Architektura počítačů
Forwarding – princip HW řešení ID stage
IF stage Instruction Memory
MEM stage
Comb. Logic
Comb Logic
Instruction
EX stage
Comb. Logic
WB stage Comb. Logic
jump_now MEM/EX
Addr
zero Rw
busW PC
Imm16 Disp26
jump_now
Ra Rb
32 32-bit Registers
Ext
busA
ALU busB
Forwarding ctrl
Imm32
Addr Next Addr. Logic
PC
Jump/Branch Target Address
Data
PC+4
Add
Memory
Target Address Calculation WB/EX
Výsledky jsou přeposílány pomocí MEM/EX a WB/EX zpětné cesty. Architektura počítačů
RAW hazard s nutností pozastavení
LW R1, (R2) +5 SUB R4,R1, R3
IF
ID
EX
MEM
WB
Forwarding zpět v čase ? IF
ID
SUB potřebuje data
EX
MEM
WB
Data jsou k dispozici z paměti
Data od instrukce LOAD jsou k dispozici na konci stupně MEM, ale jsou třeba na začátku stupně EX násl. instrukce => nelze přeposílat zpátky v čase.
Architektura počítačů
RAW hazard s nutností pozastavení (pokr.)
LW R1,(R2)+5
IF
ID
EX
MEM
WB Forward
SUB R4, R1,R3
IF
IDstall
ID
EX
MEM
WB
Tomuto zpoždění se říká LOAD - USE delay. Je typická pro RISC pipeline. Toto zpoždění lze eliminovat vložením nezávislé instrukce mezi LOAD a USE instrukce. Jde o typickou úlohu optimalizujícího překladače.
Architektura počítačů
Vliv datových hazardů na CPI a) Celočíselná pipeline s pozastavováním Nechť i je pozice instrukce produkující výsledek, j je pozice instrukce spotřebovávající výsledek: j
i+1 i+2
2 stalls 1 stall
P Dyn. četnost (neoptimalizovaný program) 40 % 20 %
i+3 a více
0 stals
40 %
Typ instrukce
Počet taktů pozastavení
F (Dynamická četnost)
ALU Load
48 % 26 %
Store Branch (control)
13 % 13 %
SPIdata = (Falu + Fload)*(p1*2 +p2*1) SPIdata=(0,48 + 0,26)*(0,4*2 +0,2*1) SPIdata=0,74 CPIpipe_real >=1,74 !
Architektura počítačů
Vliv datových hazardů na CPI b) Celočíselná pipeline s forwardingem Nechť i je pozice instrukce Load , j je pozice závislé instrukce: j i+1 i+2 a více
Typ instrukce
Počet taktů pozastavení 1 stall 0 stalls
F (Dynamická frekvence)
P Dyn. četnost (neoptim. prog.) 40 % 60 %
SPIdata = Fload*p1*1
ALU Load
48 % 26 %
SPIdata= 0,26*0,4*1
Store Branch (control)
13 % 13 %
SPIdata=0,104 CPIpipe_real >=1,104 !
Tclk ovšem může být ovlivněna forwardingem negativně (vzrůst). Architektura počítačů
Řídící hazard – instrukce podm. skoku ID stage
IF stage Instruction Memory
MEM stage
Comb. Logic
Comb Logic
Instruction
EX stage
Comb. Logic
WB stage Comb. Logic
jump_now MEM/EX
Addr
zero Rw
busW PC
Imm16 Disp26
jump_now
Ra Rb
32 32-bit Registers
Ext
busA
ALU busB
Condition Evaluation
Imm32
Addr Next Addr. Logic
PC
Jump/Branch Target Address
Data
PC+4
Add
Memory
Target Address Calculation WB/EX
Podmínka vyhodnocena ve stupni EX, PC změněno ve stupni MEM. Architektura počítačů
Řešení řídicího hazardu pomocí pozastavení BEQZ R3, M1 instr.2
IF
ID
EX
IF stall IF stall
MEM
WB
IF stall
instr.3 instr.4 M1: ADD R4,R6,R7
vyhodnocení IF podmínky & výpočet PC nového PC změněno
ID
EX
MEM
WB
Toto řešení znamená 3 takty pozastavení (3 stalls) na každou prováděnou instrukci podmíněného skoku (13 %). SPIcontrol= 0,13*3 = 0,39 ! Latence skoku – doba mezi IF skoku a určením správného PC: Latence skoku =cpibranch = 4 takty SPIcontrol = Branch Frequency * (cpibranch - 1) Architektura počítačů
Podmíněný skok s vypláchnutím pipeline
BEQZ R3, M1 instr.2 instr.3 instr.4 M1: ADD R4,R6,R7
IF
ID
EX
MEM
IF
ID
EX
IF
ID
WB
NOP
IF condition IF resolution & address PC calculation changed
Cancelled (flushed) Instructions
NOP
NOP ID
EX
MEM
WB
Instrukce 2,3 a 4 jsou vypláchnuty pouze v případě provedení skoku 3 ztracené takty (bubliny v pipeline) pouze pro každý provedený skok.
SPIcontrol= Branch Frequency *Taken Frequency * Branch Penalty = 0.13*0.67*3 = 0.26 Architektura počítačů
Vylepšení implementace podmíněného skoku ° Vylepšení skoku má dvě části: - Vyhodnocení podmínky dříve - Výpočet cílové adresy a změna PC dříve ° Možná implementace - Přidání logiky pro vyhodnocení podmínky do stupně ID - Výpočet cílové adresy do stupně ID ° Výsledný vliv na CPI : 1 pozastavení místo 3 => SPI = 0.0871 ° Všimněte si ovšem, že modifikovaný skok nemůže využít forwardingu do stupně EX =>nárůst SPIdata ° Také Tclk může vzrůst v důsledku komplexnější logiky v ID
Architektura počítačů
Implementace vylepšeného podm. skoku (v ID) ID stage
IF stage Instruction Memory
Comb Logic
Instruction Imm16 Disp26
Addr
EX stage Comb. Logic
MEM stage Comb. Logic
MEM/EX Rw
busW
Ra Rb
32 32-bit Registers
PC
busA
ALU busB
jump_now
Imm32
Ext
Addr Next Addr. Logic
PC
Condition Evaluation Logic PC+4
Add Jump/Branch Target Address
Target Address WB/EX Calculation
Architektura počítačů
Data Memory
WB stage Comb. Logic
Vylepšený podmíněný skok BEQZ R3, M1 instr.2
IF
ID
EX
MEM
IF
M1: ADD R4,R6,R7
WB
Cancelled (flushed) Instruction
NOP
IF
ID
EX
MEM
WB
condition evaluation & address calculation, PC changed
Instrukce za skokem je zrušena pokud je skok proveden (angl. taken) jinak je dokončena. SPIcontrol= Branch Frequency *Taken Frequency * Branch Penalty = 0.13*0.67*1 = 0.0871 Není škoda instrukci za skokem zrušit, když už byla načtena ? Architektura počítačů
Dále vylepšený skok – Zpožděný skok BEQZD R3, M1 instr.2
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
M1: ADD R4,R6,R7
Branch Delay Slot WB
condition evaluation & address calculation
U normálního (nezpožděného skoku) je instrukce v delay slotu zrušena, pokud dojde ke skoku (změně PC). U RISC je výhodné zavést tzv. zpožděný skok (BEQZD / BNEZD) s odlišnou sémantikou. Instrukce následující za skokem (v tzv. branch delay slotu) je vždy provedena. SPIcontrol = Branch Frequency * Branch Penalty Pokud instrukce v delay slotu udělá nějaký užitečný výpočet, branch penalty je redukována na nulu. Architektura počítačů
Které instrukce může překladač umístit do Branch Delay Slotu ? ADD R1, R2, R3
Řešení č.1:
BEQZD R4, LAB
Instrukce před skokem
BEQZD R4, LAB ADD R1, R2, R3
Delay Slot
LAB:
LAB:
° Toto je bezpečné řešení. ° Branch Penalty je redukována na nulu. ° Podmíněný skok nesmí (datově) záviset na instrukci umístěné do delay slotu. Architektura počítačů
Které instrukce může překladač umístit do Branch Delay Slotu (2) ? ADD R7, R2, R3
ADD R7, R2, R3 BEQZD R7, LAB Delay Slot
Řešení č.2:
BEQZD R7, LAB
Z cíle skoku
SUB R4, R5, R7
OR R5, R6, R7
OR R5, R6, R7
……
……
LAB: SUB R4, R5, R7
Řešení č.3: Ze sekvenčního pokračování
LAB: …… ADD R7, R2, R3 BEQZD R7, LAB OR R5, R6, R7 …… LAB: SUB R4, R5, R7
Architektura počítačů
Které instrukce může překladač umístit do Branch Delay Slotu (3) ? º Branch Penalty je u řešení 2 a 3 redukována pouze pokud program pokračuje v očekávané cestě ze které pochází instrukce v delay slotu. º Řešení č.2 a 3 jsou legální (tj. bezpečná) pouze pokud instrukce v delay slotu může být bezpečně provedena když skok vede opačným směrem než je cesta ze které pochází instrukce v delay slotu. º Instrukce v branch delay slotu nesmí způsobit výjimku je-li provedena v cestě, kdy původně provedena nebyla. – typicky problém Load, Store instrukcí (Virtual Memory Protection Fault) Poznámka: Některé RISC procesory zavádí třetí typ instrukce skoku tzv. canceling branch (rušící skok). Instrukce za rušícím skokem je provedena pouze pokud se skáče. Instrukce za rušícím skokem je zrušena v případě sekvenčního pokračování. To umožňuje umísťovat za rušící skok instrukce z cíle skoku. Architektura počítačů
Zpožděné skoky - shrnutí Některé RISC procesory mají až 3 typy podm. skoků: º Zpožděný skok – použit pokud instrukce v delay slotu může být provedena bez ohledu na vykonání skoku. º Normální skok – Instrukce v delay slotu je zrušena pokud je skok proveden (tj. když se skáče) º Rušící skok – Instrukce v delay slotu je zrušena pokud skok není proveden (tj. když se pokračuje sekvenčně) º Zpožděné skoky fungují velmi dobře pro jednoduchou pipeline, ale komplikují řešení výjimek (přerušení) a superskalární provádění instrukcí ve výkonnějších modelech pipeline. Architektura počítačů
Způsoby implementace skoku – shrnutí Předpokládejme, že 13 % instrukcí jsou skoky, - 67 % skoků je provedeno (skáče), - 33 % skoků sekvenčně pokračuje. Sémantika skoku
Vyhodnocení podmínky / změna PC
Instrukce za skokem
SPIcontrol
normální
EX / MEM
0,13 * 3 = 0,39
normální
EX / MEM
normální
ID / ID
Pozastavena v IF 3 takty 3 instrukce vypláchnuty, je-li skok proveden 1 instrukce vypláchnuta, je-li skok proveden
zpožděný
ID / ID
1 instrukce za skokem vždy provedena
0,13 * (1 – FD) = 0,065 FD = 50 %
0,13 * 0,67 * 3 = 0,26 0,13 * 0,67 * 1 = 0,087
FD … četnost provedení užitečné instrukce v delay slotu Poznámka: první řešení se reálně nepoužívá, ostatní ano. Architektura počítačů
Strukturní hazardy ° Strukturní hazardy: důsledek neúplné replikace prostředků v pipeline, kolize na sdílených prostředcích (paměti, porty reg. polí, funkční jednotky ) ° V našem celočíselném DLX nejsou žádné sdílené prostředky mezi stupni pipeline a proto SPIstruct = 0 ° V reálných procesorech mohou takové prostředky být (v důsledku šetření plochou čipu nebo praktičnosti implementace) a díky tomu vznikají strukturní hazardy – strukturní pozastavování (structural stalls)
Architektura počítačů
Příklad strukturního hazardu – společná paměť dat a instr. Load instr.2 instr.3 Stall instr.4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
Lost instruction slot (Pipeline buble)
IF
ID
EX
MEM
WB
Instrukce č. 4 nemůže začít ve 4. taktu neboť Load v tu dobu přistupuje ke sdílené paměti dat a instrukcí. Toto lze chápat jako pozastavení 4. Instrukce ve stupni IF. Vliv sdílené paměti (cache) na výkonnost: Při přístupu k datům nelze načíst novou instrukci. 26 % instrukcí jsou typu Load, 13 % Store => CPI = 1,39 Architektura počítačů
Příklad strukturního hazardu – chybějící stupeň MEM IF
Load AD D
ID
EX
MEM
WB
IF
ID
EX
WB
Collision on w rite port into register file.
Důvod: Instrukce procházejí odlišný počet stupňů pipeline. Řešení: Přidání zápisového portu k reg. poli, to ovšem není vždy vhodné (plocha čipu, zpoždění ). Pozastavení je snazší řešení.
Load ADD instr.3 instr.4 instr.5
IF
ID
EX
MEM
WB
IF
ID
EX
stall
WB
IF
ID
stall
EX
WB
IF
stall
ID
EX
MEM
WB
stall
IF
ID
EX
MEM
WB
=> Toto je důvod proč ALU instrukce procházejí zdánlivě prázdným MEM stupněm u 5-stupňového DLX. Architektura počítačů
Hledání strukturních hazardů (1) Označ takty ve kterých jsou části pipeline (zdroje) používány různými typy instrukcí. Příklad č.1 – sdílená paměť 1
Load, Store
Other instr.
2
3
ID
IF
EX
1
2
3
IF
ID
EX
4
5
MEM
WB
4
MEM
5
Shared Memory Used
WB
Příklad č.2 – rozdílný počet stupňů pipeline 1
Load
2
3
Other instr.
5
MEM
WB
ID
EX
2
3
IF
ID
EX
MEM
1
2
3
4
IF
ID
EX
WB
IF 1
Store
4
4
Register File W rite Port Used
Sdílený zdroj je část pipeline používaná instrukcemi ve více různých taktech => strukturní hazardy zde mohou nastat. Architektura počítačů
Hledání strukturních hazardů (2) Clock cycle -> Instruction num ber
1.
Load
2.
instr.2
3.
instr.3
4.
instr.4
1.
2.
3.
4.
5.
6.
7.
IF
ID
EX
M EM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
8.
WB
Instrukce j používající sdílený zdroj v taktu c2 má kolizi s instrukcí i která používá tento sdílený zdroj v taktu c1 IFF j = i + (c1 – c2) V našem příkladě: i=1, c1=4 j=4, c2=1 Architektura počítačů
Výkonnost DLX (se zpožděným skokem) na SPECInt95
Průměrné SPI ve SPECInt95 : SPIcontrol= 0,06, SPIdata0,05 Průměrné CPI (pro ideální paměťový systém) = 1.11 Zrychlení oproti neproudovému DLX je Architektura počítačů
4.5 © David Patterson, CS152 UCB 1996
DLX a vícetaktové instrukce – FP pipeline EX Integer Unit
EX IF
ID
FP/Int Multiply
MEM WB
EX WinDLX Model
FP ADD/SUB
EX FP/Int Divide Architektura počítačů
Funkční Jednotky
DLX FP Pipeline – reálnější model Integer Unit
E
M FP multiplier
F
D
MX1
MX2
MX3 W
FP adder
AX1
AX2
AX3
AX4
FP DIV DX1-DX28 SQRT (multicycle)
Architektura počítačů
Parametry funkčních jednotek ° Latence - počet taktů než je k dispozici výsledek - typicky odpovídá počtu stupňů pipeline v jednotce ° Spouštěcí (opakovací) interval - počet taktů něž další instrukce může používat tuto funkční jednotku Latence pipeline = 5 taktů IF
ID
EX
MEM
WB
Latence of celočíselné jednotky pro ALU operaci = 1 takt IF
ID
EX
Spoušť. interval = 1 takt Architektura počítačů
MEM
WB
Příklady parametrů funkčních jednotek Funkční jednotka (Typ prováděné instrukce) Integer (ALU Reg-Reg, Reg- Imm) Integer (Load instrukce) FP MULT (pipelined) FP ADD (pipelined) DIVIDER (iterative)
Latence Spouštěcí interval 1 1 2 6 3 28
1 1 1 28
Ve WinDLX jsou všechny jednotky s výjimkou celočíselné vícetaktové (latence = spouštěcí interval) Na druhou stranu můžeme používat více jednotek stejného typu a tím snížit spouštěcí interval. Architektura počítačů
Instrukční latence a spouštěcí interval Latence instrukce -Počet taktů než je k dispozici výsledek pro datově závislou instrukci Závisí na: -Latenci funkční jednotky pro danou instrukci -Forwardovacích cestách v procesoru -Typu závislé instrukce (kdy daná instrukce potřebuje data)
Spouštěcí (opakovací) interval instrukce -Počet taktů než může být spuštěna další instrukce daného typu (bez strukturních hazardů) Závisí na: -Počtu funkčních jednotek a jejich spouštěcích intervalech
M ne-proudových funkčních jednotek s latencí M má stejný spouštěcí interval jako jedna proudově pracující funkční jednotka latence M. Viz též doplňkový shrnující materiál o různých DLX implementacích Architektura počítačů
Nové problémy u FP pipeline o Větší počet strukturních hazardů – konflikty u neproudových jednotek, zápisové porty u registrového pole o RAW hazardy jsou častější (větší latence instrukcí) o WAR hazardy nemohou nastat neboť operandy jsou čteny na začátku provádění instrukce a instrukce jsou prováděny v programovém pořadí. o WAW hazardy mohou nastat neboť instrukce jsou dokončeny mimo programové pořadí (mají různou latenci) tzv. In-order-issue + out-of-order completion o Složitá logika detekce hazardů ve stupni ID Architektura počítačů
Nové strukturní hazardy – kolize na reg. poli 1
FMULT F0, F4, F6 Integer instr. Integer instr.
FADD F2, F4, F6 Integer instr.
IF
2
3
4
5
ID
MX1
MX2
MX3
MX4
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
MX1 AX1
IF
LDF F3, 15(R1)
6
7
8
9
10
MX5
MX6
MEM
WB
MX2 AX2
MX3 AX3
MEM
WB
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
• Potřeba více zápisových portů u reg. pole (až 4). • Tento konflikt nastává u WinDLX ve stupni MEM (pouze jedna instrukce může být ve stupni MEM u WinDLX) • V reálném CPU -Stupeň MEM u FP instrukcí nemá smysl (nezabrání odlišným latencím) -Instrukce Store nemusí mít konflikt neboť nic nezapisuje - Celočíselné instrukce nemusí mít konflikt s FP instrukcemi (separátní registrová pole), může být více zápisových portů u FP reg. pole Architektura počítačů
Příklad WAW hazardu 1
FMULT F0, F4, F6 Integer instr.
FADD F0, F3, F2
IF
2
3
4
5
6
ID
MX1
MX2
MX3
MX4
IF
ID
EX
MEM
WB
IF
ID
MX1 AX1
MX2 AX2
7
8
9
MX5
MX6
MEM
MX3 AX3
MEM
WB
10
WB
º Hodnota FADD může být přepsána dřívější FMULT º WAW hazard může být vyřešen pozastavením FADD instrukce ve stupni ID º Vliv na výkonnost není významný neboť tato situace nastává zřídka ( viz redundantní výpočet na slajdu č.10) Architektura počítačů
Výkonnost FP DLX (SPECfp95)
© David Patterson, CS152 UCB 1996 Architektura počítačů
Výkonnost FP DLX (SPECfp95)
© David Patterson, CS152 UCB 1996 Architektura počítačů
Výkonnost FP DLX º Celočíselné SPI zanedbatelné vůči FP SPI º Pozastavení kvůli RAW hazardům je dominantní částí SPI (viz sloupce „FP result stalls“) º Strukturní hazardy kvůli děličce jsou zanedbatelné Počet ztracených taktů na FP operaci je přibližně 50 % of její latence (zbytek je překryt výpočtem ostatních instrukcí) – tzv. partial latency hiding - 14,2 taktů pozastavení pro dělení (latence = 28 taktů) - 2,7 taktů pozastavení pro násobení (latence = 6 taktů) Vliv na CPI (FP SPI) o Závisí na aplikaci - SPI mezi 0.65 - 1.21 o SPECfp průměrné SPI je 0.87 o DLX FP CPI = 1.87 (SPECfp95) © David Patterson, CS152 UCB 1996 Architektura počítačů
Závěry ° Výkonnost proudově pracujícího procesoru je limitována pozastavováním kvůli strukturním, datovým a řídicím hazardům ° Datové hazardy jsou RAW, WAW a WAR ° Některé techniky pro minimalizaci pozastavování (forwarding, zpožděný skok, plánování instrukcí překladačem) Následující 3 přednášky : Paměťová hierarchie (co se skrývá pod IF a MEM) Poté se podíváme na problematiku pokročilých technik proudového zpracování (superskalární procesory, dynamické plánování instrukcí, predikce skoku, spekulativní provádění instrukcí …) Architektura počítačů