ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση Αρης Ευθυμίου
Απόδοση απλής υλοποίησης Υλοποίηση ενός κύκλου είναι πολύ αργή κάθε κύκλος είναι τόσο μεγάλος όσο χρειάζεται η πιο αργή εντολή lw: ανάγνωση καταχωρητών, άθροισμα, προσπέλαση μνήμης, εγγραφή σε καταχωρητή Δεν μπορούμε να μεταβάλουμε το κύκλο ρολογιού ανά εντολή Μπορούμε να σπάσουμε την εκτέλεση σε μικρότερα βήματα και να επικαλύψουμε την εκτέλεση διαφορετικών εντολών διοχέτευση - pipeline ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 2
Ιδανική διοχέτευση στάδιο 1 στάδιο 2 στάδιο 3 στάδιο 4 Ολες οι εντολές περνούν από όλα τα στάδια Κανένας πόρος δεν μοιράζεται μεταξύ σταδίων Η καθυστέρηση κάθε σταδίου είναι ίδια Ο χρονοπρογραμματισμός μιας εντολής που εισέρχεται δεν εξαρτάται από εντολές σε άλλα στάδια ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 3
Απόδοση Χωρίς διοχέτευση Inst 1 Inst 2 Inst 3 n εντολές, n κύκλοι, CPI=1 Με διοχέτευση Inst 1 Inst 2 Inst 3 n εντολές, περίπου n κύκλοι, CPI=1 Το (ιδανικό) CPI δεν αλλάζει! αν και μας παίρνει 5 κύκλους να εκτελέσουμε μια εντολή, ολοκληρώνουμε την εκτέλεση μιας εντολής σε κάθε κύκλο Ο κύκλος ρολογιού γίνεται μικρότερος ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 4
Ιδιότητες διοχέτευσης Η διοχέτευση δεν βελτιώνει την καθυστέρηση (χρόνο εκτέλεσης) μιας εντολής, βελτιώνει το ρυθμό εκτέλεσης ολόκληρου του προγράμματος Δυνητική επιτάχυνση = αριθμός σταδίων διοχέτευσης Ο χρόνος γεμίσματος/αδειάσματος της διοχέτευσης μειώνει την απόδοση Ο κύκλος ρολογιού καθορίζεται από το πιο αργό στάδιο άρα τα στάδια πρέπει να είναι ισοροπημένα ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 5
Υποθέσεις Υποθέτουμε ότι ο χρόνος προσπέλασης μνήμης (εντολές, δεδομένα) είναι σχεδόν ίσος με το χρόνο της πιο αργής πράξης στην ALU έχουμε (μικρές) κρυφές μνήμες στην πραγματικότητα οι κρυφές μνήμες είναι διοχετευμένες και παίρνουν λίγους κύκλους ρολογιού για να επιστρέψουν τα δεδομένα Το αρχείο καταχωρητών είναι επίσης μια μνήμη (SRAM) με 2 θύρες ανάγνωσης, 1 εγγραφής υποθέτουμε ότι οι εγγραφές γίνονται στο πρώτο μισό του κύκλου ρολογιού και οι αναγνώσεις στο δεύτερο μισό εγγραφή και ανάγνωση του ίδιου καταχωρητή στον ίδιο κύκλο, επιστρέφει την καινούρια τιμή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 6
Διοχέτευση στον MIPS 0x4 PC Add addr rdata Inst. Memory we rs1 rs2 rd1 wa wd rd2 GPRs Imm Select ALU we addr rdata Data Memory wdata fetch decode & Regread execute memory write -back 1. IF: προσκόμηση εντολής από τη μνήμη (fetch) 2. ID: αποκωδικοποίηση και ανάγνωση καταχωρητών 3. EX: Εκτέλεση εντολής ή υπολογισμός διεύθυνσης 4. MEM: προσπέλαση μνήμης (δεδομένων) 5. WB: εγγραφή αποτελέσματος πίσω σε καταχωρητή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 7
Διοχέτευση MIPS ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 8
Παράδειγμα Load, Store, ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 9
Load, Store, στάδιο ID ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 10
Load, στάδιο EX ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 11
Load στάδιο MEM ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 12
Load στάδιο WB Λάθος αριθμός καταχωρητή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 13
Διορθωμένο datapath ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 14
Κύκλωμα ελέγχου Το στάδιο ID παράγει τα σήματα ελέγχου και αυτά δρομολογούνται μέσω των καταχωρητών διοχέτευσης στον προορισμό τους ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 15
Αναπαράσταση διοχέτευσης time t 0 t 1 t 2 t 3 t 4 t 5 t 6 t 7 instruction1 IF 1 ID 1 EX 1 MA 1 WB 1 instruction2 IF 2 ID 2 EX 2 MA 2 WB 2 instruction3 IF 3 ID 3 EX 3 MA 3 WB 3 instruction4 IF 4 ID 4 EX 4 MA 4 WB 4 instruction5 IF 5 ID 5 EX 5 MA 5 WB 5 ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 16
Χρησιμότητα σταδίων Εντολές που δεν προσπελαύνουν τη μνήμη (αριθμητικές, διακλαδώσεις,...) δεν κάνουν τίποτα στο στάδιο MEM Είναι πρόβλημα/μπορεί να γίνει γρηγορότερα; Αν επιτρέπαμε εγγραφές σε καταχωρητές και στο στάδιο MEM και στο WB, όταν και τα δύο στάδια θέλουν να γράψουν,... είτε χρειάζονται 2 θύρες εγγραφής: $$$, ίσως ρολόι είτε ένας από τους δύο θα πρέπει να περιμένει: ταχύτητα # ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 17
Αληλεπίδραση εντολών Η διοχέτευση στους επεξεργαστές δεν είναι εύκολη! Μια εντολή μπορεί να χρειάζεται έναν πόρο που χρησιμοποιεί μια άλλη εντολή σε ένα άλλο στάδιο δομικός κίνδυνος (structural hazard) Μια εντολή μπορεί να εξαρτάται από κάτι που παράγει μια προηγούμενη εντολή: τιμή δεδομένων κίνδυνος δεδομένων (data hazard) διεύθυνση εντολής κίνδυνος ελέγχου (control hazard) διακλαδώσεις, άλματα, ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 18
Επίλυση δομικών κινδύνων Συμβαίνουν όταν δύο εντολές χρειάζονται το ίδιο πόρο ταυτόχρονα π.χ. το πρόβλημα με εγγραφές στο αρχείο καταχωρητών από στάδια WB, MEM Κάποια εντολή πρέπει να περιμένει μέχρι η άλλη να μη χρειάζεται τον πόρο Ποιά; Η παλιά ή η νέα; Αν μπορούμε να «ξοδέψουμε» περισσότερο υλικό, μπορούμε πάντα να επιλύσουμε δομικούς κινδύνους π.χ. 2 η θύρα εγγραφής Το διοχετευμένο σχέδιο του MIPS δεν έχει δομικούς κινδύνους ο MIPS έχει σχεδιαστεί για διοχέτευση ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 19
Κίνδυνοι δεδομένων add $s0, $t0, $t1 sub $t2, $s0, $t3 Προκύπτουν από εξαρτήσεις εντολών όπου μια εντολή παράγει τα δεδομένα που μια επόμενη εντολή χρειάζεται και είναι κοντά μεταξύ τους $t2<=$s0-$t3! $s0<=$t0+$t1! ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 20
Επίλυση κινδύνων δεδομένων Μέθοδος πρώτη (interlock): καθυστερούμε την εντολή που χρειάζεται τα δεδομένα τόσο όσο χρειάζεται η εντολή που τα παράγει για να γράψει τα αποτελέσματά της στο αρχείο καταχωρητών Αγγλικός όρος καθυστέρηση - stall όλες οι επόμενες εντολές καθυστερούν επίσης! Πώς γίνεται η καθυστέρηση: η εντολή δεν προχωράει στο επόμενο στάδιο μέχρι να έχει πάρει την τελευταία τιμή (στο MIPS μένει στο στάδιο ID) Στο επόμενο στάδιο εισάγουμε μια φούσκα (bubble) στη θέση που θα έπαιρνε η εξαρτημένη εντολή η φούσκα πρέπει να μη γράφει κανένα στοιχείο μνήμης! ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 21
Αναπαράσταση καθυστέρησης time t 0 t 1 t 2 t 3 t 4 t 5 t 6 t 7 add $s0,$t0,$t1 IF 1 ID 1 EX 1 MA 1 WB 1 sub $t2,$s0,$t3 IF 2 ID 2 ID 2 ID 2 EX 2 MA 2 WB 2 instruction3 IF 3 IF 3 IF 3 ID 3 EX 3 MA 3 WB 3 instruction4 IF 4 ID 4 EX 4 MA 4 WB 4 instruction5 IF 5 ID 5 EX 5 MA 5 WB 5 Θεωρούμε ότι εγγραφή- ανάγνωση στον ίδιο κύκλο μέσω αρχείου καταχωρητών μεταφέρει τις νέες τιμές. αλλιώς χρειάζεται ένας ακόμη κύκλος καθυστέρησης ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 22
Υλοποίηση interlock FB 1 FB 2 FB 3 FB 4 stage 1 stage 2 stage 3 stage 4 Προχωρημένα στάδια δίνουν πληροφορίες σε προηγούμενα στάδια για ανίχνευση εξαρτήσεων ειδικά σήματα στους καταχωρητές για stall Οι εντολές σε προχωρημένα στάδια δεν εξαρτώνται από εντολές σε προηγούμενα στάδια γενικά ισχύει σε ένα πρόγραμμα, αλλά μπορεί να υπάρχουν σε επεξεργαστές με δομικούς κινδύνους ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 23
Υλοποίηση MIPS, στάδιο ID stall NOT loadenable loadenable No-op instruction 0 1 M U X ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 24
Υλοποίηση λογικής ελέγχου Συγκρίνουμε τους καταχωρητές πηγής (rs, rt) στο στάδιο ID με τους καταχωρητές προορισμού (rd) των επόμενων σταδίων εκτός από το WB, γιατί οι τιμές μεταφέρονται αυτόματα μέσω του αρχείου καταχωρητών Συγκρίνουμε «διευθύνσεις»/αριθμούς καταχωρητών Αν κάποιοι καταχωρητές προρισμού είναι ίδιοι με οποιονδήποτε καταχωρητή πηγής, καθυστερούμε την εντολή στο στάδιο ID και την επόμενη στο ID και εισάγουμε «φούσκες» Οταν η εντολή που παράγει το αποτέλεσμα φτάσει στο στάδιο WB, οι συγκρίσεις μας θα βγάλουν λογικό 0 και θα συνεχίσουμε την εκτέλεση ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 25
Interlocked MIPS NOT loadenable stall ex_destreg mem_destreg loadenable No-op instruction 0 1 M U X ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 26
Λογική ελέγχου 2 Δεν γράφουν όλες οι εντολές αποτελέσματα σε καταχωρητή π.χ. sw, διακλαδώσεις (εκτός από jal) οι ex/mem_destreg περιέχουν σκουπίδια! Ο καταχωρητής $zero αγνοεί εγγραφές! add $zero, $s1, $s2 # nop!! add $t0, $zero, $zero # clear t0! Η εντολή στο στάδιο ID, δεν έχει πάντα 2 καταχωρητές πηγής πχ lw, sw, addi, Πρέπει να πιάνουμε αυτές τις περιπτώσεις η λογική ελέγχου πρέπει να κοιτάει και την εντολή σε κάθε στάδιο ή, καλύτερα, χρειάζεται ένα επιπλέον bit που δηλώνει ότι μια εντολή πράγματι γράφει αποτέλεσμα ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 27
Επίλυση κινδύνων δεδομένων Μέθοδος δεύτερη: προώθηση forwarding (bypassing) Δεν χρειάζεται να περιμένουμε την εγγραφή στο αρχείο καταχωρητών Μεταφέρουμε τα δεδομένα απευθείας από την έξοδο του σταδίου που τα παράγει στο στάδιο που τα διαβάζει/ χρειάζεται Γενικά δύο τρόποι από την έξοδο της μονάδας που παράγει το αποτέλεσμα (πχ ALU) στον κατάλληλο καταχωρητή διοχέτευσης (π.χ. ID/EX rsval), μέσω κατάλληλου πολυπλέκτη από τον καταχωρητή διοχέτευσης που κρατάει το αποτέλεσμα (πχ EX/MEM aluout) στην είσοδο της μονάδας που χρειάζεται την τιμή (opa) ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 28
Αναπαράσταση προώθησης time t 0 t 1 t 2 t 3 t 4 t 5 t 6 t 7 add $s0,$t0,$t1 IF 1 ID 1 EX 1 MA 1 WB 1 sub $t2,$s0,$t3 IF 2 ID 2 EX 2 MA 2 WB 2 instruction3 IF 3 ID 3 EX 3 MA 3 WB 3 instruction4 IF 4 ID 4 EX 4 MA 4 WB 4 instruction5 IF 5 ID 5 EX 5 MA 5 WB 5 Κερδίζουμε χρόνο: αποφεύγονται κύκλοι καθυστέρησης Προσοχή ο χρόνος κύκλου μπορεί να αυξηθεί: επιπλέον πολυπλέκτες και μακρυά καλώδια, χρόνος κυκλώματος ελέγχου ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 29
Διάγραμμα προώθησης ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 30
Υλοποίηση προώθησης ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 31
Λογική ελέγχου προώθησης Παράμοια με τη λογική ελέγχου καθυστέρησης Οι έξοδοι οδηγούν τους πολυπλέκτες προώθησης πριν την ALU στο παράδειγμά μας Συγκρίσεις καταχωρητών πηγής και προορισμού προσοχή σε λεπτομέρειες: $zero, Διπλός κίνδυνος. Παράδειγμα: add $1,$1,$2 add $1,$1,$3 add $1,$1,$4 Πρέπει να πάρουμε την πιο πρόσφατη τιμή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 32
Καθυστερήση - προώθηση Ακόμα και αν υλοποιήσουμε προώθηση δεδομένων, μπορεί να χρειαστεί να καθυστερήσουμε μια εντολή Στον MIPS αυτό συμβαίνει όταν μετά από μία load ακολουθεί μια εντολή που χρησιμοποιεί την τιμή κίνδυνος φόρτωσης- χρήσης, load- use data hazard ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 33
Παράδειγμα ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 34
Αποφυγή καθυστερήσεων Ο μεταφραστής μπορεί να αλλάξει τη σειρά εντολών (scheduling) ώστε να αποφύγει καθυστερήσεις πρέπει να γνωρίζει λεπτομέρειες υλοποίησης! C κώδικας: A = B + E; C = B + F; stall stall lw $t1, 0($t0) lw $t2, 4($t0) add $t3, $t1, $t2 sw $t3, 12($t0) lw $t4, 8($t0) add $t5, $t1, $t4 sw $t5, 16($t0) 13 cycles lw $t1, 0($t0) lw $t2, 4($t0) lw $t4, 8($t0) add $t3, $t1, $t2 sw $t3, 12($t0) add $t5, $t1, $t4 sw $t5, 16($t0) 11 cycles ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 35
Κίνδυνοι ελέγχου Η διεύθυνση της επόμενης εντολής είναι τις πιο πολλές φορές PC+4 Αλλά όχι πάντα! εντολές διακλάδωσης, άλματα Το πρόβλημα είναι ότι όταν ξεκινάει ένας κύκλος ρολογιού πρέπει να έχουμε ήδη έτοιμο το PC για να ξεκινήσουμε την ανάγνωση της μνήμης εντολών Δεν υπάρχει χρόνος να «δούμε» πρώτα την εντολή που ξεκινάει στο στάδιο ID και να ελέγξουμε ότι δεν είναι διακλάδωση ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 36
Χρονισμός προσκόμισης Θα μπορούσαμε να περιμένουμε έναν (δύο για διακλαδώσεις) κύκλο και μετά να φέρουμε τη σωστή εντολή Χάνουμε τις μισές θέσεις διοχέτευσης για «φούσκες»! Θα προσκομίζουμε από τη μνήμη κάθε δεύτερο κύκλο Αντίθετα προτιμάμε να φέρουμε την αμέσως επόμενη εντολή, υποθέτωντας ότι είναι η σωστή εντολή για προσκόμιση εικασία, specula on Οταν κάνουμε λάθος, πρέπει να διαγράψουμε (flush, kill) όλες της εντολές που ακολουθούν την εντολή διακλάδωσης/άλματος ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 37
Ακύρωση εντολής μετά από άλμα Για να ακυρώσουμε μια εντολή που προσκομίζεται σ αυτόν το κύκλο, στο στάδιο IF, τοποθετούμε ένα πολυπλέκτη πριν τον καταχωρητή εντολής squash nop 1 M U X 0 ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 38
Αναπαράσταση άλματος time t 0 t 1 t 2 t 3 t 4 t 5 t 6 t 7 add $s0,$t0,$t1 IF 1 ID 1 EX 1 MA 1 WB 1 jump X IF 2 ID 2 EX 2 MA 2 WB 2 instruction3 IF 3 -- -- -- -- x instruct IF 4 ID 4 EX 4 MA 4 WB 4 x+1 instruct IF 5 ID 5 EX 5 MA 5 WB 5 ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 39
Διακλαδώσεις Στις διακλαδώσεις υπάρχει μεγαλύτερη καθυστέρηση για τον καθορισμό της επόμενης εντολής που θα εκτελεστεί Υπολογισμός διεύθυνσης χρειάζεται πρόσθεση PC+4 με σταθερά Σύγκριση χρειάζεται αφαίρεση τιμών 2 καταχωρητών Το αποτέλεσμα είναι γνωστό στο τέλος του σταδίου EX άρα υπάρχουν ήδη 2 εντολές στη διοχέτευση Αν δεν ακολουθήσουμε τη διακλάδωση δεν κάνουμε τίποτα Αλλιώς πρέπει να ακυρώσουμε τις εντολές στα στάδια IF, ID και να θέσουμε τον PC στη κατάλληλη τιμή ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 40
Υλοποίηση διακλαδώσεων taken flush flush Προσοχή: σήματα καθυστέρησης (stall) στο στάδιο ID, δεν ισχύουν γιατί η εντολή στο ID είναι άκυρη! ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 41
Αναπαράσταση διακλάδωσης time t 0 t 1 t 2 t 3 t 4 t 5 t 6 t 7 add $s0,$t0,$t1 IF 1 ID 1 EX 1 MA 1 WB 1 jump X IF 2 ID 2 EX 2 MA 2 WB 2 instruction3 IF 3 ID 3 -- -- -- instruction4 IF 4 -- -- -- -- x instruct IF 5 ID 5 EX 5 MA 5 WB 5 ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 42
Μείωση της ποινής διακλάδωσης Οι κύκλοι που χάνονται όταν μια διακλάδωση γίνει, λέγεται ποινή διακλάδωσης (branch penalty) Στον MIPS, μπορεί να μειωθεί κατά 1 κύκλο αν μεταφερθεί η σύγκριση ισότητας/ανισότητας στο στάδιο ID ένας συγκριτής ισότητας είναι πιο απλός (και πιο γρήγορος) από έναν αφαιρέτη αυτός ήταν ο λόγος που οι διακλαδώσεις στο MIPS κάνουν μόνο συκρίσεις ισότητας ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 43
Υλοποίηση ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 44
Κίνδυνοι δεδομένων σε διακλαδώσεις Αν οι τιμές των καταχωρητών παράγονται 2-3 εντολές μακριά, μπορεί να γίνει προώθηση add $1, $2, $3 IF ID EX MEM WB add $4, $5, $6 IF ID EX MEM WB IF ID EX MEM WB beq $1, $4, target IF ID EX MEM WB ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 45
Κίνδυνοι δεδομένων σε διακλαδώσεις Αν οι τιμές παράγονται από load 2 εντολές πριν ή ALU εντολή 1 θέση πρίν, η διακλάδωση πρέπει να καθυστερήσει 1 κύκλο lw $1, addr IF ID EX MEM WB add $4, $5, $6 IF ID EX MEM WB beq stalled IF ID beq $1, $4, target ID EX MEM WB ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 46
Κίνδυνοι δεδομένων σε διακλαδώσεις Αν μια τιμή παράγεται από load στην αμέσως προηγούμενη θέση, η διακλάδωσει καθυστερεί για 2 κύκλους lw $1, addr IF ID EX MEM WB beq stalled IF ID beq stalled ID beq $1, $0, target ID EX MEM WB ΠΛΕ 027 Μικροεπεξεργαστές 2011-2012 47