Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών - Μηχανικών Υπολογιστών Αρχιτεκτονική Υπολογιστών Νεκτάριος Κοζύρης lticycle path
Άδεια Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άδεια χρήσης άλλου τύπου, αυτή πρέπει να αναφέρεται ρητώς.
Single-cyle υλοποίηση: Διάρκεια κύκλου ίση με τη μεγαλύτερη εντολή-worst case delay (εδώ η lw) = χαμηλή απόδοση! Αντιβαίνει με αρχή: Κάνε την πιο απλή περίπτωση γρήγορη (ίσως και εις βάρος των πιο «σύνθετων» περιπτώσεων π.χ. (load 32bit constant to reg)). Κάθε fnctional nit χρησιμοποιείται μια φορά σε κάθε κύκλο: ανάγκη για πολλαπλό hardware = κόστος υλοποίησης! Λύση: lticycle υλοποίηση Μικρότεροι κύκλοι ρολογιού, από τις καθυστερήσεις των επιμέρους fnctional nits Ta σχήματα είναι από το βιβλίο COD2e/Patterson-Hennessy cslab@nta 27-28
Λίγο πριν το Pipeline lticycle υλοποίηση Διαιρούμε την εκτέλεση της κάθε εντολής σε βήματα ανάλογα με τον αριθμό των fnctional nits που χρειάζεται Κάθε βήμα και ένας ξεχωριστός παλμός ρολογιού Όταν έχουμε mlticycle υλοποίηση, μπορούμε το ίδιο fnctional nit να το χρησιμοποιήσουμε πολλές φορές στην ίδια εντολή, σε διαφορετικούςόμωςκύκλους(οικονομία hardware) Οι εντολές διαρκούν μεταβλητό αριθμό κύκλων, άρα μπορούμε να κάνουμε την συνηθισμένη περίπτωση πιο γρήγορη. cslab@nta 27-28 2
IPS Datapath-lticycle Implementation. Χρησιμοποιούμε την ίδια memory nit τόσο για instrctions όσο και για 2. Χρησιμοποιούμε την ίδια ALU (αντί για μια ALU και δύο αθροιστές PC+4 και PC+4+address_offset) 3. Μετά από κάθε fnctional nit υπάρχουν καταχωρητές που κρατάνε το αποτέλεσμα μέχρις ότου το πάρει το επόμενο fnctional nit (στον επόμενο κύκλο) cslab@nta 27-28 3
lticycle Datapath: PC Address emory Data or emory Data Register # Registers Register # Register # A B ALU ALUOt Επιπλέον καταχωρητές: IR, DR, A, B και ALUOt cslab@nta 27-28 4
Υπόθεση: «Σε κάθε κύκλο ρολογιού μπορεί να γίνει ένα από τα παρακάτω» emory access Register file access (read or write) ALU op Οτιδήποτε παράγεται από αυτές τις μονάδες,σώζεται σε temporary Temporary s μεταξύ των λειτουργικών μονάδων: IR DR ALUOt A, B (έξοδος file) cslab@nta 27-28 5
ΔΕΔΟΜΕΝΑ που: Θα χρησιμοποιηθούν από την ίδια εντολή σε επόμενους κύκλους: Σώζονται σε temporary s Θα χρησιμοποιηθούν από επόμενες εντολές: Σώζονται σε: file, memory, PC Programmer visible state elements cslab@nta 27-28 6
PC Address Write emory emdata [25 2] [2 6] [5 ] [5 ] emory [5 ] 6 2 Registers Write Write Sign etend 2 32 Shift left 2 A B 4 2 3 Zero ALU ALU reslt ALUOt Επιλογή μεταξύ PC (για εντολή branch, PC+4) και Α (για R-Type) Επιλογή μεταξύ 4 (PC+4), B (R-Type), sign_etend offset για Ι-Type (lw, sw) και branch offset cslab@nta 27-28 7
Single-cycle path: PCSrc 4 Add Shift left 2 Add ALU reslt PC address memory 2 Write Write Registers 2 RegWrite 6 32 Sign etend ALUSrc 3 ALU operation Zero ALU ALU reslt Address em emwrite Data Write memory emtoreg cslab@nta 27-28 8
Διαίρεση της εκτέλεσης κάθε εντολής σε πολλαπλούς κύκλους:. Fetch «Φέρε την εντολή από τη μνήμη και υπολόγισε τα διεύθυνση ανάκλησης για την επόμενη εντολή» IR = emory[pc]; PC = PC + 4; 2. decode and fetch (reg. File read) «Διάβασε τους καταχωρητές rs και rt και αποθήκευσέ τους στους Α και Β αντίστοιχα» Α = Reg[IR[25-2]]; B = Reg[IR[2-6]]; ALUOt=PC + (sign-etend (IR[5-] << 2) ; cslab@nta 27-28 9
..συνέχεια: 2. decode and fetch (reg. File read) Οι Α και Β «γεμίζουν» σε κάθε κύκλο! Πάντα ο IR περιέχει την εντολή από την αρχή μέχρι το τέλος! Στο βήμα αυτό υπολογίζεται και η διεύθυνση «πιθανού» άλματος και αποθηκεύεται στο καταχωρητή ALUOt (αν πρόκειται για εντολή branch) Οι δύο παραπάνω λειτουργίες γίνονται ταυτόχρονα cslab@nta 27-28
3. Eection, memory address comptation or branch completion Εδώ για πρώτη φόρα, παίζει ρόλο τι είδους εντολή έχουμε a) emory Reference: b) Arithmetic Logical: c) Branch: d) Jmp: ALUOt=A+sign-etend (IR[5-]); ALUOt=A op B; If (A==B) PC = ALUOt; PC = PC[3-28] (IR[25-] <<2); cslab@nta 27-28
4. emory Access or R-Type instrction completion a) emory Reference: DR = emory [ALUOt]; ή emory [ALUOt] = Β; «διάβασε από τη διεύθυνση που έχει σχηματιστεί στον ALUOt και αποθήκευσε στον DR (load)» β) Arithmetic Logical: ή «διάβασε το B (που πάντα έχει τον destination reg rt) και αποθήκευσέ το στη μνήμη με δνση ALUOt Reg[IR[5-]] = ALUOt; Είναι πάντα το ίδιο, σε όλους τους κύκλους! cslab@nta 27-28 2
5. emory read completion (write back step) Reg[IR[2-6]] = DR; «Γράψε πίσω τα που είχαν την προηγούμενη φάση αποθηκευτεί στον DR, στο file» cslab@nta 27-28 3
PC Address Write emory emdata [3-26] [25 2] [2 6] [5 ] [5 ] emory PCWriteCond PCWrite IorD em emwrite emtoreg IRWrite [25 ] Otpts Control Op [5 ] [5 ] PCSorce ALUOp ALUSrcB ALUSrcA RegDst 6 RegWrite 2 Registers Write Write Sign etend 2 32 Shift left 2 A B 4 2 3 26 28 Shift left 2 ALU control PC [3-28] Zero ALU ALU reslt Jmp address [3-] ALUOt 2 [5 ] cslab@nta 27-28 4
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα» του ΕΜΠ έχει χρηματοδοτήσει μόνο την αναδιαμόρφωση του υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.