ΠΛΕ- 027 Μικροεπεξεργαστές 7ο μάθημα: Αρχιτεκτονική πυρήνα: Πρόβλεψη διακλάδωσης, Εξαιρέσεις Αρης Ευθυμίου
Κόστος διακλαδώσεων Οι διακλαδώσεις έχουν σχετικά μεγάλο κόστος χρόνου Τουλάχιστον ένας κύκλος χαμένος στο MIPS αν πετύχουν Συνήθως πολύ μεγαλύτερο κόστος... Διακλαδώσεις υπάρχουν κάθε 5-8 εντολές Αποφυγή διακλαδώσεων: branch predicayon Ειδικές εντολές μηχανής που εκτελούνται όταν μια συνθήκη (π.χ. τιμή καταχωρητή) είναι αληθινή π.χ. condmove Rd, Rs, Rflag αν η τιμή του Rflag δεν είναι 0, αντέγραψε τον Rs στον Rd Χρήσιμες όταν το κομμάτι κώδικα then ή else είναι μικρό Κρύψιμο ποινής διακλάδωσης: delay slots η εντολή που ακολουθεί την διακλάδωση εκτελείται πάντα ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 2
Delay slots Ιδέα: αφού ο κύκλος μετά τη διακλάδωση είναι χαμένος, δίνουμε μια ευκαιρία στο μεταφραστή να βρεί μια χρήσιμη εντολή που εκτελείται πάντα, είτε η διακλάδωση πετύχει, είτε όχι αλλιώς βάζει μια nop και δεν χάνουμε τίποτα Προβλήματα: Λεπτομέρεια υλοποίησης περνάει στην αρχιτεκτονική Αν αλλάξει η υλοποίηση (πχ. 2 χαμένοι κύκλοι),... Δυσκολεύει την υλοποίηση εκτέλεσης πολλαπλών εντολών σε ένα κύκλο Δυσκολεύει υλοποίηση διακοπών, εξαιρέσεων ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 3
Τι χρειάζεται μια διακλάδωση Διεύθυνση προορισμού Γενικά PC + σταθερά κωδικοποιημένη μέσα στην εντολή ή κάποια bit από PC και τα υπόλοιπα από τη σταθερά Διαθέσιμη στο στάδιο ID το νωρίτερο Αποτέλεσμα της συνθήκης συνήθως σύγκριση μεταξύ τιμών καταχωρητών Γενικά διαθέσιμο στο στάδιο EXE για διακλαδώσεις αλλά νωρίτερα (στάδιο ID) για άλματα ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 4
Πρόβλεψη διακλάδωσης Οι ποινές διακλαδωσεις μειώνουν την ταχύτητα επεξεργαστών με πολλά στάδια διοχέτευσης και/ή με δυνατότητα εκτέλεσης πολλαπλών εντολών ανά κύκλο Αν μπορούμε να προβλέψουμε με ακρίβεια αν μια διακλάδωση θα ακολουθηθεί, τότε μπορούμε να μειώσουμε ή να εξαλείψουμε την ποινή διακλάδωσης αν κάνουμε λάθος, πρέπει να ακυρώσουμε τις εντολές μετά την εντολή διακλάδωσης ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 5
Στατική πρόβλεψη Οι διακλαδώσεις μπορεί να είναι: προς τα πίσω (βρόγχοι επανάλληψης) Τις περισσότερες φορές ακολουθείται η επανάλληψη Από προσομοιώσεις, 90% πιθανότητα Μπορουμε να υποθέσουμε ότι πετυχαίνουν προς τα εμπρός Από προσομοιώσεις, 50% πιθανότητα να ακολουθηθούν Δεν μπορούμε να ξέρουμε σίγουρα! ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 6
Δυναμική πρόβλεψη Μπορούμε να προβλέψουμε διακλαδώσεις γνωρίζοντας τη συμπεριφορά του προγράμματος στο παρελθόν πρέπει να «θυμόμαστε» την πληροφορία: χρειάζεται πίνακας πρόβλεψης ανανέωση του πίνακα όταν γνωρίζουμε την κατεύθυνση της διακλάδωσης Χρονική συσχέτιση η κατεύθυνση που ακολούθησε η διακλάδωση στο παρελθόν δείχνει τη κατεύθυνση που θα ακολουθήσει στο μέλλον «Χωρική» συσχέτιση η κατεύθυνση που ακολούθησαν οι προηγούμενες N διακλαδώσεις μπορεί να δείχνει τη κατεύθυνση που θα ακολουθήσει η επόμενη διακλάδωση ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 7
Πίνακας πρόβλεψης Κρατάμε πληροφορίες σχετικά με τη προηγούμενη συμπεριφορά διακλαδώσεων σε έναν πίνακα Αγγλικός όρος: Branch History table θα δούμε αργότερα πως αντιστοιχούμε μια διακλάδωση του προγράμματος με μια θέση του πίνακα για την ώρα μας ενδιαφέρει τι πληροφορία κρατάει αυτός ο πίνακας Ενα bit είναι αρκετό για να ξέρουμε αν ακολουθήθηκε ή όχι την προηγούμενη φορά π.χ. 0 δεν ακολουθήθηκε, 1 ακολουθήθηκε ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 8
Πρόβλεψη με 1 bit Εστω η παρακάτω «φωλιασμένη» επανάλληψη outer: inner: beq,, inner beq,, outer Με ένα bit, κάνουμε λάθος πρόβλεψη δύο φορές Στην τελευταία επανάλληψη, προβλέπουμε επιτυχία, αλλά η διακλάδωση δεν ακολουθείται Την επόμενη φορά, προβλέπουμε αποτυχία αυτό γίνεται σε κάθε εξωτερική επανάλληψη Το πρόβλημα είναι ότι μια, σπάνια, αντίθετη επιλογή κατεύθυνσης αλλάζει την πρόβλεψη ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 9
Πρόβλεψη με 2 bits Πρέπει να γίνουν δύο λάθη για να αλλάξουμε πρόβλεψη Συχνά λέγεται bimodal ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 10
Λειτουργία I-$ Fetch PC 0 0 k BHT Index 2 k -entry BHT, 2 bits/entry IF ID Instruction Opcode offset + Taken/ Taken? Branch? Target PC Ταυτόχρονα με την κρυφή μνήμη εντολών γίνεται ανάγνωση του πίνακα προβλέψεων (BHT - branch history table) Στο στάδιο ID έχουμε όλες τις πληροφορίες για το επόμενο, εικαζόμενο PC ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 11
Χωρική συσχέτιση Συχνά οι διακλαδώσεις έχουν κάποια συσχέτιση με τις προηγούμενες. Παράδειγμα: if (x[i] < 7) y += 1; if (x[i] < 5) c -= 4; Αν δεν πετύχει η πρώτη, τότε και η δεύτερη δεν πετυχαίνει Κρατάμε πληροφορία για την κατεύθυνση των τελευταίων N διακλαδώσεων Απλός καταχωρητής ολίσθησης Ν θέσεων λέγεται global history register ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 12
Πρόβλεψη δύο επιπέδων Fetch PC 0 0 k 2-bit global branch history shift register Shift in Taken/ Taken results of each branch Taken/ Taken? Χρησιμοποιούμε τη διεύθυνση (μέρος της) για ταυτόχρονη προσπέλαση 4 ΒΗΤ και διαλέγουμε ένα από τα αποτελέσματα σύμφωνα με τις τελευταίες 2 κατευθύνσεις ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 13
Περιορισμοί BHT Η πρόβλεψη μπορεί να χρησιμοποιηθεί μόνο όταν ξέρουμε ότι η εντολή είναι διακλάδωση Αν η προσκόμιση εντολής χρειάζεται πολλούς κύκλους,... και είναι διοχετευμένη όπως συμβαίνει στους σύγχρονους επεξεργαστές... η ποινή διακλάδωσης παραμένει πολλή μεγάλη Χρειαζόμαστε πρόβλεψη όχι μόνο της κατεύθυνσης...... αλλά και της διεύθυνσης προορισμού ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 14
Πίνακας προορισμού διακλάδωσης I-Cache PC Entry PC Valid predicted target PC k = match valid target Αγγλικός όρος: Branch target buffer (BTB) Κρατάει τη διεύθυνση προορισμού που έχουμε προβλέψει (προορισμός προηγούμενης εκτέλεσης) και το υπόλοιπο της διεύθυνσης της εντολής διακλάδωσης. Αλλιώς,... ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 15
Συνδιασμός BTB, BHT Στο ΒΤΒ υπάρχουν θέσεις μόνο για άλματα και διακλαδώσεις που πέτυχαν Αν δεν βρεθεί μια διεύθυνση στο BTB, το επόμενο PC είναι PC+4 Το BTB κρατάει αρκετά bit ανά θέση και γι αυτό δεν υπάρχουν πολλές θέσεις διαθέσιμες Εξακολουθεί να υπάρχει το BHT που έχει καλύτερη πληροφορία σχετικά με την προηγούμενη συμπεριφορά διακλαδώσεων αν δεν βρεθεί μια διακλάδωση στο BTB αλλά βρεθεί στο BHT ως πετυχημένη, απλά η ποινή διακλάδωσης είναι μεγαλύτερη ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 16
Επιστροφή υπορουτίνας Η εντολή jr χρησιμοποιείται για άλματα επιστροφής από υπορουτίνες και για εντολές switch/case σε γλώσσες υψηλού επιπέδου Η διεύθυνση επιστροφής δεν είναι πάντα η ίδια η υπορουτίνα μπορεί να καλεστεί από διαφορετικές θέσεις στο πρόγραμμα άρα δεν δουλεύει καλά η πρόβλεψη προορισμού μέσω BTB Αλλά οι επιστροφές υπορουτίνας δουλεύουν καλά με μια στοίβα επέκταση των πινάκων πρόβλεψης με στοίβα διευθύνσεων επιστροφής: Return address stack (RAS) ένα επιπλέον πεδίο στο BTB δηλώνει ότι η διακλάδωση είναι επιστροφή υπορουτίνας και χρησιμοποιείται η RAS ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 17
Εξαιρέσεις και διακοπές Αναπάντεχα συμβάντα που πρέπει να αντιμετωπιστούν διακόπτοντας, ίσως προσωρινά, το πρόγραμμα είτε εντελώς αναπάντεχα, ή τόσο σπάνια που δεν αξίζει να ελέγχονται συνέχεια ή επειδή βολέυει ο μηχανισμός διακοπών (π.χ. κλήσεις συστήματος) Προέρχονται από εσωτερικές αιτίες του προγράμματος: διαίρεση με 0, υπερχείλιση, εκτέλεση εντολής απαγορευμένης για το χρήστη, προσπέλαση θέσης μνήμης χωρίς κατάληλη «άδεια»,... κλήση συστήματος Η προέρχονται από εξωτερικές αιτίες περιφερειακά που θέλουν να μεταφέρουν δεδομένα,... «ρολόι» χρονομερισμού του επεξεργαστή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 18
Χειρισμός Σαν κλήσεις υπορουτίνας: τρέχει ένα υπο- πρόγραμμα, χειρίζεται το συμβάν και, συχνά, επιστρέφει στην εκτέλεση του προγράμματος I i-1 HI 1 program I i HI 2 interrupt handler I i+1 HI n ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 19
Χειρισμός δύο τρόποι Αλμα σε μια συγκεκριμένη διεύθυνση, εξέταση ενός ειδικού καταχωρητή που κωδικοποιεί το συμβάν Πίνακας διευθύνσεων Ανάλογα με το συμβάν, άλμα σε κατάλληλη θέση του πίνακα ο πίνακας μπορεί να έχει χώρο μόνο για μία εντολή, οπότε εκτελεί άλμα στην πραγματική υπορουτίνα ή χώρο για αρκετές εντολές (για μικρές, γρήγορες διακοπές) ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 20
Ο πυρήνας σταματάει την εκτέλεση του προγράμματος στην εντολή I i Ολοκληρώνει την εκτέλεση όλων των προηγούμενων εντολών (ακριβείς εξαιρέσεις precise excepyons) Καταγράφει τη διεύθυνση της εντολής που θα εκτελεστεί μετά (I i+1 ) σε έναν ειδικό καταχωρητή EPC Απαγορεύει προσωρινά οποιεσδήποτε νέες εξαιρέσεις θέτωντας ένα ειδικό bit σε ένα καταχωρητή αν ο χειρισμός της εξαίρεσης είναι αργός, μπορεί η ρουτίνα να ξαναεπιτρέψει διακοπές (μεγαλύτερης προτεραιότητας) Καταγράφει το λόγο της διακοπής/εξαίρεσης και κάνει άλμα στην κατάλληλη διεύθυνση ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 21
Σχεδιασμός υλοποίησης PC Inst. Mem D Decode E + M Data Mem W PC address Exception Illegal Opcode Overflow Data address Exceptions Εξωτερικές διακοπές Αν και σπάνιες, πολλές εξαιρέσεις μπορεί να συμβούν ταυτόχρονα Ποιά πρέπει να «εξυπηρετηθεί» πρώτα; ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 22
Υλοποίηση Commit Point PC Inst. Mem D Decode E + M Data Mem W PC address ExcepYon Exc D Illegal Opcode Exc E Overflow Exc M Data address ExcepYons Cause Select Handler PC Kill F Stage PC D Kill D Stage PC E Kill E Stage PC M Asynchronous Interrupts EPC Kill Writeback ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 23
Μηχανισμός εξαιρέσεων Αφήνουμε τις εντολές να φτάσουν στο στάδιο MEM πριν εξετάσουμε τις εξαιρέσεις όποια φτάσει πρώτη είναι είναι η παλιότερη εντολή που προκάλεσε εξαίρεση Εξωτερικές διακοπές εξετάζονται σε κάθε κύκλο Γιατί στο στάδιο MEM και όχι στο WB; γιατί μπορεί η εντολή που προκάλεσε εξαίρεση να είναι store! Δεν θέλουμε η «προβληματική» εντολή να αλλάξει την κατάσταση του συστήματος Ακυρώνουμε την εντολή που προκάλεσε εξαίρεση και όλες τις επόμενες ίδιος μηχανισμός με διακλαδώσεις, αλλάζουμε τις εντολές σε «φούσκες» Ακυρώνουμε το στάδιο WB για την εντολή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 24
Περίληψη, πρόβλεψη διακλάδωσης Οι διακλαδώσεις και τα άλματα αδειάζουν/ξαναγεμίζουν τη διοχέτευση όταν ακολουθούνται χάνουμε ταχύτητα είναι πολύ συχνές εντολές Ποινή διακλάδωσης Πότε μαθαίνουμε ότι μια εντολή είναι άλμα, διακλάδωση; Πότε μπορούμε να υπολογίσουμε τη διεύθυνση προορισμού; Πότε μπορούμε να υπολογίσουμε τη συνθήκη; Μέχρι τότε έχουμε φέρει και, μερικώς- εκτελέσει άχρηστες εντολές αν η διακλάδοση ακολουθηθεί Πρόβλεψη διακλάδωσης όσο προσκομίζουμε μια εντολή, προβλέπουμε ποια θα είναι η κατάλληλη διεύθυνση για την επόμενη εντολή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 25