Υ- 01 Αρχιτεκτονική Υπολογιστών Front- end: Προσκόμιση, αποκωδικοποίηση, μετονομασία καταχωρητών Αρης Ευθυμίου
Το σημερινό μάθημα Προσκόμιση (fetch) πολλαπλές εντολές ανά κύκλο Μετονομασία καταχωρητών επιλογές υλοποίησης 2
Προσκόμιση Επεξεργαστής «πλάτους» m Προσκόμιση περίπου m εντολών από τη διεύθυνση του PC σε κάθε κύκλο δηλαδή χρειάζεται μεγάλος ρυθμός προσκόμισης (fetch bandwidth) Γιατί περίπου; <m: μερικές φορές τα επόμενα στάδια δεν μπορούν να τις αποροφήσουν όλες >m: καλύτερα να υπάρχουν πολλές εντολές διαθέσιμες για εκτέλεση - > μεγαλύτερη πιθανότητα εύρεσης ανεξάρτητων εντολών 3
Προβλήματα Αστοχίες κρυφής μνήμης Πολύπλοκα instrucbon set μεταβλητό μέγεθος εντολών Ευθυγράμιση (alignment) στις γραμμές της I$ ίσως να χρειαστεί προσπέλαση σε >1 γραμμές Διακλαδώσεις και άλματα ποιές είναι οι επόμενες (m- 1) εντολές; ανάμεσα στις m εντολές θα υπάρχουν και διακλαδώσεις. 4
Οργάνωση Ι$ Μία ολόκληρη γραμμή μπορεί να προσπελαστεί σε 1 κύκλο Μερικές φορές οι γραμμές «διπλώνονται» σε 2 5
Εξαγωγή m εντολών i-0 i-1 i-2 i-3 i-0 i-1 i-2 i-3 i-0 i-1 i-2 i-3 i-0 i-1 i-2 i-3 i-0 i-1 i-2 i-3 i-0 i-1 i-2 i-3 Αν οι m εντολές έχουν τοποθετηθεί σε 2 γραμμές; Μικρή πιθανότητα αν η γραμμή είναι μεγάλη, αλλά... Εξυπνη τοποθέτηση από compiler θα ισχύει για διαφορετικό επεξεργαστή; 6
Unaligned access Προσπέλαση της γραμμής I$ που αντιστοιχεί στο PC και της επόμενης, ταυτόχρονα 2- θυρη μνήμη, 2x ρυθμός ρολογιού, interleaved banks 0000 L-0 0001 L-1 0010 L-2 0011 L-3 0100 L-4 0101 L-5 0110 L-6 0111 L-7 1000 L-8 1001 L-9 Bank 0 Bank 1 Συνεχόμενες διευθύνσεις βρίσκονται σε διαφορετικά banks Χρειάζεται ελεγχος tag σε κάθε γραμμή - Μπορεί μια γραμμή να έχει αντικατασταθεί 7
Unaligned access σε way- associabve $ IBM RS/6000 8
Περιορισμός λόγω basic block Οι m εντολές δεν είναι πάντα συνεχόμενες ειδικά αν το m είναι μεγάλο 9
Προσκόμιση ως 1 η taken branch Δυνατότητα προσκομισης m συνεχόμενων εντολών ακόμη και αν είναι unaligned Με interleaving (υποθ. m <= cache line size) Ποιές από αυτές αποτελούν το basic block; πού είναι η πρώτη taken διακλάδωση; Χρειάζεται πολλαπλή πρόβλεψη διακλάδωσης ποιές από τις εντολές στις διευθύνσεις Α ώς Α+m είναι taken; Αποτέλεσμα μία «μάσκα» με 1 σε κάθε θέση που έχει χρήσιμη (συνεχόμενη) εντολή Χρειάζεται και (πολλαπλή) προσπέλαση BTB για να είναι διαθέσιμη η διεύθυνση προσκόμισης για τον επόμενο κύκλο Κάποιου είδους collapsing buffer που δίνει μέχρι m συνεχόμενες εντολές 10
Πολλαπλή πρόβλ. διακλάδωσης 1 st Level PHT 2 nd Level GHR 3 rd Branch Prediction 2 nd Branch Prediction 1 st Branch Prediction 11
Σχέδιο υλοποίησης BTB 12
Intra- block branches Με σχετικά μεγάλες γραμμές κρυφής μνήμης και κοντινές διακλαδώσεις, ο στόχος μπορεί να βρίσκεται στην ίδια γραμμή Θα πρέπει το BTB logic να τις ανιχνεύει σύγκριση του, κάθε, target με τα όρια της τρέχουσας γραμμής 13
Fetch beyond 1 taken branch Πρέπει να έχουμε το στόχο της πρώτης διακλάδωσης, πρίν την προσπέλαση στην I$! Στάδιο πρίν το IF, για ΒΤΒ και να μην είναι στο ίδιο bank Κύκλος 1: (πολλαπλή) προσπέλαση ΒΤΒ (και direcbon predictor) από διεύθυνση Α και εύρεση στόχου 1 ης taken branch (έστω Β) Κύκλος 2: προσπέλαση I$ στις διευθύνσεις Α και Β (υποθ. σε διαφ. banks) προσπέλαση BTB (και dir. pred) από τη διεύθυνση Β για να μας δώσει: την τελευταία εντολή του basic block και την επόμενη διεύθυνση προσκόμισης 14
Σχέδιο υλοποίησης Bit Vectors 1 st cache line Branch 2 nd cache line Collapse Aligned and collapsed instruction buffer 15
Trace cache βασική ιδέα Η συμβατική I$ αποθηκεύει εντολές με τη σειρά που διάλεξε ο compiler ευνοεί κώδικα που δεν ακολουθεί διακλαδώσεις συχνά Trace cache: Αποθηκεύει εντολές με τη σειρά που εκτελέστηκαν αν η σειρά είναι ίδια στο μέλλον, οι εντολές είναι συνεχόμενες Trace: σύνολο εντολών οργανωμένο με τη σειρά που «εκτελούνται» Το «κλασικό» υλικό προσκόμισης, υπάρχει και χρησιμοποιείται μόνο για να παρέχει traces στην trace cache όταν αυτή αστοχεί 16
Τι είναι trace Αποτελείται από το πολύ n εντολές και το πολύ m basic blocks Οριο n από το μέγεθος της γραμμής trace cache Οριο m από τον αριθμό των ταυτόχρονων προβλέψεων διακλάδωσης Ενα trace καθορίζεται πλήρως από 1. την αρχική του διεύθυνση 2. τα αποτελέσματα των (m- 1) διακλαδώσεων που περιγράφουν το μονοπάτι που ακολουθήθηκε Η τελευταία εντολή του trace είναι διακλάδωση 17
Οργάνωση I- fetch με trace- cache 18
Θέματα trace- cache Basic blocks εμφανίζονται >1 φορές σε διαφορετικά traces Path associabvity πολλαπλά μονοπάτια που ξεκινούν από την ίδια διεύθυνση parbal- matches αν ένα μέρος των branch flags ταιριάζουν, μπορεί να χρησιμοποιηθεί μέρος του trace; Replacement περιορισμένη χωρητικότητα. Ποιά είναι τα καλύτερα traces; αλγόριθμος αντικατάστασης,... 19
Register rename Τρεις πιθανές επιλογές: Reorder buffer ο ROB κρατά τις τιμές αποτελεσμάτων υπάρχει χωριστός architecture register file (ARF) Monolithic/Unified/Merged register file ένα ενιαίο, μεγάλο αρχείο καταχωρητών οποιοσδήποτε καταχωρητής μπορεί να είναι/αντιστοιχεί σε αρχιτεκτονικό καταχωρητή Extended/Split/Renamed register file χωριστό ARF Ξεχωριστό ή κοινό αρχείο καταχωρητών για floabng point 20
Ανάγνωση τελεσταίων Νωρίς, στο στάδιο dispatch μετά/μαζί με την αποκωδικοποίηση, μετονομασία αν δεν είναι έτοιμη μια τιμή, κρατάμε το «όνομα» (tag) του καταχωρητή που θα πάρει την τιμή συνήθως με reservabon stabons Αργά, στο στάδιο issue αφού γνωρίζουμε ότι η εντολή είναι έτοιμη για εκτέλεση δε χρειάζεται να αποθηκευθούν οι τιμές, μόνο τα «ονόματα» (tags) των καταχωρητών που τις κρατούν συνήθως με instrucbon window 21
Σημαντικά θέματα Register allocate: στο στάδιο Rename/dispatch Register release Πώς γίνεται η αντιστοίχιση Πώς ανακτούμε την παλιά αντιστοίχιση αν έχει γίνει λάθος πρόβλεψη διακλάδωσης ή διακοπή (excepbon); Θύρες ανάγνωσης 2 x dispatch, αναγν. τελεσταίων όταν dispatch 2 x issue, αναγν. τελεσταίων όταν issue + ανάγν. για εντολές που κάνουν commit, για χωριστό ARF Θύρες εγγραφής όσες οι λειτουργικές μονάδες όσες οι εντολές που κάνουν commit για ARF, αν είναι χωριστό 22
Αριθμός καταχωρητών Οσοι το άθροισμα των εντολών που έχουν γίνει dispatch, εκτελούνται, περιμένουν να κάνουν commit δηλαδή ίσο με το μέγεθος του ROB Αρκετά είδη εντολών δεν παράγουν αποτέλεσμα δε χρειάζονται καταχωτητή αποτελέσματος διακλαδώσεις, άλματα, εγγραφές στη μνήμη Συμπέρασμα: το πολύ μέχρι τον αριθμό των θέσεων του ROB 23
Καταστάσεις καταχωρητή Δεν χρειάζεται αντιγραφή αποτελεσμάτων στο ARF 24
Register release i1: R1_a <- R2 / R3 i2: R4_a <- R1_a + R5 i3: R5_a <- R6 + R7 i4: R1_b <- R8 + R9 Πότε ο R1_a θα μπορεί να θεωρηθεί ελεύθερος; Πρέπει όλες οι επόμενες εντολές που τον αναφέρουν ως όρισμα πηγής, να έχουν διαβάσει την τιμή του μετρητής (για κάθε καταχωρητή): αυξάνεται όταν στο στάδιο rename/dispatch αναφέρεται, μειώνεται όταν η εντολή γίνει issue Πώς γνωρίζουμε ότι δεν θα εμφανιστεί εντολή που τον αναφέρει και δεν έχει φτάσει ακόμη στο στάδιο rename Αν ξαναμετονομαστεί ο αρχιτεκτονικός καταχωρητής, δεν μπορεί να υπάρχει εντολή που να χρειάζεται την προηγούμενη τιμή 25
Register release 2 Οι προηγούμενες συνθήκες είναι δύσκολο να υλοποιηθούν ιδιαίτερα οι μετρητές Στη πράξη χρησιμοποιούνται πιο εύκολα υλοποιήσιμες λύσεις όπως: ο καταχωρητής είναι ελεύθερος όταν η εντολή που ξαναμετονόμασε τον ίδιο αρχιτεκτονικό καταχωρητή (Ra), κάνει commit στο παράδειγμα: όταν η i4 κάνει commit, ο R1_a είναι ελεύθερος Χρειάζεται ένας δείκτης στην εντολή που προηγουμένως άλλαξε τον ίδιο αρχ. καταχωρητή από την τρέχουσα αντιστοίχιση του Ra όταν η εντολή είναι στο στάδιο rename 26
Αντιστοίχιση Ξεχωριστό map table (RAM) βολικό για αργή ανάγνωση τελεσταίων Ενσωματομένο με την αποθήκευση τιμών (CAM) 27
Recovering old mapping Σε λάθη πρόβλεψης ή διακοπές, η αντιστοίχιση πρέπει να είναι ακριβής (precise) ROB: ακύρωση όλων των αντιστοιχήσεων Monolithic Single map. rollback Το ROB πρέπει να κρατάει αρκετή πληροφορία Dual map. (Future, Architectural). Αντιγραφή του Architectural στο Future Checkpoinbng. Καταγραφή του map σε κάθε διακλάδωση 28
Προβλήματα ROB- based rename Αρκετή επιπλέον πληροφορία σε κάθε καταχώρηση ακόμη και αν η εντολή δεν έχει αποτελέσματα Στο στάδιο commit χρειάζεται 2 κύκλους ανάγνωση τιμών και εγγραφή στο ARF Πολλές θύρες ανάγνωσης και εγγραφής ο ROB είναι κοινός για integer και floabng- point 29
Αποκωδικοποίηση Δυσκολίες για RISC: υπολογισμός στόχου διακλάδωσης εύρεση εξαρτήσεων εντολών μεταξύ του «πακέτου εντολών» που προσκομίζονται μαζί μετονομασία καταχωρητών «πακέτου εντολών» Δυσκολίες για CISC: μεταβλητό μέγεθος εντολών πολύπλοκες, μικροπρογραμματιζόμενες εντολές 30