p. 1/3 Przetwarzanie potokowe (pipelining)
p. 2/3 Przypomnienie - implementacja jednocyklowa 4 Add Add PC Address Instrction Instrction ister # isters Address ister # ister #
p. 3/3 Wstęp W implementacjach prezentowanych tydzień tem w jednym momencie wykonje się tylko jednen rozkaz. Jego wykonanie przebiega w kilk fazach. W każdej fazie żywana jest tylko część kładów logicznych. Pomysł: w momencie gdy pierwszy rozkaz rozpoczyna drga fazę, drgi zaczyna pierwsza; gdy pierwszy zaczyna trzecia, drgi zaczyna drga, a trzeci pierwsza, itd. W efekcie w jednym momencie wykonje się tyle rozkazów ile jest faz. Każdy wykonywany rozkaz znajdje się w innej fazie. Taka technikę nazywamy przetwarzaniem potokowym (ang. pipelining). W przetwarzani potokowym nie przyspieszamy wykonania pojedynczego rozkaz (wręcz przeciwnie!). Zysk dzięki równolegleni wykonywanie operacji.
p. 4/3 IPS - fazy wykonania rozkaz Wykonanie rozkaz podzielimy na 5 faz: Pobranie rozkaz z pamięci (IF, instrction fetch) - 2ps Dekodowanie rozkaz i odczyt rejestrów (ID, instrction decode) - 1 ps Wykonanie operacji typ R lb wyliczenie adres (EX, eecte) - 2 ps Operacja na pamięci (E, ) - 2 ps Zapis do rejestr (, write back) - 1 ps
p. 5/3 Porównanie Program eection Time order (in instrctions) 2 4 6 8 1 12 14 16 18 lw $1, 1($) lw $2, 2($) lw $3, 3($) Instrction fetch 8 ps access Instrction fetch 8 ps access Instrction fetch 8 ps Program eection Time order (in instrctions) 2 4 6 8 1 12 14 lw $1, 1($) lw $2, 2($) lw $3, 3($) Instrction fetch 2 ps Instrction fetch 2 ps Instrction fetch access access access 2 ps 2 ps 2 ps 2 ps 2 ps
p. 6/3 Projektowanie listy rozkazów Lista rozkazów IPS została zaprojektowana z myśla o przetwarzani potokowym. Stała dłgość rozkazów łatwia ich pobieranie. ała liczba formatów rozkazów. Rejestry źródłowe w tych samych miejscach - rejestry można odczytywać równolegle z dekodowaniem rozkaz. Operacje na pamięci wykonja tylko rozkazy lw, sw (i ich warianty).
p. 7/3 Hazardy Hazardy strktralne Dwa rozkazy chca w tej samej chwili skorzystać z tego samego zasob (np., pamięć, rejestry) W zasadzie problem nie występje w przypadk IPS. Pojawiłby się, gdybyśmy nie rozdzieli pamięci. Hazardy danych. Rozkaz potrzebje rejestr, który zapisje poprzedni rozkaz. Np. add $s, $t, $t1 add $t2, $s, $t3 Hazardy sterowania. W przypadk rozkaz skok nie wiadomo, który rozkaz należy pobrać jako następny. Szczególnie trdne w przypadk skoków warnkowych.
p. 8/3 Hazardy danych Np. add $s, $t, $t1 add $t2, $s, $t3 $s jest zapisywany dopiero w piatej fazie pierwszego rozkaz Drgi rozkaz potrzebje go jż dwa cykle wcześniej! Rozwiazanie kiepskie: opóźnić (jakoś) wykonanie drgiego rozkaz o dwa cykle (dodać dwa babelki ). Rozwiazanie programowe: reorganizacja kod (np. przez kompilator) - trdne. Rozwiazanie sprzętowe: forwarding (bypassing) Program eection order Time (in instrctions) add $s, $t, $t1 IF 2 4 6 8 1 ID EX E sb $t2, $s, $t3 IF ID EX E
p. 9/3 Hazardy danych - cd. Forwarding nie eliminje wszystkich hazardów danych. Program eection order Time (in instrctions) lw $s, 2($t1) IF 2 4 6 8 1 12 14 ID EX E bbble bbble bbble bbble bbble sb $t2, $s, $t3 IF ID EX E
p. 1/3 Hazardy danych - reorganizacja kod lw $t1, ($t) lw $t1, ($t) lw $t2, 4($t) lw $t2, 4($t) add $t3, $t1, $t2 lw $t4, 8($t) sw $t3, 12($t) add $t3, $t1, $t2 lw $t4, 8($t) sw $t3, 12($t) add $t5, $t1, $t4 add $t5, $t1, $t4 sw $t5, 16($t) sw $t5, 16($t) Z lewej strony 2 hazardy (rozkazy add) pozostałe eliminowane przez forwarding. Z prawej brak hazardów.
p. 11/3 Hazardy sterowania Załóżmy, że potrafimy w drgiej fazie wykonywania beq porównać rejestry, wyliczyć adres i stawić nowy PC Nawet wtedy msimy opóźnić potok: Program eection Time order (in instrctions) 2 4 6 8 1 12 14 add $4, $5, $6 beq $1, $2, 4 or $7, $8, $9 Instrction fetch 2 ps Instrction fetch access Instrction fetch access bbble bbble bbble bbble bbble 4 ps access
p. 12/3 Hazardy sterowania - przewidywanie skoków Jedno z rozwiazań: przewidywanie skoków Np. zakładamy, że skoki się nie wykonja Program eection Time order (in instrctions) 2 4 6 8 1 12 14 add $4, $5, $6 beq $1, $2, 4 lw $3, 3($) Instrction fetch 2 ps Instrction fetch 2 ps Instrction fetch access access access Program eection Time order (in instrctions) 2 4 6 8 1 12 14 add $4, $5, $6 beq $1, $2, 4 or $7, $8, $9 Instrction fetch 2 ps Instrction fetch access Instrction fetch access bbble bbble bbble bbble bbble 4 ps access
p. 13/3 Hazardy sterowania - przewidywanie skoków ożna zakładać, że niektóre skoki się wykonja (np. te skaczace wstecz), a inne nie. Przewidywanie może być też dynamiczne jeśli podczas poprzedniego przejścia przez rozkaz skok się wykonał, to teraz też zakładamy, że się wykona. ożna prowadzić historię kilk ostatnich wykonań. Potrzebne oczywiście dodatkowe kłady logiczne. Dobrze zorganizowane przewidywanie dynamiczne daje ponad 9% skteczność! Inne rozwiazanie: skoki opóźnione (stosowane naprawdę w IPS, ale niewidoczne dla programisty asemblerowego).
p. 14/3 odel procesora potokowego Rozważamy listę rozkazów taka jak tydzień tem, ale bez j. Nowość - rejestry rozdzielajace poszczególne fazy. Na poczatek nie przejmjemy się hazardami. IF/ID ID/EX EX/E E/ Add 4 Shift left 2 Add Add reslt 1 PC Address Instrction Instrction register 1 register 2 isters Write register Write data data 1 data 2 1 Zero reslt Address data 1 Write data 16 Sign 32 etend
p. 15/3 odel procesora potokowego poprawka Skad bierzemy nmer rejestr do zapisania (dla lw)? IF/ID ID/EX EX/E E/ Add 4 Shift left 2 Add Add reslt 1 PC Address Instrction Instrction register 1 register 2 isters Write register Write data data 1 data 2 1 Zero reslt Address data 1 Write data 16 Sign 32 etend
p. 16/3 odel procesora potokowego - sygnały sterjące PCSrc IF/ID ID/EX EX/E E/ Add 4 Shift left 2 Add Add reslt Branch 1 PC Address Instrction Instrction register 1 register 2 isters Write register Write data Write data 1 data 2 Src 1 Zero Add reslt Address emwrite data emto 1 Write data Instrction (15 ) 16 Sign 32 6 etend control em Instrction (2 16) Op Instrction (15 11) 1 Dst
p. 17/3 odel procesora potokowego sterowanie Sygnały sterjace podobne jak w rozwiazani jednocyklowym Brak specjalnych sygnałów dla dwóch pierwszych faz (niezależne od rozkaz) Instrction Control EX IF/ID ID/EX EX/E E/
p. 18/3 PCSrc ID/EX EX/E Control E/ IF/ID EX Add 1 PC 4 Address Instrction Instrction register 1 register 2 isters Write register Write data rite W data 1 data 2 Shift left 2 1 Add Add reslt Src Zero reslt Branch Address emwrite data emto 1 Write data Instrction [15 ] 16 Sign 32 6 etend control em Instrction [2 16] Instrction [15 11] 1 Dst Op
p. 19/3 Hazardy danych i forwarding Time (in clock cycles) Vale of CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 register $2: 1 1 1 1 1/ 2 2 2 2 2 Program eection order (in instrctions) sb $2, $1, $3 I D and $12, $2, $5 I D or $13, $6, $2 I D add $14, $2, $2 I D sw $15, 1($2) I D
p. 2/3 Forwarding Rejestry rozdzielajace fazy potok przechowja m.in. nmery rejestów źródłowych (rs, rt) oraz przeznaczenia (rd) bioracych dział w operacji. Cztery sytacje: EX/E.Rd = ID/EX.Rs EX/E.Rd = ID/EX.Rt E/.Rd = ID/EX.Rs E/.Rd = ID/EX.Rt
p. 21/3 ID/EX EX/E E/ isters a. No forwarding ID/EX EX/E E/ isters ForwardA ForwardB Rs Rt Rt Rd EX/E.isterRd Forwarding nit E/.isterRd b. With forwarding
p. 22/3 Sterowanie dla forwarding ID/EX EX/E Control E/ IF/ID EX PC Instrction Instrction isters IF/ID.isterRs IF/ID.isterRt IF/ID.isterRt IF/ID.isterRd Rs Rt Rt Rd Forwarding nit EX/E.isterRd E/.isterRd
p. 23/3 Hazardy nieswalne lw $2, 2($1) add $4, $2, $5 Dana jest potrzebna na jeden cykl przed odczytem z pamięci simy stracić jeden cykl - dodajemy pojedynczy babelek Time (in clock cycles) CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 CC 1 Program eection order (in instrctions) lw $2, 2($1) I D bbble and becomes nop I D add $4, $2, $5 I D or $8, $2, $6 I D add $9, $4, $2 I D
p. 24/3 Hazard detection nit ID/EX.em PCWrite IF/DWrtite IF/ID Control ID/EX EX/E EX E/ PC Instrction Instrction isters IF/ID.isterRs IF/ID.isterRt IF/ID.isterRt IF/ID.isterRd Rt Rd ID/EX.isterRt Rs Rt Forwarding nit
p. 25/3 Hazardy sterowania Przeswamy wyliczanie adres skok oraz sprawdzanie, czy skok się wykona do drgiej fazy. Zakładamy, że skok się nie wykona pobieramy do potok kolejny rozkaz. Jeśli skok się jednak wykonał msimy wstawić jeden babelek oraz wyczyścić rejestr IF/ID
and $12, $2, $5 beq $1, $3, 7 sb $1, $4, $8 before<1> before<2> IF.Flsh Hazard detection nit ID/EX 4 + 48 IF/ID 44 Control 28 + 72 Shift left 2 $1 EX $4 EX/E E/ PC 72 44 Instrction 7 isters = $3 $8 Sign etend 1 Forwarding nit Clock 3 lw $4, 5($7) IF.Flsh bbble (nop) beq $1, $3, 7 sb $1,... before<1> Hazard detection nit ID/EX 4 + 76 IF/ID 72 Control + Shift left 2 EX $1 EX/E E/ 76 PC 72 Instrction isters = $3 Sign etend 1 Forwarding nit p. 26/3
p. 27/3 Krok dalej: sperskalarność Nowoczesne procesory maja zazwyczaj po kilka równoległych potoków. Takie procesory nazywamy sperskalarnymi. aja wobec tego po kilka jednostek wykonawczych (np. kilka kopii ) Układy zarzadzaj ace przydziałem rozkazów do poszczególnych potoków oraz wykrywajace/swaj ace hazardy robia się bardzo skomplikowane.
p. 28/3 VLIW Inny pomysł zrzcić problem rozdzielania rozkazów do potoków na kompilator Very Large Instrction Word: dłga paczka rozkazów składajaca się z kilk prostych rozkazów Kompilator zapewnia, że rozkazy z jednej paczki moga być wykonane równolegle (czasem oczywiście nie da się wypełnić całej paczki i trzeba zostawić wolne pola). Przykładem sa procesory Itanim (architektra IA-64), chociaż intel klasyfikje je jako EPIC (Eplicitly Parallel Instrction Compters).
p. 29/3 Potoki w procesorach Intela potok pojawia się w model 486 Pentim jest jż sperskalarny: dwa 5-etapowe potoki (wczytywanie, dekodowanie, generowanie adres, wykonanie, zapisanie); za zapełnienie obydw potoków odpowiadał kompilator. Pentim II miało jż 12 etapów potok, Pentim III - 14, a Pentim IV - 24. dla odmiany 64-bitowy procesor Itanim ma tylko 1 etapów potok;
p. 3/3 Itanim 2 Dżo rejestrów. Potrafi wykonywać jednocześnie do 6 rozkazów Rozkazy 128-bitowe (3 sloty po 41 bitów + 5 bitów dodatkowych) Potoki 8-etapowe Jednostki wykonawcze: 6 jednostek całkowitoliczbowych, 1 przeswajaca 2 * 2 jednostki zmiennopozycyjne (dod/mnoż, inne) 6 jednostek wektorowych dla rozkazów mltimedialnych 3 jednostki skoków. Itanim 2 taktowany zegarem 1,5GH jest szybszy od procesorów sperskalarnych taktowanych dwkrotnie szybszym zegarem!