Υ- 01 Αρχιτεκτονική Υπολογιστών Υπόβαθρο: Διοχέτευση Αρης Ευθυμίου
Το σημερινό μάθημα Υπόβαθρο: Διοχέτευση (Pipelining) Βασική οργάνωση Δομικοί κίνδυνοι Κίνδυνοι δεδομένων (hazards): RAW, WAR, WAW Stall (αναμονή, σταμάτημα) και προώθηση (forwarding) Κίνδυνοι ελέγχου Ακριβείς διακοπές Διοχετευμένες λειτουργικές μονάδες 2
Βήματα εκτέλεσης εντολής Από το μοντέλο von Neumann, για επεξεργαστές RISC: 1. Fetch προσκόμιση εντολής, από τη διεύθυνση που δείχνει ο PC (program pointer) 2. Decode αποκωδικοποίηση 3. Execute εκτέλεση 4. Αποθήκευση αποτελέσματος και ενημέρωση του PC Μικρές παραλλαγές ανάλογα με το είδος εντολής, π.χ. στο 3 ο βήμα: load/store: υπολογισμός διεύθυνσης μνήμης και προσπέλαση branch: υπολογισμός νέου PC αν η διακλάδοση ακολουθείται Παρατήρηση: δυνατή η επικάλυψη βημάτων 3
Διοχέτευση - pipelining Κάθε έργο A, B, διαιρείται σε n δουλειές (A 1,, A n ) που εκτελούνται με τη σειρά κάθε δουλειά απαιτεί παρόμοιο χρόνο εκτέλεσης Τα έργα περνούν μέσα από n στάδια (stages) Το i- οστό στάδιο εκτελεί την i- οστή δουλειά Κάθε δουλειά εκτελείται από διαφορετικό σταθμό Εστω t i ο χρόνος εκτέλεσης της δουλειάς A i και t M =max{t i } Με γεμάτη διοχέτευση, ένα έργο τελειώνει κάθε t M Αύξηση ρυθμού εκτέλεσης έργων Καθυστέρηση ενός έργου n x t M μπορεί να είναι μεγαλύτερη από t 1 + t 2 + + t n 4
Παράδειγμα Πλύσιμο πιάτων: 5 άνθρωποι, 4 βρώμικα πιάτα ο καθένας Δουλειές: μεταφορά πιάτου στη κουζίνα 20 sec πέταγμα υπολειμάτων 30 sec πλύσιμο 30 sec στέγνωμα 30 sec αποθήκευση 40 sec Σειριακό πλύσιμο: 4x5 x (20+30+30+30+40) = 3000 = 50m ρυθμός: 150 sec το πιάτο Αν βοηθήσουν όλοι; κάθε βήμα θα παίρνει 40 sec 5
Διοχέτευση: παρατηρήσεις Ο χρόνος κάθε σταδίου πρέπει να είναι παρόμοιος (balanced pipeline) Χρειάζεται αποθήκευση (buffering) μεταξύ σταδίων για τις μικροδιαφορές του χρόνου εκτέλεσής τους Κάθε έργο περνά από όλα τα στάδια και με την ίδια σειρά Κάθε στάδιο πρέπει να έχει διαθέσιμους όλους τους πόρους που χρειάζεται για να λειτουργήσει αλλιώς δομικός κίνδυνος (structural hazard) Διακοπές προκαλούν άδειασμα της διοχέτευσης 6
Στοιχεία υπόθ. επεξεργαστή RISC, load- store, 32 general purpose registers (R 0 - R 31 ) 32bit registers, PC Ξεχωριστές Instruc on, Data caches υποθέτουμε ότι πάντα έχουν ό,τι ζητηθεί Εντολές Αριθμητικές, λογικές: R i R j op R k Το Rt μπορεί να αντικατασταθεί από μία σταθερά (immediate) Μεταφορές δεδομένων: R i Mem[R j + disp] Αλλαγή ροής: br (R op R), disp Αν η συνθήκη ισχύει, PC = PC + disp 7
Διαχωρισμός σταδίων Εξετάζουμε τη load που χρειάζεται τα περισσότερα βήματα: Fetch Decode Execute Memory access Writeback pipeline register 8
Στάδιο προσκόμισης εντολής Instruc on Fetch (IF) Ανάγνωση μνήμης στη διεύθυνση που δείχνει ο καταχωρητής PC (program counter) Υπολογισμός της διεύθυνσης επόμενης εντολής: PC+4 κάθε εντολή είναι 4 bytes μνήμη είναι διευθυνσιοδοτημένη σε bytes 9
Στάδιο αποκωδικοποίησης Instruc on decode/register fetch (ID) Αποκωδικοποίηση εντολής Ανάγνωση από το αρχείο καταχωρητών (register file) των (μέχρι) 2 καταχωρητών πηγής Επέκταση προσήμου του τμήματος offset της εντολής για εντολές με σταθερά κωδικοποιημένη μέσα στην εντολή π.χ. branch, load, store, Υπολογισμός PC σε περίπτωση διακλάδωσης: PC + sgn- ext(offset). Σημ. το PC έχει ήδη αυξηθεί κατά 4 στο προηγούμενο κύκλο Πολλές πράξεις γίνονται πρότερα, ίσως να μή χρειαστούν! 10
Στάδιο Εκτέλεσης Execu on / effec ve address (EX) Εκτέλεση αριθμητικών πράξεων ανάλογα με την εντολή Μεταφορές από μνήμη: υπολογισμός διεύθυνσης τιμή καταχωρητή + σταθερά (με επέκταση προσήμου) effec ve address = base register + offset Εντολές πράξεων ALU η ALU εκτελεί τη κατάλληλη πράξη είτε μεταξύ τιμών καταχωρητών ή μεταξύ σταθεράς και καταχωρητή. Υπολογισμός συνθήκης για εντολές διακλάδοσης 11
Στάδιο προσπέλασης μνήμης Memory access (MEM) Η διεύθυνση που έχει υπολογιστεί στο προηγούμενο κύκλο χρησιμοποιείται για προσπέλαση μνήμης Εκτέλεση εγγραφών (store) ολοκληρώνεται εδώ. 12
Στάδιο επανεγγραφής Write- back Εντολές load γράφουν τη τιμή που διαβάστηκε από τη μνήμη πίσω στο αρχείο καταχωρητών και οι εντολές ΑLU. 13
Σχηματική αναπαράσταση 14
Διοχετευμένος MIPS IF/ID ID/EX EX/MEM MEM/WB 4 ADD M u x IR 6..10 Zero? Branch taken PC Instruction memory IR IR 11..15 MEM/WB.IR isters M u x M u x ALU Data memory M u x 16 Signextend 32 15
Κίνδυνοι διοχέτευσης Αν όλες οι εντολές στη διοχέτευση ήταν ανεξάρτητες, επίδοση *= αριθμός σταδίων Καταστάσεις που εμποδίζουν μία εντολή να εκτελεστεί στο χρόνο ρολογιού που της αναλογεί κίνδυνοι hazards Δομικοί - structural hazards δεν υπάρχει αρκετό υλικό για όλους τους δυνατούς συνδιασμούς εντολών της διοχέτευσης Δεδομένων - data hazards μία εντολή εξαρτάται από το αποτέλεσμα μιας άλλης Ελέγχου - control hazards διακλαδώσεις, άλματα, κλήση- επιστροφή υπορουτίνας, διακοπές 16
Δομικοί κίνδυνοι Συμβαίνουν όταν δεν επαρκούν οι πόροι (resources) για όλους τους πιθανούς συνδιασμούς εντολών στη διοχέτευση Παράδειγμα: σε κάποιες περιπτώσεις πρέπει να επανεγγραφούν 2 αποτελέσματα στον ίδιο κύκλο αλλά το αρχείο καταχωρητών έχει μία θύρα εγγραφής Μπορούν πάντα να απαλειφθούν «πληρώνοντας» περισσότερο υλικό Αν συμβαίνουν σπάνια, το κόστος είναι μεγαλύτερο από το όφελος 17
Παράδειγμα Μία θύρα μνήμης για εντολές και δεδομένα Προσπελάσεις μνήμης (δεδομένων) 40% των εντολών CPI χωρίς stalls = 1 Συχνότητα ρολογιού επεξεργαστή με το δομικό κίνδυνο 1.05 φορές από αυτού χωρίς τον κίνδυνο AvgInstTime nohazard = CPI ClockCycle nohazard =1 ClockCycle nohazard AvgInstTime withhazard = CPI ClockCycle withhazard = (1+ 0.4 1) ClockCycle nohazard 1.05 =1.3 ClockCycle nohazard 18
Κίνδυνοι δεδομένων Συμβαίνουν λόγω εξαρτήσεων μεταξύ εντολών π.χ. μία εντολή περιμένει το αποτέλεσμα μιας προηγούμενης R 7 R 12 + R 15 R 8 R 7 - R 12 R 15 R 8 + R 7 Κίνδυνος Read- A er- Write (RAW) - R 7 (2 φορές), R 8 Κίνδυνος Write- A er- Read (WAR) - R 15 Κίνδυνος Write- A er- Write (WAW) 19
Kίνδυνοι στη διοχέτευση Time (in clock cycles) CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 R 7 R 12 + R 15 IM ALU DM R 8 R 7 - R 12 IM ALU DM R 15 R 8 + R 7 IM ALU DM IM ALU IM 20
Αποφυγή κινδύνων - προώθηση Time (in clock cycles) CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 R 7 R 12 + R 15 IM ALU DM R 8 R 7 - R 12 IM ALU DM R 15 R 8 + R 7 IM ALU DM R 7 IM ALU IM 21
Υλοποίηση προώθησης 22
Προώθηση - λεπτομέρειες R 10 R 4 + R 5 R 10 R 7 + R 10 R 8 R 10 + R 7 R 5 Mem[R 6 ] Mem[R 8 ] R 5 Η προώθηση πρέπει να δίνει το πιο πρόσφατο/καινούριο αποτέλεσμα βλ. 1 ο πρόγραμμα Υπάρχουν αρκετά μονοπάτια προώθησης βλ. 2 ο πρόγραμμα 23
Αναμονή - stall Time (in clock cycles) CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 R 6 Mem[R 2 ] IM ALU DM R 7 R 6 + R 4 IM ALU DM IM ALU DM IM ALU IM 24
Pipeline interlocks Το προηγ. παράδειγμα είναι γνωστή, συνηθισμένη περίπτωση: load- use stall (ή hazard) Συνεπάγεται αντίστοιχη καθυστέρηση (l- u delay, penalty) Το υλικό πρέπει να ανιχνεύσει τέτοιες περιπτώσεις και να σταματήσει (stall) μέρος της διοχέτευσης για κατάλληλο αριθμό κύκλων τουλάχιστον 1 κύκλο στη περίπτωση load- use Αυτή η τεχνική λέγεται pipeline interlock 25
Αναμονή Οταν μια εντολή πρέπει να περιμένει (stall) σε ένα στάδιο διοχέτευσης για κάποιους κύκλους (όλες) οι επόμενες εντολές πρέπει επίσης να περιμένουν Δεν μπορούν να ξεκινήσουν καινούριες εντολές Οι προηγούμενες εντολές συνεχίζουν την εκτέλεσή τους αλλιώς δε θα ξαναξεκινούσε ποτέ η διοχέτευση! Δημιουργούνται κενά (bubbles) στη διοχέτευση στάδια που δεν έχουν εντολές για εκτέλεση 26
Υλοποίηση αναβολής load enable IF/ID stall ID/EX EX/MEM MEM/WB 4 ADD M u x IR 6..10 Zero? Branch taken PC Instruction memory IR IR 11..15 MEM/WB.IR isters M u x M u x ALU Data memory M u x 16 Signextend 32 27
Κίνδυνοι ελέγχου Η διοχέτευση είναι αποδοτική όταν είναι πάντα γεμάτη Αλλαγές στη ροή του προγράμματος διακόπτουν τη συνεχή ροή εντολών στη διοχέτευση και προκαλούν κινδύνους ελέγχου Εντολές που αλλάζουν τη ροή εκτέλεσης: διακλάδωση υπό συνθήκη άλμα (διακλάδωση χωρίς συνθήκη) κλήση υπορουτίνας επιστροφή υπορουτίνας 28
Διακλάδωση υπό συνθήκη Εντολή: br (Rj op Rk), displ 1. Σύγκριση: R j op R k στο στάδιο EX (ίσως στο ID, αν η σύγκριση είναι απλή) 2. αν χρειάζεται, υπολογισμός: PC + displ γίνεται πρότερα στο στάδιο ID με επιπλέον ALU 3. αν χρειάζεται, εγγραφή νέας τιμής στο PC 29
Διοχέτευση και διακλάδωση 30
Ποινή διακλάδωσης Η καθυστέρηση που προκαλεί μια διακλάδωση ονομάζεται ποινή διακλάδωσης branch penalty Ακόμα και ένας κύκλος ποινής προκαλεί απώλεια επίδοσης 10%- 30% ανάλογα με τη συχνότητα εντολών διακλάδωσης και τη κατεύθυνση που ακολουθούν Αν η απόφαση της κατεύθυνσης και ο προορισμός υπολογίζονται ταυτόχρονα στο στάδιο ID Σε άλλες αρχιτεκτονικές ή υλοποιήσεις μπορεί να υπολογίζονται σε διαφορετικούς κύκλους και αργότερα 31
Χειρισμός διακλαδώσεων Αναβολλή προσκόμισης όταν γνωρίζουμε ότι η εντολή είναι διακλάδωση: 1 κύκλο μετά! πιθανό κέρδος μόνο σε κατανάλωση ενέργειας Υπόθεση ότι δεν θα ακολουθηθεί (predict not- taken) συνέχιση προσκόμισης, μέχρι να έχουμε το αποτέλεσμα της συνθήκης ακύρωση των λάθος εντολών, αν η συνθήκη ισχύει Υπόθεση ότι θα ακολουθηθεί (predict taken) όταν γνωρίζουμε ότι η εντολή είναι διακλάδωση χρήσιμο αν ο υπολογισμός του προορισμού γίνεται πριν τον υπολογισμό της συνθήκης Καλύτερα: δυναμική πρόβλεψη θα εξεταστεί αργότερα 32
Αλλοι κίνδυνοι ελέγχου Διακοπή ροής προγράμματος από απρόβλεπτες καταστάσεις (excep ons, interrupts) π.χ. υπερχειλίσεις, page faults, διακοπές από περιφερειακά Οι διακοπές διαχειρίζονται από το Λ.Σ. με βοήθεια από το υλικό σταματά η εκτέλεση του προγράμματος τρέχει ο χειριστής διακοπών του Λ.Σ. ξαναξεκινά η εκτέλεση του προγράμματος, αν το επιτρέπει το Λ.Σ. Αποθήκευση «κατάστασης» τιμές καταχωρητών, PC Πρέπει το πρόγραμμα να μπορεί να συνεχίσει από το σημείο που διακόπηκε 33
Ακριβείς διακοπές precise excep ons Χρήσιμες για εύκολη αποθήκευση κατάστασης διεργασίας και γρήγορη εξυπηρέτησης της διακοπής. Εστω ότι η διακοπή προκαλείται από i- οστή εντολή Συνθήκες για precise excep ons: Οι προηγούμενες εντολές (i- 1, ) ολοκληρώνουν την εκτέλεσή τους και αποθηκεύουν τα αποτελέσματά τους Η εντολή i και οι επόμενες ακυρώνονται (no- op), χωρίς να έχουν αποθηκεύσει αποτελέσματα Η διεύθυνση της εντολής i κρατείται ως το PC της διεργασίας 34
Υλοποίηση precise excep ons Οταν ανιχνευθεί excep on: η εντολή που το προκαλεί παίρνει ένα σημάδι (flag) που την ακολουθεί μέχρι το τελευταίο στάδιο οι επόμενες εντολές ακυρώνονται σταματά η προσκόμιση εντολών αφήνουμε τη διοχέτευση να αδειάσει δλδ η σημαδεμένη εντολή να φτάσει στο τελευταίο στάδιο θέτουμε το excep on PC = διεύθυνση της εντολής που προκάλεσε excep on 35
Εναλλακτικές οργ. διοχέτευσης Προβλήματα της οργάνωσης που εξετάσαμε 1 κύκλος καθυστέρη load- use Αριθμητικές εντολές δεν κάνουν τίποτα στο MEM χρειάζονται forwarding paths Εναλλακτική ιδέα: 3 ο στάδιο μόνο για υπολογισμό διεύθυνσης (AG) επιπλέον αθροιστής 4 ο στάδιο για προσπέλαση μνήμης ή αριθμ. εντολές (MEM- EX) μετακίνηση της ALU στο 4 ο στάδιο 36
Βάθος διοχέτευσης Η διοχέτευση 5 σταδίων χρησιμοποιείται ελάχιστα πλέον π.χ. σε φτηνούς μικροελεγκτές Θα εξετάσουμε τα στάδια IF, ID, ΜΕΜ, WB αργότερα Το στάδιο EX περιλαμβάνει διάφορα είδη λειτουργικών μονάδων (func onal unit) γρήγορες ακέραιες αριθμητικές λογικές μονάδες αργές ακέραιες αριθμητικές μονάδες: πολλαπλασιαστές, διαιρέτες μονάδες κινητής υποδιαστολής 37
Διοχετ. λειτουργικές μονάδες Καθυστέρηση/Latency: αριθμός κύκλων που απαιτούνται μεταξύ της εντολής που παράγει ένα αποτέλεσμα και αυτής που το χρησιμοποιεί Integer ALU latency = 0! Η επόμενη εντολή μπορεί να χρησιμοποιήσει το αποτέλεσμα της προηγούμενης (με προώθηση) Γενικά είναι: βάθος διοχέτευσης (της μονάδας) - 1 Υποθέτουμε ότι η εντολή «καταναλωτής» χρειάζεται το αποτέλεσμα στο στάδιο EX. Αν το χρειάζεται στο MEM (εντολή store), η καθυστέρηση είναι 1 κύκλο μικρότερη Αν το χρειάζεται στο ID (σύγκριση για διακλάδωση) η καθυστέρηση είναι 1 κύκλο μεγαλύτερη 38
Διοχετ. λειτουργικές μονάδες Ini a on/repeat interval (μεσοδιάστημα έναρξης): αριθμός κύκλων για εκκίνηση (issue) εντολών του ίδιου τύπου (εννοείται ανεξάρτητη εντολή) Integer unit: ini a on interval = 1 - σε κάθε κύκλο μπορούμε να ξεκινήσουμε μια νέα εντολή 39
Υλοποίηση Integer unit EX M1 FP/integer multiply M2 M3 M4 M5 M6 M7 IF ID MEM WB FP adder A1 A2 A3 A4 FP/integer divider DIV 40
Επόμενη φορά Υπόβαθρο: κρυφές μνήμες (+ βοήθεια υλικού για εικονική μνήμη) 41