ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη Διοχέτευση (ipeline) Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων
Θέματα Απόδοσης Αν και απλή, η υλοποίηση ενός κύκλου ρολογιού είναι πολύ αργή Μεγάλη περίοδος ρολογιού Ο χρόνος εκτέλεσης είναι ο ίδιος για όλες τις εντολές και ίσος με τον χρόνο εκτέλεσης της πιο αργής εντολής Αυτό παραβιάζει μια βασική σχεδιαστική αρχή Βελτιστοποίησε την εκτέλεση της πιο συχνής εντολής Η χρήση της διοχέτευσης (pipeline) μειώνει δραστικά την περίοδο ρολογιού 2
ipeline 5 κύκλων Έστω ότι στον επεξεργαστή ενός κύκλου η περίοδος ρολογιού είναι Τc = 8ps Στον νέο επεξεργαστή με pipeline μπορεί να είναι στην καλύτερη περίπτωση 8/5=6ps. Ας θεωρήσουμε μια πιο ρεαλιστική προσέγγιση Τc2 = 2ps Μια νέα εντολή μπορεί να ξεκινήσει κάθε κύκλο μηχανής Fetch IF Decode ID Execute E emory E Back 3
Γιατί Διοχέτευση; Κύκλος μηχανής 2 3 5 6 7 8 9 lw $t, ($sp) IF ID E E lw $t, 8($sp) IF ID E E lw $t2, 2($sp) IF ID E E lw $t3, 6($sp) IF ID E E lw $t, 2($sp) IF ID E E γέμισμα Χρόνος εκτέλεσης σε ένα ιδανικό pipeline (I=): Χρόνος να γεμίσει το pipeline με εντολές + ένας κύκλος ανά εντολή Για Ν εντολές χρειαζόμαστε +N κύκλους μηχανής. Χρόνος pipeline U = (+N)*2ps = 2.8ns για N= Χρόνος εκτέλεσης σε έναν επεξεργαστή ενός κύκλου Χρόνος single-cycle U = N*8ps = 8ns Επιτάχυνση = 8/2.8 =
ipelining για τις υπόλοιπες εντολές Η εντολή lw χρησιμοποιεί και τα 5 στάδια του pipeline Εντολές με R-format δεν χρειάζονται το στάδιο μνήμης E, μόνο τα στάδια IF, ID, E, και Τι θα συμβεί εάν βάλουμε στο pipeline την lw με εντολές R-format; Κύκλος μηχανής 2 3 5 6 7 8 9 add $sp, $sp, - IF ID E sub $v, $a, $a IF ID E lw $t, ($sp) IF ID E E or $s, $s, $s2 IF ID E lw $t, 8($sp) IF ID E E 5
Δομικοί κίνδυνοι (structural hazards) Κάθε δομικό στοιχείο του επεξεργαστή μπορεί να χρησιμοποιηθεί μόνο από μία εντολή κάθε κύκλο μηχανής Πρόβλημα: Η εντολή lw χρησιμοποιεί το ort του Register File στο 5 ο στάδιο της Η εντολή or χρησιμοποιεί το ort του Register File στο ο στάδιο της lock cycle 2 3 5 6 7 8 9 add $sp, $sp, - IF ID E sub $v, $a, $a IF ID E lw $t, ($sp) IF ID E E or $s, $s, $s2 IF ID E lw $t, 8($sp) IF ID E E 6
Κανόνες: Λύση : χρήση εντολών NO Όλες οι εντολές παίρνουν 5 κύκλους να εκτελεσθούν Όλες οι εντολές περνάνε από τα ίδια 5 στάδια με την ίδια σειρά. Ακόμη και εάν κάποια στάδια δεν κάνουν καμία επεξεργασία στην εντολή (NO) R-type IF ID E NO lock cycle 2 3 5 6 7 8 9 add $sp, $sp, - IF ID E NO sub $v, $a, $a IF ID E NO lw $t, ($sp) IF ID E E or $s, $s, $s2 IF ID E NO lw $t, 8($sp) IF ID E E store IF ID E E NO branch IF ID E NO NO 7
Καταχωρητές Διοχέτευσης Για να υλοποιήσουμε ένα σύστημα διοχέτευσης, θα χρησιμοποιήσουμε ενδιάμεσους καταχωρητές στο path. Όλα τα ενδιάμεσα αποτελέσματα και σήματα ελέγχου πρέπει να σώζονται στο τέλος κάθε κύκλου στον αντίστοιχο καταχωρητή διοχέτευσης. Ονόματα καταχωρητών διοχέτευσης. IF/ID ID/E E/E E/ Το τελευταίο στάδιο ( Back, ) δεν χρειάζεται καταχωρητές διοχέτευσης γιατί η εντολή τερματίζεται. Είναι οι καταχωρητές διοχέτευσης ορατοί στον προγραμματιστή; 8
Διοχέτευση Δεδομένων Src IF/ID ID/E E/E E/ Reg address [3-] 2 2 em ress Src Op emtoreg Instr [5 - ] Instr [2-6] Instr [5 - ] Sign RegDst em 9
Προώθηση δεδομένων Οι τιμές των δεδομένων που χρειάζονται σε επόμενα στάδια της διοχέτευσης πρέπει να μεταφερθούν μέσω των καταχωρητών διοχέτευσης Ο καταχωρητής προορισμού rd είναι ένα χαρακτηριστικό παράδειγμα. To πεδίο rd της εντολής ανακτάται στο πρώτο στάδιο ( Fetch, IF). Αλλά χρησιμοποιείται μόνο μετά από 5 κύκλους στο στάδιο Back,. Συνεπώς, το πεδίο rd πρέπει να μεταφερθεί από όλους τους καταχωρητές διοχέτευσης μέχρι το 5 ο στάδιο. Δεν μπορούμε να το κρατήσουμε σε ένα απλό καταχωρητή εντολής (instruction ) γιατί σε κάθε κύκλο μηχανής μια νέα εντολή εισέρχεται στον επεξεργαστή από την μνήμη εντολών.
Καταχωρητής Προορισμού Src IF/ID ID/E E/E E/ Reg address [3-] 2 2 em ress Src Op emtoreg Instr [5 - ] Instr [2-6] Instr [5 - ] Sign RegDst em
Σήματα Ελέγχου H δημιουργία των σημάτων ελέγχου γίνεται ακριβώς όπως στην περίπτωση του επεξεργαστή ενός κύκλου. Μετά το Fetch η εντολή αποκωδικοποιείται από την μονάδα ελέγχου και δημιουργούνται τα σήματα ελέγχου. Όπως και πριν, κάποια σήματα ελέγχου θα χρειαστούν στα τελευταία στάδια του pipeline (πχ ο ή 5 ο ) Όπως ακριβώς και τα δεδομένα, έτσι και αυτά τα σήματα ελέγχου θα πρέπει να προωθηθούν μέσω των καταχωρητών διοχέτευσης στα επόμενα στάδια μέχρι να χρησιμοποιηθούν. 2
Διοχέτευση Σημάτων Ελέγχου και Δεδομένων ID/E Src ontrol E/E E/ IF/ID E Reg address [3-] 2 2 em ress Src Op emtoreg Instr [5 - ] Instr [2-6] Instr [5 - ] Sign RegDst em 3
Διοχέτευση Σημάτων Ελέγχου και Δεδομένων Stage ontrol signals needed E Src Op RegDst E em em Src Reg emtoreg Src IF/ID ontrol ID/E E E/E E/ Reg em address [3-] 2 2 ress Op Src Instr [5 - ] Sign Instr [2-6] Instr [5 - ] RegDst em emtoreg
Μερικές Παρατηρήσεις Συνήθως, όταν θέλουμε να γράψουμε σε έναν καταχωρητή (και μόνον τότε) θέτουμε το αντίστοιχο Enable=. O γράφεται σε κάθε κύκλο μηχανής επειδή πάντα πρέπει να δείχνουμε στην επόμενη εντολή και συνεπως πάντα Enable=. Το ίδιο και για όλους τους καταχωρητές διοχέτευσης: Enable= 5
Παράδειγμα εκτέλεσης εντολών Διευθύνσεις στο δεκαδικό σύστημα : lw $8, ($29) : sub $2, $, $5 8: and $9, $, $ 2: or $6, $7, $8 6: add $3, $, $ Υποθέτουμε ότι: Η αρχική τιμή κάθε καταχωρητή $Ν είναι Ν+. Για παράδειγμα, ο $8 ($t) περιέχει την τιμή d 8. Αρχικά, όλες οι θέσεις μνήμης περιέχουν την τιμή 99. Το Χ στο διάγραμμα είναι Don t are. Τα ερωτηματικά σημαίνει ότι η τιμή του σήματος είναι άγνωστη Παρατηρείστε ότι οι εντολές είναι ανεξάρτητες; δεν υπάρχουν εξαρτήσεις μεταξύ καταχωρητών εξόδου μιας εντολής και εισόδου των επόμενων. Περισσότερα για αυτό στα επόμενα μαθήματα 6
Κύκλος (γέμισμα) IF: lw $8, ($29) ID: E: E: : ID/E E/E Src ontrol E/ IF/ID E Reg (?) address [3-] 2 2 Src (?) Op () em (?) ress emtoreg (?) Sign RegDst (?) em (?) 7
IF: sub $2, $, $5 ID: lw $8, ($29) E: E: : Κύκλος 2 (γέμισμα) ID/E E/E Src ontrol E/ IF/ID E 8 Reg (?) address [3-] rs rt 2 2 em (?) ress rd Src (?) Op () emtoreg (?) Imm rt rd Sign RegDst (?) em (?) 8
Κύκλος 3 (γέμισμα) IF: and $9, $, $ ID: sub $2, $, $5 E: lw $8, ($29) E: : ID/E E/E Src ontrol E/ IF/ID E 2 Reg (?) 8 address [3-] 5 2 2 5 Op ( ) Src ( ) em (?) ress emtoreg (?) 2 Sign RegDst ( ) em (?) 9
Κύκλος (γέμισμα) IF: or $6, $7, $8 ID: and $9, $, $ E: sub $2, $, $5 E: lw $8, ($29) : ID/E E/E Src ontrol E/ IF/ID E 6 Reg (?) 2 address [3-] 2 2 5 Src () Op (sub) em ( ) ress emtoreg (?) 9 Sign 2 RegDst () 2 em ( ) 2
IF: add $3, $, $ ID: or $6, $7, $8 E: and $9, $, $ E: sub $2, $, $5 : lw $8, ($29) Src IF/ID ontrol Κύκλος 5 ID/E E E/E E/ 2 Reg ( ) 6 address [3-] 7 8 2 2 7 8 - em () ress Src () Op (and) 5 emtoreg ( ) 6 Sign 9 RegDst () 9 2 em () 2
Κύκλος 6 (άδειασμα) IF: ID: add $3, $, $ E: or $6, $7, $8 E: and $9, $, $ : sub $2, $, $5 Src IF/ID ontrol ID/E E E/E E/ Reg () 2 address [3-] 2 2 8 7 em () ress 2 - Src () 9 Op (or) emtoreg () 3 Sign 6 RegDst () 6 9 em () 22
Κύκλος 7 (άδειασμα) IF: ID: E: add $3, $, $ E: or $6, $7, $8 : and $9, $, $ Src IF/ID ontrol ID/E E E/E E/ Reg () address [3-] 2 2 9 em () ress 9 Src () Op (add) 8 emtoreg () Sign 3 RegDst () 3 6 em () 9 23
Κύκλος 8 (άδειασμα) IF: ID: E: E: add $3, $, $ : or $6, $7, $8 Src IF/ID ontrol ID/E E E/E E/ Reg () address [3-] 2 2 em () ress 6 9 Src (?) Op () emtoreg () Sign RegDst (?) 3 em () 9 6 9 2
Κύκλος 9 (άδειασμα) IF: ID: E: E: : add $3, $, $ Src IF/ID ontrol ID/E E E/E E/ Reg () address [3-] 2 2 em (?) ress 3 Src (?) Op ()? emtoreg () Sign RegDst (?) em (?) 3 25
Προσοχή Τα πάντα κινούνται από αριστερά στα δεξιά εκτός:. Της απόφασης διακλάδωσης 2. Του Back Src IF/ID ID/E E/E E/ Reg address [3-] 2 Instr [5 - ] Instr [2-6] Instr [5 - ] 2 Sign Src RegDst Op ress em em emtoreg 26
Πιο συμβολικά Κύκλος ρολογιού 2 3 5 6 7 8 9 lw $t, ($sp) IF ID E E sub $v, $a, $a IF ID E E and $t, $t2, $t3 IF ID E E or $s, $s, $s2 IF ID E E add $t5, $t6, $ IF ID E E Στον κύκλο 5 ο επεξεργαστής έχει γεμίσει: υπάρχουν τόσες εντολές εν πτήση όσα και τα στάδια της διοχέτευσης Από εδώ και πέρα θα εξετάσουμε τα προβλήματα που μπορεί να δημιουργήσει η μέθοδος της διοχέτευσης και πως αυτά επιλύονται. 27