Υ- 01 Αρχιτεκτονική Υπολογιστών Πρόβλεψη διακλάδωσης Αρης Ευθυμίου
Το σημερινό μάθημα Πρόβλεψη διακλάδωσης (branch predicfon) ποιο είναι το πρόβλημα και τι προκαλεί πρόβλεψη κατεύθυνσης πρόβλεψη στόχου 2
Τι προκαλεί το πρόβλημα; Πρέπει να εκτελεστεί η εντολή διακλάδωσης για να καθοριστεί η σωστή επόμενη διεύθυνση προγράμματος Με τη διοχέτευση, το αποτέλεσμα της εκτέλεσης καθυστερεί κάποιους κύκλους οι επόμενες θέσεις (slots) της διοχέτευσης μπορεί να μη κάνουν χρήσιμη δουλειά 3
Ποιό είναι το αποτέλεσμα; Οι διακλαδώσεις μειώνουν την επίδοση Διοχέτευση: άδειασμα «λάθος» εντολών πίσω από τη διακλάδωση χαμένες ευκαιρίες για εκτέλεση χρήσιμων εντολών Υπερβαθμωτοί επεξεργαστές: όπως παραπάνω x πλάτος του επεξεργαστή Υπερβαθμωτοί με εκτέλεση εκτός σειράς: χρειάζονται εκτέλεση εντολών πέρα από ένα basic block Εντάξει, είναι προβληματικές, αλλά πόσο συχνές είναι: πολύ! Κάθε 5-8 εντολές υπάρχει διακλάδωση 4
Πώς το λύνουμε; Το κύριο πρόβλημα είναι η διοχέτευση αλλά είναι απαραίτητη για καλή επίδοση με μικρό κόστος δεν συμφέρει να μήν έχουμε διοχέτευση Προβλέπουμε τι θα κάνει η διακλάδωση αλλά πρέπει να μπορούμε να αναιρέσουμε τις εντολές, αν προβλέψαμε λάθος έχουμε ήδη τέτοιους μηχανισμούς: reorder buffer 5
Πρόβλεψη Στατική πρόβλεψη (δεν αλλάζει κατά την εκτέλεση) Βοήθεια από τον compiler σε εντολή διακλάδωσης, 1 bit υπαινίσσεται την κατεύθυνση είτε στατικά από πληροφορία κατά τη μεταγλώτιση ή με profiling Παρατήρηση: διακλαδώσεις προς τα πίσω (προηγούμενες εντολές) υπονοούν βρόγχους πιθανότατα ακολουθούνται τις περισσότερες φορές Δυναμική πρόβλεψη προηγούμενη συμπεριφορά ισχυρή ένδειξη για το μέλλον οπως συχνά στους Η/Υ (και αλλού) προβλέπουμε το μέλλον παρατηρώντας το παρελθόν 6
Μέτρα επίδοσης πρόβλεψης MispredicFon rate: λάθος προβλέψεις / αριθμός εντολών διακλάδωσης MispredicFons per InstrucFon MPI, MPKI μπορεί να χρησιμοποιηθεί για υπολογισμό επίδοσης αν γνωρίζουμε CPI, ποινή λάθους πρόβλεψης,... MPI = 1%, IPC = 2, flush Penalty = 10 Cycles MPI = 1% Squash every 100 εντολές Αλλά IPC = 2, άρα κάθε 50 κύκλους, χάνουμε 10 Απώλεια επίδοσης: 20% 7
Ζητούμενη επίδοση Εστω διακλάδωση κάθε 5 εντολές MispredicFon rate = p H πιθανότητα να βρισκόμαστε στη σωστή διεύθυνση μετά από n εντολές (1- p) (n/5) Μετά από 100 εντολές:.90 = 12%.95 = 36%.98 = 66%.99 = 82% Χρειάζεται εξαιρετικά καλή πρόβλεψη 8
Ανατομία εντολών διακλάδωσης Διακλάδωση με συνθήκη ή χωρίς Με συνθήκη: άγνωστοι: κατεύθυνση και στόχος (direcfon, target) Χωρίς συνθήκη: άγνωστος: στόχος Ο στόχος καθορίζεται άμεσα ή έμμεσα (direct, indirect) Direct: υπολογισμός: PC+σταθερά Indirect: στόχος συνήθως τιμή κάποιου καταχωρητή 9
«Αλγόριθμος» Front end: 1. Αναγνώρισε εντολή διακλάδωσης Αν δεν είναι διακλάδωση, τέλος 2. Πρόβλεψε κατεύθυνση Αν δεν ακολουθείται (not taken), συνέχισε από την επόμενη εντολή στη μνήμη και εκτέλεσε με εικασία μέχρι να επιβεβαιωθεί η πρόβλεψη. (τέλος) 3. Πρόβλεψε στόχο 4. Προσκόμισε εντολές από το στόχο και εκτέλεσε με εικασία Back- end: 1. Επιβεβαίωσε την πρόβλεψη. Αν ήταν λάθος, αναίρεσε όλες τις εντολές και προσκόμισε από τη σωστή διεύθυνση 2. Ενημέρωσε τις πληροφορίες για την διακλάδωση 10
Χρονισμός υπολογισμών Πότε γνωρίζουμε ότι η εντολή είναι διακλάδωση; στο στάδιο αποκωδικοποίησης (πρός το τέλος) τουλάχιστον 1 κύκλο μετά τη προσκόμιση της εντολής Πότε υπολογίζουμε το στόχο; το νωρίτερο στο στάδιο decode, πριν γνωρίζουμε ότι η εντολή είναι διακλάδωση Πότε υπολογίζουμε το αποτέλεσμα; κατά την εκτέλεση 11
Χρονισμός 12
Αναγνώριση διακλάδωσης Στο στάδιο αποκωδικοποίησης είναι πολύ αργά ήδη προσκομίζουμε την επόμενη σε σύγχρονους υπολογιστές η προσκόμιση χρειάζεται >1 κύκλο για υπερβαθμωτούς: x πλάτος Μέχρι το τέλος της (1 ου κύκλου) προσκόμισης, πρέπει να έχουμε υπολογίσει το επόμενο PC (next PC, NPC) αλλά η εντολή δεν είναι ακόμη διαθέσιμη Το μόνο που έχουμε είναι η τιμή του PC οποιαδήποτε άλλη πληροφορία, πρέπει να προϋπάρχει π.χ. τα αποτελέσματα των προηγούμενων διακλαδώσεων 13
Last outcome predictor Ο απλούστερος predictor, κρατά το προηγούμενο αποτέλεσμα σε ένα πίνακα διευθυνσιοδοτημένο (κάπως) με τον PC 1 bit είναι αρκετό, λέγεται και 1- bit predictor Διαφορετικό από τον «0- bit predictor» που επιλέγει την κατεύθυνση της πρώτης εκτέλεσης της διακλάδωσης Πρόβλημα: αρκετά λάθη για προβλέψιμες διακλαδώσεις όπως στο τέλος ενός βρόγχου 14
SaturaFng counter, bimodal Ο 1- bit άλλαζε γνώμη πολύ γρήγορα Με 2 bit που λειτουργούν ως μετρητής, λύνεται το προηγούμενο πρόβλημα Υπάρχουν παραλλαγές αυτομάτων (γράφων μετάβασης κατάστασης) με παρόμοια αποτελέσματα ακρίβειας 15
Αποθήκευση προβλέψεων Ιδανικά ένας μεγάλος πίνακας με 2 bit για κάθε διεύθυνση εντολής προγράμματος τεράστιος! Οργάνωση σαν κρυφή μνήμη; μέρος του PC για διεύθυνση, το υπόλοιπο ως tag Πολύ ακριβό: 2 bit πληροφορίας και πολλά επιπλέον για το tag Οργάνωση σαν «Cache» χωρίς tags (PredicFon History Table PHT) Aliasing: πολλαπλές διακλαδώσεις αντιστοιχούν στην ίδια σειρά το ίδιο «αυτόματο» ConstrucFve aliasing: οι διακλαδώσεις έχουν ίδια συμπεριφορά DestrucFve aliasing: διαφορετική συμπεριφορά 16
Πρόβλεψη με μοτίβα Παράδειγμα: for i = 0 to N for j = 0 to 3 Η (τελική) διακλάδωση του βρόγχου j: 11101110111011101110 Μοτίβα: 111 - > 0, 110 - > 1 101 - > 1, 011 - > 1 100% ακρίβεια πρόβλεψης, εκμάθηση μετά από 4 φορές Χρειάζεται η διεύθυνση και τα αποτελέσματα των n τελευταίων εκτελέσεων της διακλάδωσης local history 17
CorrelaFng branch predictors Οι predictors που εξετάσαμε χρησιμοποιούν την πληροφορία από τις προηγούμενες εκτελέσεις της διακλάδωσης για να μαντέψουν το μέλλον (local informafon) Συχνά η ακρίβεια πρόβλεψης βελτιώνεται εξετάζοντας τη συμπεριφορά άλλων διακλαδώσεων 18
CorrelaFng branch predictors Πώς παίρνει υπόψη τις κατευθύνσεις των m προηγούμενων διακλαδώσεων (m- bit global history)? Σχηματίζει διεύθυνση για το PHT χρησιμοποιώντας m bits από τις προηγούμενες κατευθύνσεις (π.χ. 0- untaken, 1- taken) και, συχνά, κάποια bits από το PC. Η πληροφορία για τις m προηγούμενες διακλαδώσεις κρατιέται στον Global History Register (GHR) ένας απλός καταχωρητής ολίσθησης (shi - register) μήκους m bits το αποτέλεσμα κάθε διακλάδωσης καταγράφεται και το παλιότερο αποτέλεσμα χάνεται Ονομάζονται predictors 2 επιπέδων 1 ο χρησιμοποιεί τα μοτίβα, 2 ο την πληροφορία του «αυτόματου» GHR xor PC, ονομάζεται gshare predictor 19
2- level predictors Global- global (GAg) Global BHR Prediction Set- global (PAg) PC BHR BHR BHR BHR Prediction 20
2- level predictors Global- set (GAp) Set- set (PAp) 21
2- level predictors 22
Ενημέρωση πληροφορίας Οταν εκτελεστεί η διακλάδωση πρέπει να ενημερώσει τους πίνακες πληροφορίας PHT, GHR, BHRs Πότε ακριβώς; Μετά την εκτέλεση (επιβεβαίωση) της διακλάδωσης μπορεί να ακυρωθεί αν μια προηγούμενη διακλάδωση έχει προβλέψει λάθος Οταν η διακλάδωση φτάσει στο στάδιο commit οι επόμενες διακλαδώσεις, μέσα στη διοχέτευση, δεν μπορούν να εκμεταλευτούν τις συσχετίσεις Με εικασία, αμέσως μετά τη πρόβλεψη λάθος ενημερώσεις πρέπει να διορθώνονται 23
Ενημέρωση και διόρθωση Γενικά ενημέρωση με εικασία και, πιθανή, διόρθωση (repair) του PHT (των αυτομάτων) δεν έχει μεγάλο όφελος ενημέρωση στο στάδιο commit Ενημέρωση με εικασία και διόρθωση για τον GHR είναι χρήσιμη αλλά χωρίς διόρθωση δεν είναι! Χρειάζεται μια ουρά από τους GHR 24
Πρόβλεψη στόχου Εκτός από τη κατεύθυνση, πρέπει να προβλεφτεί και ο στόχος (διεύθυνση επόμενης εντολής) Δεν είναι απαραίτητο για απλές μηχανές/διοχετεύσεις υπολογίζεται στο 2 ο στάδιο, decode Αλλά για superscalar αυτό γίνεται ακριβό: 1 αθροιστής ανά εντολή και για βαθύτερη διοχέτευση, χάνονται instrucfon slots Προσθήκη της διεύθυνσης στόχου σε κάθε καταχώρηση του PHT; Αν η πρόβλεψη είναι taken, επιβεβαιωθεί κατά την εκτέλεση της διακλάδωσης, αλλά ο στόχος είναι από aliased διακλάδωση,... 25
Branch Target Buffer Μια, σχετικά μικρή, κρυφή μνήμη που περιέχει τις διευθύνσεις στόχους με tags για να μην έχουμε aliasing μπορεί να έχει συσχετιστικότητα > 1 Μπορεί να περιλαμβάνει (integrate) και λειτουργία πρόβλεψης κατεύθυνσης αλλά έχει λιγότερες καταχωρήσεις - > μικρότερη ακρίβεια Συνήθως καταγράφει μόνο taken διακλαδώσεις για τις non- taken δεν χρειαζόμαστε στόχο! 26
BTB και πρόβλεψη κατεύθυνσης 27
Λάθη πρόβλεψης misfetch misfetch 28
Επιστροφή υπορουτίνας Είδος indirect branch η διεύθυνση επιστροφής δεν είναι πάντα η ίδια Αλλά εύκολα προβλέψιμες διευθύνσεις στόχοι στοίβα, Return Address Stack Αναγνώριση εντολής επιστροφής υπορουτίνας στο στάδιο decode, χάνονται αρκετά instrucfon slots Αποθήκευση στο BTB με ένδειξη ότι είναι return αγνοεί τη διευθ. στόχου στο BTB και χρησιμοποιεί αυτή της κορυφής του RAS Η πληροφορία στο RAS πρέπει να διορθωθεί αν η ret ήταν εικαζόμενη και ακυρώνεται παρόμοια για call 29
Hybrid/combining predictors Πολλαπλοί predictors, επιλογή του πιο πετυχημένου για κάθε διακλάδωση Συνήθως δύο predictor ένας βασίζεται σε τοπική πληροφορία (για τη συγκεκριμένη διακλάδωση μόνο) ένας σε global πληροφορία (m προηγούμενες διακλαδώσεις) Ο επιλογέας (selector, tournament) διαλέγει ποιού predictor το αποτέλεσμα θα δοθεί ως τελικό συνήθως είναι ένας 2- bit counter (όπως αυτοί στο BHT) που παρακολουθεί ποιός predictor ήταν ο καλύτερος 30
Hybrid predictor 31
Agree predictor Βοηθάει στο aliasing Το BTB έχει ένα bit, bias που δείχνει τη κατεύθυνση της διακλάδωσης Το PHT (aliased) έχει ένα αυτόματο που δείχνει αν συμφωνεί με το bias Δύο strong biased branches που αντιστοιχούν στο ίδιο αυτόματο, δεν αλληλοκαταστρέφονται πλέον! 32
Βi- mode predictor Παρόμοιος με τον agree, αλλά αλλάζει το bias bit δυναμικά (choice predictor) και επιλέγει μεταξύ 2 PHTs, ένα για taken και ένα για not- taken 33
Skew predictor PHT χωρίζεται σε 3, με διαφορετικές hash funcfons, απόφαση με πλειοψηφία Ενημέρωση: Αν όλα τα αυτόματα έκαναν λάθος πρόβλεψη, ή τα 2 με τη σωστή πρόβλεψη 34
YAGS Χρησιμοποιεί το bias bit του choice PHT για τις «εύκολες» προβλέψεις Κρατάει εξαιρέσεις σε 2 caches για τις «δύσκολες» περιπτώσεις. 35