Υ- 01 Αρχιτεκτονική Υπολογιστών Υπερβαθμωτοι επεξεργαστές Αρης Ευθυμίου
Το σημερινό μάθημα Υπερβαθμωτοί επεξεργαστές (superscalar) Εκτέλεση σε σειρά Εκτέλεση εκτός σειράς Alpha 21164 Scoreboard Μετονομασία καταχωρητών Αλγόριθμος Tomasulo 2
Αύξηση ταχύτητας επεξεργαστή CPU Time = Instruction Count CPI Clock Cycle Time Χωρίς αλλαγές στο ISA (σετ εντολών), compiler: Είτε μείωση CPI (αύξηση IPC) περισσότερες εντολές ανά κύκλο πιο πλατιά (wider) διοχέτευση οι επεξεργαστές ονομάζονται υπερβαθμωτοί (superscalar) Είτε μείωση cycle eme λιγότερη δουλειά ανά στάδιο βαθύτερη (deeper) διοχέτευση 3
Ορολογία, είδη υπερβαθμωτών Front- end αντιστοιχεί στα στάδια IF, ID m- way superscalar: προσκομίζονται m εντολές ανά κύκλο Back- end αντιστοιχεί στα στάδια EX, MEM, WB μπορεί να διαχειριστεί > 1 εντολές ανά κύκλο In- order superscalar οι εντολές φεύγουν από το front- end στη σειρά προγράμματος όλες οι εξαρτήσεις ικανοποιούνται πριν φύγει μια εντολή Out- of- Order (OoO) (ή dynamic) superscalar εντολές μπορούν να φύγουν από το front- end εκτός σειράς προγράμματος Το στάδιο WB (commit) σιγουρεύει ότι τα αποτελέσματα αποθηκεύονται με τη σειρά του προγράμματος 4
Παραλ. επιπέδου εντολών (ILP) Εξαρτήσεις RAW περιορίζουν τις επιλογές m εντολών για παράλληλη εκτέλεση ειδικά για in- order επεξεργαστές στους out- of- order η πολυπλοκότητα αυξάνει γρήγορα με το m Για n funceonal units, απαιτούνται n 2 forwarding paths Μεγάλο βάθος διοχέτευσης προκαλεί συχνά stalls load- use penalty μεγαλώνει αν σπάσουν τα στάδια EX, MEM σε υποστάδια παρόμοια για την ποινή διακλάδωσης Υπάρχει ένα άνω όριο για το πλάτος και το βάθος της διοχέτευσης 5
Speed demons, brainiacs Στη δεκαετία του 90 ακολουθήθηκαν 2 κατευθύνσεις: Speed demons in- order, με μεγάλο βάθος διοχέτευσης στόχευαν σε μικρό κύκλο ρολογιού Brainiacs out- of- order, με μικρό βάθος διοχέτευσης στόχευαν σε μικρό CPI (μεγάλο IPC) Μέχρι τα μισά της δεκαετίας του 90, οι speed demons ήταν καλύτεροι, μετά επικράτησαν οι brainiacs 6
Alpha 21164 (in- order s. scalar) Integer pipe 1 any arith- logic, addr- gen shi, mult Integer pipe 2 any arith- logic, addr- gen branches Floaeng point pipe 1 fp mult Floaeng point pipe 2 other mult (incl division) 7
Διοχέτευση Alpha21164 Integer latency (except mult): 1 κύκλος (για forwarding) S4 EX, S5 MEM (idle), S6 WB FP latency (except div): 4 κύκλοι Branch resolueon at S5, 6 κύκλοι ποινή διακλάδωσης Memory transfer L1 $ (cache) hit, 3 κύκλοι (2 latency) L2 $ hit, +6 κύκλοι 8
Alpha21164, Front- end S0 Προσπέλαση Ι$ (instruceon cache) μέχρι 4 εντολές σε έναν από τους 2 Instruceon Buffers (IB) S1 Πρόβλεψη διακλάδωσης υπολογισμός στόχου διακλάδωσης (branch target address) επιβεβαίωση προσπέλασης I$ (αν είναι hit) S2 SloŠng προωθεί εντολές που δεν έχουν δομικές εξαρτήσεις στο S3 (staec conflict resolueon) π.χ. μέχρι 2 integer instruceons ταυτόχρονα S3 Issue προωθεί εντολές προς εκτέλεση μόνο αν δεν έχουν εξαρτήσεις (dynamic conflict resolueon) 9
S3 στάδιο issue (εκκίνησης) Δεν προωθεί εντολές αν δεν έχουν επιλυθεί οι κίνδυνοι ή γνωρίζουμε ότι θα γίνει προώθηση δεδομένων Οι καθυστερήσεις είναι γνωστές και οι εντολές θα ολοκληρώσουν την εκτέλεσή τους, εκτός προσπελάσεις μνήμης. Εικάζουμε (speculate) hit λάθος πρόβλεψη προηγούμενης διακλάδωσης πρόκληση διακοπής Ο έλεγχος κινδύνων γίνεται με μηχανισμό scoreboard πίνακας ελέγχου που κρατά όλες τις πληροφορίες εξαρτήσεων χρησιμοποιήθηκε πρώτα στο CDC 660 10
Παράδειγμα Στάδιο S2 (κύκλος 1 ος ): i1, i2 δεν έχουν δομικούς κινδύνους - > S3 i3 χρειάζεται integer pipe - > παραμένει i4 ακολουθεί i3 - > παραμένει Στάδιο S3 (κύκλος 2 ος ) i2 εξαρτάται από την i1 - > περιμένει (1 κύκλο) Σταματούν S0, S1 11
Scoreboard Κρατά όλες τις απαραίτητες πληροφορίες για να γνωρίζουμε τις εξαρτήσεις μεταξύ εντολών ώστε να μη συμβούν λάθη Κάθε εντολή «περνά» μέσα από το scoreboard στο στάδιο issue και καταγράφονται οι εξαρτήσεις της Το scoreboard καθορίζει πότε μια εντολή μπορεί να διαβάσει τους τελεστέους της και να αρχίσει να εκτελείται Επίσης καθορίζει πότε θα γράψει το αποτέλεσμα στο καταχωρητή προορισμού 12
Εκκίνηση Αν υπάρχει διαθέσιμη μονάδα εκτέλεσης (funceonal unit) και καμία ήδη εκκινημένη εντολή δεν γράφει αποτέλεσμα στον ίδιο καταχωρητή, γίνεται εκκίνηση της εντολής Αλλιώς παγώνει το στάδιο εκκίνησης και τα προηγούμενα Μερικοί ονομάζουν αυτό το στάδιο (και τη πράξη) dispatch (αποστολή) 13
Ανάγνωση τελεστέων Το scoreboard παρακολουθεί πότε οι τελεστέοι μιας εκκινημένης εντολής είναι διαθέσιμοι αν καμιά εντολή που εκκινήθηκε νωρίτερα πρόκειται να τον γράψει Οταν όλοι οι τελεστέοι μιας εντολής είναι διαθέσιμοι, το scoreboard ενημερώνει τη μονάδα εκτέλεσης να προχωρήσει στην ανάγνωση των τελεστέων και να αρχίσει την εκτέλεση της εντολής 14
Εκτέλεση, εγγραφή αποτελεσμάτων Η εκτέλεση, γενικά, διαρκεί έναν αριθμό από κύκλους π.χ. πολλαπλασιασμός, διαίρεση Οταν τελειώσει, «ενημερώνει» το scoreboard στον Alpha οι καθυστερήσεις είναι γνωστές εξαρχής To scoreboard δίνει οδηγία για εγγραφή αποτελεσμάτων Παγώνει την εγγραφή αν υπάρχει κίνδυνος WAR κάποια εντολή χρειάζεται ακόμα τη παλιά τιμή του καταχωρητή 15
Παράδειγμα scoreboard Registers Data buses FP mult FP mult 10 cycle latency FP divide 40 cycle latency FP add 2 cycle latency Integer unit Control/ status Scoreboard Control/ status 16
Cycle: 1 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D F6, 34(R2) F2, 45(R3) F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer yes Load F2 R3 Mult1 yes Mult F0 F2 F4 Integer yes Mult2 Add yes Sub F8 F6 F2 Integer yes Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Integer Add Divide 17
Cycle: 2 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D F6, 34(R2) F2, 45(R3) F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Integer yes Mult2 Add yes Sub F8 F6 F2 Integer yes Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 18
Cycle: 3 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Sub F8 F6 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 19
Cycle: 5 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Sub F8 F6 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 20
Cycle: 6 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Yes Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 21
Cycle: 7 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) L.D F2, 45(R3) MUL.D F0, F2, F4 SUB.D F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 22
Cycle: 9 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Can t write result WAR hazard Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 23
Cycle: 13 Instruction status Instruction Issue Read operands Execution complete Write result L.D F6, 34(R2) started at cycle 3 L.D MUL.D SUB.D F2, 45(R3) F0, F2, F4 F8, F6, F2 DIV.D F10, F0, F6 ADD.D F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 yes Mult F0 F2 F4 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Mult1 yes Register result status FU F0 F2 F4 F6 F8 F10... Mult1 Add Divide 24
Cycle: 14 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add yes Add F6 F8 F2 Divide yes Div F10 F0 F6 Yes yes Register result status FU F0 F2 F4 F6 F8 F10... Add Divide 25
Cycle: 15 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add Divide yes Div F10 F0 F6 Register result status FU F0 F2 F4 F6 F8 F10... Divide 26
Cycle: 55 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add Divide yes Div F10 F0 F6 Register result status FU F0 F2 F4 F6 F8 F10... Divide 27
Cycle: 56 Instruction status Instruction Issue Read operands Execution complete Write result L.D L.D MUL.D SUB.D DIV.D ADD.D F6, 34(R2) F2, 45(R3) F0, F2, F4 F8, F6, F2 F10, F0, F6 F6, F8, F2 Functional unit status Unit name Busy Op Fi Fj Fk Qj Qk Rj Rk Integer Mult1 Mult2 Add Divide Register result status FU F0 F2 F4 F6 F8 F10... 28
Scoreboard rules 29
Κόστος scoreboarding Το scoreboard χρειάζεται περίπου τόσες λογικές πύλες όσο μια λειτουργική μονάδα Χρειάζονται 2 busses για ανάγνωση τελεστέων για κάθε λειτουργική μονάδα και οι αντίστοιχες θύρες στο αρχείο καταχωρητών Χρειάζεται 1 bus για εγγραφή για κάθε λειτουργική μονάδα και θύρες 30
Εξαρτήσεις ονομάτων Σχετικά λίγοι «αρχιτεκτονικοί καταχωρητές» (ή logical) απαιτούν χώρο στη κωδικοποίηση εντολών: 32 καταχωρητές - 5 bit, x3 (2 πηγές, 1 προορισμός) Ο μεταγλωτιστής προσπαθεί να τους χρησιμοποιήσει όσο περισσότερο γίνεται για να αποφύγει προσπελάσεις μνήμης Επαναχρησιμοποίηση καταχωρητών (ονομάτων) για δεδομένα που δεν έχουν σχέση μεταξύ τους Οι εξαρτήσεις ονομάτων προκαλούν κινδύνους WAR, WAW οι κίνδυνοι εξαφανίζονται αν εξαφανιστούν οι εξαρτήσεις ονομάτων Τεχνική μετονομασίας καταχωρητών αντιστοίχιση/αντικατάσταση αρχιτεκτονικών με φυσικούς καταχωρητές 31
Παράδειγμα i1, i2: RAW i2, i3 & i2,i4: WAR i1,i4: WAW Παρατηρήσεις: Η i1 είναι διαίρεση. Διαρκεί πολλούς κύκλους Η i2 πρέπει να περιμένει το αποτέλεσμα της διαίρεσης Οι i3, i4 είναι ανεξάρτητες από τις προηγούμενες ως προς τη «μεταφορά» αποτελεσμάτων αλλά έχουν εξαρτήσεις ονομάτων! 32
Μετονομασία καταχωρητών Rename: πίνακας αντιστοίχισης λογικών σε φυσικούς καταχωρητές Freelist: λίστα διαθέσιμων φυσικών καταχωρητών Μετονομασία R i <-R j op R k σε R a <-R b op R c R a = Freelist() R b = Rename[R j ] R c = Rename[R k ] Rename[R i ] = R a Η μετονομασία γίνεται κατά την αποκωδικοποίηση συχνά ως χωριστό στάδιο διοχέτευσης 33
Παράδειγμα (συνέχεια) i1: R1_a <- R2 / R3 i2: R4_a <- R1_a + R5 i3: R5_a <- R6 + R7 i4: R1_b <- R8 + R9 Τώρα οι i3, i4 είναι ανεξάρτητες και μπορούν να εκτελεστούν πριν τελειώσει η διαίρεση (i1) και η i2 34
Εικασία (speculaeon) Το κύριο πρόβλημα που παραμένει είναι οι διακλαδώσεις Η πρόβλεψη διακλάδωσης βοήθησε ώστε να προσκομίζουμε εντολές πίσω (μετά) από τη διακλάδωση, πρίν εκτελέσουμε την διακλάδωση Αλλά για να εκτελέσουμε εντολές μετά τη διακλάδωση πρέπει να περιμένουμε το αποτέλεσμά της Με εκτέλεση εικασίας, εκτελούμε εντολές μετά από τη διακλάδωση σαν να είχαμε προβλέψει σωστά πρέπει να μπορούμε να αναιρούμε εντολές που δεν έπρεπε να εκτελεστούν 35
Βασικές ιδέες Ξεχωρίζουμε τις πράξεις: παράδοσης αποτελέσματος σε άλλες εντολές που το περιμένουν ολοκλήρωσης της εντολής Μπορούμε να επιτρέψουμε την παράδοση αποτελεσμάτων εντολών που εκτελούνται με «εικασία»... αλλά όχι την αλλαγή αρχιτεκτονικών- καταχωρητών / μνήμης που δεν μπορούν να αναιρεθούν Συγκεκριμένα επιτρέπουμε αλλαγές στους αρχιτεκτονικούς καταχωρητές και στη μνήμη, μόνο από εντολές που (σίγουρα) ολοκληρώνονται Νέο στάδιο commit ή reere (υποβολή, δέσμευση) Οι εντολές ξεκινούν και εκτελούνται εκτός σειράς, αλλά κάνουν commit στη σειρά προγράμματος 36
Reorder buffer Χρειάζεται ένα είδος ουράς που κρατά τα αποτελέσματα από τη στιγμή που υπολογίζονται μέχρι η εντολή να κάνει commit Ονομάζεται reorder buffer (ROB) Κύρια πεδία είδος εντολής (αρχιτεκτονικός) καταχωρητής προορισμού τιμή αποτελέσματος έτοιμο αποτέλεσμα 37
Λειτουργία ROB Στο στάδιο μετονομασίας κάθε εντολή παίρνει, με τη σειρά, μια θέση στο ROB Μετά την εκτέλεσή της, γράφει το αποτέλεσμα στη θέση της στο ROB επόμενες εντολές μπορούν πλέον να πάρουν το αποτέλεσμα και να εκτελεστούν Το στάδιο commit, εξετάζει τη κορυφή του ROB και αν δείχνει ότι η εντολή έχει ολοκληρωθεί: αντιγράφει την τιμή στον αρχιτεκτονικό καταχωρητή ελευθερώνει τη θέση του ROB 38
Reservaeon staeons Πού περιμένουν οι εντολές για να εκτελεστούν; Μετά τη μετονομασία και εισαγωγή στο ROB, κάθε εντολή αποστέλνεται (dispatch) σε ένα σταθμό κράτησης (reservaeon staeon), που περιέχει: το είδος της πράξης τις τιμές τελεσταίων ή τα ονόματα φυσικών καταχωρητών το όνομα φυσικού καταχωρητή για το αποτέλεσμα τη θέση της εντολής στο ROB Τα reservaeon staeons μπορεί να είναι όλα συγκεντρωμένα σε ένα instruceon window ή να αντιστοιχούν σε funceonal units (ή ομάδες f.u.) 39
Issue Πώς γνωρίζουν οι εντολές ότι είναι έτοιμες για εκτέλεση; Κατά τη μετονομασία, σε κάθε φυσικό καταχωρητή προορισμού, τίθεται ένα σημάδι ότι δεν είναι έτοιμο το αποτέλεσμα Μετά την εκτέλεση το σημάδι σβήνεται Οταν μια εντολή αποστέλεται (dispatch) στο reservaeon staeon, ελέγχει και τα σημάδια των τελεσταίων της αν όλοι οι τελεσταίοι είναι έτοιμοι, τότε και η εντολή είναι έτοιμη Μετά την εκτέλεση το αποτέλεσμα και το όνομα φυσικού καταχωρητή εκπέμπεται σε όλα τα reservaeon staeons όποιο περιμένει αυτόν τον καταχωρητή, κρατάει το αποτέλεσμα 40
«Αλγόριθμος» Tomasulo Διπλή χρηση για ROB: υλοποιεί και τους φυσικούς καταχωρητές Rx αρχιτεκτονικοί καταχωρητές Ex φυσικοί καταχωρητές (θέσεις στο ROB) τα ονόματά τους λέγονται και tags 41
Παράδειγμα Mult, add latency: 4, 1 κύκλοι Υποθ. 1 εντολή αποκωδικοποιείται ανά κύκλο Mult (add) decode at eme t0, dispatch t 0 +1 (t 0 +1) issue t 0 +2 (t 0 +2) broadcast t 0 +6 (t 0 +3) commit t 0 +7 (t 0 +4) 42
cycle:1 43
cycle:2 44
cycle:3 45
cycle:4 46
cycle:5 47
cycle:6 48
cycle:7 49
cycle:11 50