Przetwarzanie potokowe (cd.) oraz zaawansowane organizacje procesorów
Wynik porównania dla branch znany dopiero w fazie MEM (pod koniec EX) 4.8 Control Hazards Hazardy sterowania unieszkodliwić te rozkazy (ustawić syg. ster. na 0) PC Chapter 4 The Processor 2
Ograniczanie skutków haz. st. Przesuńmy układy potrzebne rozkazom branch do fazy ID stage Obliczanie adresu skoku Porównanie rejestru Przykład: (branch się wykonuje) 36: 40: 44: 48: 52: 56: 72: sub beq and or add slt... lw $10, $1, $12, $13, $14, $15, $4, $3, $2, $2, $4, $6, $8 7 $5 $6 $2 $7 $4, 50($7) Chapter 4 The Processor 3
Przesunięte układy dla branch Chapter 4 The Processor 4
Przykład cd. Chapter 4 The Processor 5
Hazardy danych i branch Jesli rejestry do porównanie pochodzą z drugiej lub trzeciej poprzedzającej instrukcji ALU add $1, $2, $3 IF add $4, $5, $6 ID EX MEM WB IF ID EX MEM WB IF ID EX MEM WB IF ID EX MEM beq $1, $4, target WB Używamy forwardingu Chapter 4 The Processor 6
Hazardy danych i branch Jeśli rejestry do porównania pochodzą z poprzedniej instrukcji ALU lub instrukcji lw sprzed dwóch cykli lw Potrzebne opóźnienie o cykl... $1, addr IF add $4, $5, $6 beq stalled beq $1, $4, target ID EX MEM WB IF ID EX MEM WB IF ID ID EX MEM WB Chapter 4 The Processor 7
Hazardy danych i branche Jeśli rejestr do porównania pochodzi z poprzedniej instrukcji lw lw Potrzebne opóźnienie o 2 cykle! $1, addr IF beq stalled beq stalled beq $1, $0, target ID EX IF ID MEM WB ID ID EX MEM WB Chapter 4 The Processor 8
Dynamiczna predykcja skoków W dłuższych potokach lub rozwiązaniach superskalarnych branch penalty dotkliwsza Używa się dynamicznej predykcji Branch prediction buffer (aka branch history table) Indeksowany adresami ostatnich skoków Zapisuje się wynik skoku (wykonany/nie wykonany) Po napotkaniu skoku Zajrzyj do tabeli i załóż wynik jak poprzednio Zacznij pobierać kolejny rozkaz zgodnie z predykcją W razie pomyłki napraw szkody i zmień wpis w tabeli Chapter 4 The Processor 9
Predyktor 1-bitowy Dwa błędy w pętli wewnątrznej: outer: inner: beq,, inner beq,, outer Przy ostatniej iteracji pętli wewnętrznej Przy pierwszej iterazji pętli wewnętrzenj w następnej iteracji pętli zewnętrznej Chapter 4 The Processor 10
Predyktor 2-bitory Zmienia predykcje tylko po dwóch kolejnych błędach Chapter 4 The Processor 11
Obliczanie adresu skoku Nawet z predykcją trzeba obliczyć adres skoku Potrzebne opóźnienie przy skoku wykonywanym Specjalny bufor adresów skoków Rodzaj cache dla adresów skoków Odczytywany podczas pobieranie instrukcji Jeśli adres jest w buforze i przewidujemy skok możemy natychmiast pobrać odpowiedni rozkaz Chapter 4 The Processor 12
,,Nieoczekiwane zdarzenia wymagające zmiany naturalnego przepływu rozkazów Różne użycie obu terminów w różnych architekturach Wyjątek Powstaje wewnątrz procesora np. niezdefiniowany opcode, przepełnienie,... Przerwanie 4.9 Exceptions Wyjątki i przerwania Z kontrolera wejścia-wyjścia Zaplanowanie ich obsługi bez utraty efektywności procesora jest sporym wyzwaniem Chapter 4 The Processor 13
Obsługa wyjątków W MIPS obsługiwane przez System Control Coprocessor (CP0) Zapisz PC rozkazu powodującego wyjątek (lub w czasie którego wystąpiło przerwanie) W MIPS: Exception Program Counter (EPC) Zapisz rodzaj problemu W MIPS: specjalny 32-bitowy rejestr (Cause register) W naszym przykładzie założymy, że Cause reg. 1bitowy: 0 niezdefiniowany opcode, 1 przepełnienie arytmetyczne Skocz do programu obsługi wyjątków (adres 8000 00180) Chapter 4 The Processor 14
Alternatywne rozwiązanie Przerwania wektorowe Np.: Adres,,krótkiej'' procedury obsługi zależy od rodzaju problemu Niezdefiniowany opcode: C000 0000 Przepełnienie: C000 0020 : C000 0040,,Krótka'' procedura obsługi Obsługuje w pełni przerwanie lub Zapisuje potrzebne informacje i skacze do prawdziwej procedury obsługi Chapter 4 The Processor 15
Obsługa wyjątków Odczytaj Cause reg., przekarz sterowanie do odpowiedniej podprocedury obsługi Określ rodzaj problemu Jeśli program,,restartowalny'' Wykonaj odpowiednie czynności,,naprawcze'' Użyj EPC aby wrócić do programu W przeciwnym przypadku Zatrzymaj program Zgłoś błąd podając dane z EPC, Cause reg., Chapter 4 The Processor 16
Wyjątki w potoku Kolejny rodzaj hazardu sterowania Rozważamy przepełniene w faze EX rozkazu add add $1, $2, $1 Zatrzyma zapis do rejsestru $1 Dokończ wcześniejsze instrukcje Wyczyść kolejne instrukcje z potoku Ustaw wartości rejestrów Cause i EPC Ustwa PC na adres procedury obsługi Podobne do źle przewidzianego skoku W podobny sposób rozwiązywane Chapter 4 The Processor 17
Potok z wyjątkami Chapter 4 The Processor 18
Wyjątki restartowalne Wyjątki restartowalne Potok czyszczony Wyjątek obsługiwany, potem powrót do rozkazu powodującego wyjątek Rozkaz ponownie pobierany PC zapisywany w rejestrze EPC Identyfikuje przerwany rozkaz Tak naprawdę zapisywane jest PC + 4 Procedura obsługi bierze to pod uwagę Chapter 4 The Processor 19
Przykład wyjątku Exception on add in 40 44 48 4C 50 54 sub and or add slt lw $11, $12, $13, $1, $15, $16, $2, $4 $2, $5 $2, $6 $2, $1 $6, $7 50($7) Handler 80000180 80000184 sw sw $25, 1000($0) $26, 1004($0) Chapter 4 The Processor 20
Przykład wyjątku Chapter 4 The Processor 21
Przykład wyjątku Chapter 4 The Processor 22
Wiele wyjątków na raz W potkoku jednocześnie kilka rozkazów Mogą jednocześnie powodować wyjątki Proste rozwiązanie: obsłuż najpierw wyjątek z najstarszego rozkazu,,wyczyść'' kolejne rozkazy W złożonych potokach Wiele rozkazów startuje równocześnie Wykonywane są,,out-of-order'' Obsługa wyjątków bardzo skomplikowana Chapter 4 The Processor 23
Przetwarzanie potokowe: wiele rozkazów wykonywanych równolegle (różne fazy) Jak zwiększyć ILP? Dłuższy potok Mniej pracy w jednej fazie krótszy cykl zegarowy Muliple issue Zwielokrotnienie potoku W jednym cyklu starutje kilka rozkazów Instructions Per Cycle (IPC) liczba cykl przeciętnie kończonych w jednym cyklu; Cycles Per Instruction co ile cykli przeciętnie kończy się jeden rozkaz. Np., 4GHz 4-drożny multiple-issue 4.10 Parallelism via Instructions Instruction-Level Parallelism (ILP) optymalne CPI = 0.25, optymalne IPC = 4 W praktyce IPC I CPI gorsze z powodu hazardów Chapter 4 The Processor 24
Multiple Issue Static multiple issue Kompilator grupuje rozkazy Pakuje je w,,paczki''; rozkazy z paczki mogą być wykonane równolegle Kompilator dba o unikanie hazardów Dynamic multiple issue CPU wybiera, które rozkazy rozpocząć w danym cyklu Kompilator może pomagać odpowiednio ustawiając rozkazy CPU rozwiązuje hazardy w czasie rzeczywistym (używając skomplikowanych technik) Chapter 4 The Processor 25
Spekulacja,Zgadnij co zrobić z rozkazem Rozpocznij operacje jak najszybciej Sprawdź, czy zgadnięcie się udało Jeśli tak: dokończ rozkaz Jeśli nie: wycofaj rozkaz i zrób to co trzeba Częste w przypadku static oraz dynamic multiple issue Przykłady Spekulacje na temat wykonania skoku Spekulacja na temat lw Wycofaj się jeśli dana lokacja uległa zmianie Chapter 4 The Processor 26
Spekulacja soft./sprzętowa Kompilator może przeorganizować rozkazy np. przesunąć lw przed branch Może dodać rozkazy,,naprawiające'' w przypadku błędnego zgadnięcia Sprzęt może szukać rozkazów do wykonania Buforuje wyniki dopóki nie jest pewien, że są potrzebne Czyści bufory w przypadu błędnego zgadnięcia Chapter 4 The Processor 27
Spekulacja a wyjątki Co jeśli spekulatywnie wykonywany rozkaz jest przerywany wyjątkiem np. spekulatywny load Spekulacja statyczna ISA może wspierać wycofywanie wyjątków Spekulacja dynamiczna Można buforować wyjątki aż do zakończenia rozkazu (które może nie następić) Chapter 4 The Processor 28
Static Multiple Issue Kompilator grupuje rozkazy w paczki Cała paczka może być rozpoczęta w jednym cyklu Rozkazy w jednej paczce nie mogą być dowolne (ograniczone zasoby, hazardy) Można myśleć, że jedna paczka to pojedynczy,,bardzo długi'' rozkaz Specyfikujacy kilka równoległych czynności Very Long Instruction Word (VLIW) Chapter 4 The Processor 29
Planowanie Static Multiple Issue Kompilator usuwa wszystkie lub część hazardów Przeorganizowuje rozkazy aby umeścić je w paczkach Nie ma zależności w paczce Mogą być pomiędzy paczkami W różnych ISAs różne rozwiązania; kompilator musi je znać! Czasem (często) trzeba wstawić rozkaz pusty NOP Chapter 4 The Processor 30
MIPS: Static Dual Issue Dwa rozkazy w paczce Jeden rozkaz ALU/branch, jeden rozkaz load/store Wyrównanie do 64-bitów ALU/branch, potem load/store; NOP w niewykorz. polach Address Instruction type Pipeline Stages n ALU/branch IF ID EX MEM WB n+4 Load/store IF ID EX MEM WB n+8 ALU/branch IF ID EX MEM WB n + 12 Load/store IF ID EX MEM WB n + 16 ALU/branch IF ID EX MEM WB n + 20 Load/store IF ID EX MEM WB Chapter 4 The Processor 31
MIPS: Static Dual Issue Chapter 4 The Processor 32
Hazardy w Dual-Issue MIPS Mamy większą równoległość Hazard EX Forwarding rozwiązywał je w pojedynczym potoku Teraz nie możemy użyć wyniku ALU dla load/store z tej samej paczki Load-use hazard add $t0, $s0, $s1 load $s2, 0($t0) Rodzielane na dwie paczki Wciąż jeden cykl opóźnienia, ale teraz opóźniamy obie instrukcje z paczki Wymagane,,agresywniejsze'' planowanie Chapter 4 The Processor 33
Przykład planowania Planujemy program dla dual-issue MIPS Loop: lw addu sw addi bne $t0, $t0, $t0, $s1, $s1, 0($s1) $t0, $s2 0($s1) $s1, 4 $zero, Loop # # # # # $t0=array element add scalar in $s2 store result decrement pointer branch $s1!=0 Chapter 4 The Processor 34
Przykład planowania cd. Loop: ALU/branch Load/store Cykle nop lw 1 addi $s1, $s1, 4 nop 2 addu $t0, $t0, $s2 nop 3 bne sw $s1, $zero, Loop $t0, 0($s1) $t0, 4($s1) IPC = 5/4 = 1.25 (por. opt. IPC = 2) 4
Rozwijanie pętli Rozwijamy ciało pętli (redukuje to m.in. pracę przy sprawdzaniu warunku pętli) Używamy różnych rejestrów dla różnych etapów,,rozwinięcia'',,register renaming Unikaj niesionych przez pętle,,antyzależności SW a po nim LW z tym samym rejestrem aka name dependence Chapter 4 The Processor 36
Rozwijanie pętli - przykład ALU/branch Load/store cycle lw $t0, 0($s1) 1 nop lw $t1, 12($s1) 2 addu $t0, $t0, $s2 lw $t2, 8($s1) 3 addu $t1, $t1, $s2 lw $t3, 4($s1) 4 addu $t2, $t2, $s2 sw $t0, 16($s1) 5 Loop: addi $s1, $s1, 16 Wskaźnik bliższy optymalnemu (1.75) koszt: rejestry addu $t3, $t4, $s2 sw $t1, 12($s1) 6 Chapter 4 The Processor 37 I długość kodu
Dynamic Multiple Issue Procesory,,superskalarne'' CPU decyduje czy uruchomć 0, 1, 2, rozkazy w danym cyklu Stara się unikać hazardów Kompilator nie musi dbać o unikanie hazardów Ale może wciąż pomagać O poprawność dba CPU Chapter 4 The Processor 38
Planowanie dynamiczne Pozwalamy CPU wykonywać rozkazy outof-order aby uniknąć przestojów Ale wyniki do pamięci/rejestrów idą po kolei! Np.: lw $t0, 20($s2) addu $t1, $t0, $t2 sub $s4, $s4, $t3 slti $t5, $s4, 20 Może rozpocząć sub gdy addu czeka na lw Chapter 4 The Processor 39
Dynamically Scheduled CPU Preserves dependencies Hold pending operands Results also sent to any waiting reservation stations Reorders buffer for register writes Can supply operands for issued instructions Chapter 4 The Processor 40
Core i7 Pipeline Chapter 4 The Processor 41