Αρχιτεκτονική Υπολογιστών Μικροαρχιτεκτονική Βασικές Πηγές: Αρχιτεκτονική Υπολογιστών: μια Δομημένη Προσέγγιση, Α. Tanenbaum, Vrije Universiteit, Amsterdam. Computer Organization, W. Robinson, CS-231, Vanderbildt Univesrity. Αρχιτεκτονική Υπολογιστών, Ν. Κοζύρης, Εθνικό Μετσόβιο Πολυτεχνείο. Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός, Π. Ευριπίδου, Πανεπιστήμιο Κύπρου Mic-1 simulator http://www.ontko.com/mic1 Mic-1MMV simulator, Rick Salter, Oberlin College. http://www.cs.oberlin.edu/~rms/mic1/ Σύνθεση: Κ.Γ. Μαργαρίτης, Πανεπιστήμιο Μακεδονίας, Τμήμα Εφαρμοσμένης Πληροφορικής.
Αρχιτεκτονική Υπολογιστών Μικροαρχιτεκτονική Μικροαρχιτεκτονική τριών διαύλων (Mic-2) Διοχέτευση (Mic-3 και Mic-4) Πρόβλεψη Διακλάδωσης και Υπερβαθμωτή εκτέλεση Kρυφή Μνήμη Μικροαρχιτεκτονική Pentium 4 και Υλοποίηση JVM
Κόστος προς Απόδοση Επιλογή του συνόλου εντολών ώστε να έχουμε λιγότερες και αποδοτικές εντολές (απ ευθείας υλοποίηση εντολών στο υλικό). Βελτίωση του υλικού ώστε να μειωθεί η διάρκεια του κύκλου ρολογιού. Μείωση του αριθμού των κύκλων ρολογιού που απαιτούνται για την εκτέλεση μιας εντολής. Διάρθρωση της CPU σε υπομονάδες ώστε να είναι δυνατή η παράλληλη εκτέλεση εντολών (Instruction Level Parallelism). Μείωση των προσπελάσεων στη κύρια μνήμη (κρυφή μνήμη).
Βελτίωση Υλικού (παράδειγμα) Έλεγχος διαύλου Β: από 9 καταχωρητές επιλέγεται ένας. Με αποκωδικοποιητή (παρούσα υλοποίηση): 4Χ512 bits ROM αποκωδικοποιητής 4-σε-16 καθυστέρηση διάδοσης σήματος (2 πύλες). Φθηνότερο αλλά πιο αργό. Χωρίς αποκωδικοποιητή (εναλλακτική υλοποίηση): 9X512 bits ROM δεν υπάρχει καθυστέρηση σήματος. Ταχύτερο αλλά πιο δαπανηρό. Άσκηση: υπολογίστε περίπου τη διαφορά σε πύλες (ή transistors)
Μειονεκτήματα Mic-1 Η είσοδος Α της ALU γίνεται μόνο μέσω του καταχωρητή Η. Απαιτείται μετακίνηση τελεστέου μέσω του διαύλου Β και της ALU. Ο δίαυλος Α είναι μη-λειτουργικός. Η ενημέρωση του PC, που εκτελείται στην αρχή κάθε εντολής, απαιτεί τη κατάληψη των διαύλων και της ALU. Η προσκόμιση και σύνθεση τελεστέων 16-bits απαιτεί πολλές μικροεντολές. Ο κύκλος ρολογιού είναι μεγάλος και σύνθετος. Απαιτεί σημαντικές καθυστερήσεις και αφήνει τμήματα της CPU αδρανή. H CPU αντιμετωπίζεται ως ενιαία μονάδα, δεν διακρίνονται υπομονάδες (τα συνδυαστικά κυκλώματα λειτουργούν διαρκώς).
Αρχιτεκτονική Τριών Διαύλων Η διαδρομή δεδομένων του Mic-2. Διαφορές με Mic-1: * Πλήρης Δίαυλος Α και αντίστοιχος επιπλέον έλεγχος καταχωρητών. * Μονάδα Ανάκλησης Εντολής (IFU) και καταχωρητής MBR2.
Instruction Fetch Unit (IFU) 1. Ανεξάρτητη μονάδα αύξησης PC=PC+1. Εξοικονόμηση ενός κύκλου μηχανής ανά εντολή (μικρο-εντολή Main1). 2. Προκαταβολική προσκόμιση και αναδιάταξη operands. Εξοικονόμηση αναμονής λόγω fetch (ανάγνωση μνήμης).
Αρχιτεκτονική Τριών Διαύλων (1) Αρχικό μικροπρόγραμμα για την εκτέλεση της ILOAD.
Αρχιτεκτονική Τριών Διαύλων (2) iload1 iload2 iload3 MAR=MBRU+LV;rd MAR=SP=SP+1 TOS=MDR;wr; goto(mbr) Μικροπρόγραμμα για την εκτέλεση της ILOAD σε αρχιτεκτονική τριών διαύλων (πάνω) και με επιπλέον χρήση IFU (κάτω).
Μικροπρόγραμμα Mic-2 (1)
Μικροπρόγραμμα Mic-2 (2)
Μικροπρόγραμμα Mic-2 (3)
Μικροπρόγραμμα Mic-2 (4)
Μικροεντολές Mic-2 4 A bus A Α,Β Η μορφή μικροεντολής του Mic-2. Addr : Διεύθυνση πιθανής επόμενης μικροεντολής. JAM : Επιλογή επόμενης μικροεντολή. ALU: Πράξεις ALU και Ολισθητή. C : Επιλογή καταχωρητών που θα διαβάσει δεδομένα από το δίαυλο C. Mem : Λειτουργίες Μνήμης Β, Α : Επιλογή καταχωρητή που θα γράψει δεδομένα στους διαύλους Β, Α.
Αρχιτεκτονική Υπολογιστών Μικροαρχιτεκτονική Μικροαρχιτεκτονική τριών διαύλων (Mic-2) Διοχέτευση (Mic-3 και Mic-4) Πρόβλεψη Διακλάδωσης και Υπερβαθμωτή εκτέλεση Kρυφή Μνήμη Μικροαρχιτεκτονική Pentium 4 και Υλοποίηση JVM
Διοχέτευση: απλό παράδειγμα α β α. Πλυντήριο χωρίς διοχέτευση β. Πλυντήριο με διοχέτευση γ. Πλυντήριο με διοχέτευση και μεταβλητή διάρκεια σταδίων γ
Διοχέτευση (1) Προϋποθέτει διακριτές υπο μονάδες στη CPU, σε αντιστοιχία με το κύκλο Ανάκλησης- Εκτέλεσης. Ενδεικτικές υπομονάδες (στάδια): S1. Ανάκληση της εντολής, Τροποποίηση P S2. Αποκωδικοποίηση της εντολής S3. Ανάκληση των τελεστέων (Ανάγνωση από τη Μνήμη) S4. Εκτέλεση της εντολής (πιθανώς σε υπομονάδες) Ακέραιοι Πραγματικοί Ανάκληση επιπλεόν τελεστέων S5. Aποθήκευση του αποτελέσματος (Εγγραφή στη Μνήμη) Λίγοι, σχετικά μεγάλοι κύκλοι μηχανής, μεταβλητός αριθμός κύκλων ανά εντολή Χρόνος 2 S1 1 3 1 2 S2 2 1 S3 Συμβατική 2 S4 Εκτέλεση... 1 S5 1 2 Στάδια
Διοχέτευση (2) (a) Μια τυπική διοχέτευση πέντε σταδίων (υπομονάδων): Ανάκληση, Αποκωδικοποίηση, Ανάγνωση από τη Μνήμη, Εκτέλεση, Εγγραφή στη Μνήμη (b) Η κατάσταση κάθε σταδίου σε εννέα κύκλους ρολογιού. Σταθερός αριθμός (ή σταθερό πολλαπλάσιο;) κύκλων μηχανής ανά εντολή. Πολλοί μικροί κύκλοι μηχανής, με βάση τη μέγιστη διάρκεια σταδίου.
Διοχέτευση (3) Διεκπεραίωση (Throughput). Η Διοχέτευση αυξάνει κυρίως το ρυθμό εκτέλεσης ακουθλιας εντολών. Ιδανικά στη μονάδα του χρόνου προσκομίζονται στον υπολογιστή Ν εντολές που εκτελούνται στα Ν στάδια της Διοχέτευσης. Μέτρηση σε Αριθμό προσκoμιζόμενων Εντολών σε μονάδα Χρόνου, συνήθως Million Instructions Per Second (MIPS). Επιτάχυνση (Speedup). Λόγος του χρόνου εκτέλεσης (ή του CPI) ενός προγράμματος χωρίς Διοχέτευση προς το χρόνο εκτέλεσης (ή του CPI) με Διοχέτευση. Ιδανικά ίση με Ν. Speedup = Tserial / Tpipelined = CPIserial/CPIpipelined. Ωφελιμότητα (Utilization). Ποσοστό του χρόνου που η Διοχέτευση είναι πλήρης. Μέγιστη Ωφελιμότητα = Ιδεατή Επιτάχυνση. Utilization = Speedup / N = Τserial/Tpipelined*N = CPIserial/CPIpipelined*N.
Διοχέτευση (4) Απώλειες. Η Διοχέτευση παρουσιάζει απώλειες στην εκκίνηση μέχρι να 'γεμίσει' και στη λήξη μέχρι να αδειάσει (filling and drainage). Αυτές ισούνται με περίπου 2N(Ν-1) άεργους κύκλους στα διάφορα στάδια, αριθμός αμελητέος όταν συνήθως η διοχέτευση λειτουργεί για βήματα πολύ περισσότερα του Ν. Ν filling Ν-1 operation drainage Κύκλοι ωφέλιμης λειτουργίας >> Ν Κίνδυνοι Διοχέτευσης (Hazards). Συνηθήκες λειτουργίας της Διοχέτευσης που μειώνουν την απόδοσή της (ιδεατή επιτάχυνση ή μέγιστη ωφελιμότητα). * Δομικοί κίνδυνοι (Structural Hazrds) * Κίνδυνοι Δεδομένων (Data Hazards) * Κίνδυνοι Ελέγχου (Control Hazards).
Κίνδυνοι Διοχέτευσης (Hazards) Συνθήκες του υλικού ή του λογισμικού που αποτρέπουν την επίτευξη βέλτιστης απόδοσης της διοχέτευσης. Δομικοί Κίνδυνοι (Structural Hazards). Η ταυτόχρονη εκτέλεση δύο σταδίων δύο εντολών δεν μπορεί να γίνει γιατί χρησιμοποιούν το ίδιο υλικό. (πχ χρήση ALU, προσπέλαση διάυλου, μνήμης κλπ). Κίνδυνοι Δεδομένων (Data Hazards). Η εκτέλεση ενός σταδίου μιας εντολής απαιτεί την προηγούμενη ολοκλήρωση ενός σταδίου άλλης εντολής (πχ προσκόμιση τελεστέου πριν την αποθήκευσή του). Κίνδυνοι Ελέγχου (Control Hazards). Εντολές διακλάδωσης, κλήσεις μεθόδων, απαιτούν ακύρωση ορισμένων ήδη εκτελεσθέντων σταδίων επομένων εντολών και επαναπλήρωση της διοχέτευσης.
Δομικός Κίνδυνος Ταυτόχρονη ανάγνωση από τη μνήμη ενώ έχουμε μια μόνο θύρα μνήμης. Λύσεις: * Αναστολή (Stall) που προκαλεί κενό (Bubble). * Βελτίωση Υλικού (διαφορετικές θύρες μνήμης για την ανάγνωση δεδομένων και εντολών)
Κίνδυνος Δεδομένων (1) : RAW Read After Write Ανάγνωση Μετά την Εγγραφή Οι εντολές sub, and, or χρησιμοποιούν τον καταχωρητή r1 πριν αυτός προλάβει να ενημερωθεί. Η εντολή xor είναι η πρώτη που χρησιμοποιεί τον ενημερωμένο καταχωρητή. Εξάρτηση (Dependence) ή Αληθής Εξάρτηση Δεδομένων. Η συνηθέστερη περίπτωση σε τυπικές διοχετεύσεις. Δύο τύποι: R-type (Register type) - διαχειρίσιμη. M-type (Memory type) προκαλεί στάση (stall).
Κίνδυνος Δεδομένων (2) : WAR * Write After Read: Εγγραφή Μετά την Ανάγνωση Μια εντολή γράφει σε ένα καταχωρητή πριν μια επόμενη εντολή χρησιμοποιήσει τη παλιά τιμή του. πχ. sub add r2, r1, r3 r1, r4, r5 // r2 = r1 - r3 // r1 = r4 + r5 Αντι-Εξάρτηση (Anti-Dependence). Μπορεί να συμβεί μόνο αν * Αλλάξει η σειρά εκτέλεσης εντολών, για παράδειγμα επειδή η sub σταμάτησε (stalled) και η add τη πρόλαβε. * Επιτρέπεται εγγραφή σε διαφορετικά στάδια της διοχέτευσης.
Κίνδυνος Δεδομένων (3) : WAW * Write After Write: Εγγραφή Μετά την Εγγραφή Μια εντολή γράφει (η add) σε ένα καταχωρητή πριν μια προηγούμενη εντολή (η sub) γράψει. πχ. sub add r1, r2, r3 r1, r4, r5 // r1 = r2 - r3 // r1 = r4 + r5 Εξάρτηση Εξόδου (Output Dependence). Μπορεί να συμβεί μόνο αν * Αλλάξει η σειρά εκτέλεσης εντολών, για παράδειγμα επειδή η sub σταμάτησε (stalled) και η add τη πρόλαβε. * Επιτρέπεται εγγραφή σε διαφορετικά στάδια της διοχέτευσης.
Αρχιτεκτονική με Διοχέτευση Mic-3 * Χρήση μανδαλωτών (latches) στους διαύλους Α, Β, C. * Απομόνωση κυκλωμάτων == δημιουργία υπομονάδων IFU => Καταχωρητές Αποκωδικοποίηση Καταχωρητές => A,Β A, B => ALU, Shift => C C = > Καταχωρητές Μνήμη <=> Καταχωρητές
Απεικόνιση Διοχέτευσης Mic-3 Τυπική λειτουργία της διοχέτευσης του Mic-3. Ανάκληση (IFU) Αποκωδικοποίηση Καταχωρητές (Reg) Δίαυλοι AB Δίαυλος C Μνήμη (Μem)* * δεν φαίνεται
Υλοποίηση της SWAP (1) Το μικροπρόγραμμα Μic-2 της εντολής SWAP.
Υλοποίηση της SWAP (2) μικρο-εντολή Bubble χρόνος Εμφάνιση κινδύνου δεδομένων RAW M-type λόγω rd (ανάγνωση από μνήμη).
Υλοποίηση της IADD στο Mic-3 MAR=SP=SP-1;rd 1 2 3 4 5 6 7 8 B=SP C=B-1 MAR=C;SP=C;rd MDR=mem H=TOS MDR=TOS=MDR+H;wr;goto(MBR1) B=TOS C=B H=C B=MDR C=B+H MDR=C; TOS=C;wr goto(mbr1) Κύκλοι ρολογιού: 8X1/3=2.6 < 3 Κάθε χρώμα δείχνει ένα διαφορετικό στάδιο διοχέτευσης. Κάθε στήλη δείχνει μια μικρο-εντολή Κάθε γραμμή δείχνει τη κατάσταση των σταδίων σε ένα κύκλο
Απλοί Κανόνες Διοχέτευσης 1. Εσωτερική συνέπεια εκτέλεσης εντολής Κάθε στήλη δείχνει την εκτέλεση μιας μικρο-εντολής. Κάθε στάδιο εμφανίζεται ΜΙΑ φορά. 2. Αποφυγή Δομικού Κινδύνου. Κάθε γραμμή δείχνει τη λειτουργία των σταδίων ανά χρονική στιγμή. Κάθε χρώμα εμφανίζεται ΜΙΑ φορά. 3. Αποφυγή Κινδύνου RAW M-type. Όταν έχουμε rd ακολουθεί κύκλος MDR=mem. Η επόμενη χρήση του MDR για Ανάγνωση (B=MDR) καθυστερεί. 4. Αποφυγή Κινδύνου RAW R-type, WAR. Ένας καταχωρητής ή μανδαλωτής δε μπορεί να αλλάζει τιμή πριν η τιμή του διοχετευθεί σε επόμενο στάδιο (ή το πολύ ταυτόχρονα). Δεν εμφανίζεται Κίνδυνος Δεδομένων WAW, Κίνδυνοι Ελέγχου αργότερα Tanenbaum, Structured Computer Organization, Fifth Edition, (c) 2006 Pearson Education
ΙSUB, IAND, IAND, POP στο Mic-3 MAR=SP=SP-1;rd 1 2 3 4 5 6 7 8 B=SP C=B-1 MAR=C;SP=C;rd MDR=mem H=TOS MDR=TOS=MDR * H;wr;goto(MBR1) B=TOS C=B H=C B=MDR C=B Η ή Β AND Η ή Β OR Η ή τίποτε MDR=C; TOS=C;wr goto(mbr1) Κύκλοι ρολογιού: 8X1/3=2.6 < 3 Αυτό που αλλάζει είναι η λειτουργία της ALU
Υλοποίηση της DUP στο Mic-3 SP=MAR=SP+1 1 2 3 4 5 B=SP C=B+1 MAR=C; SP=C MDR=TOS;wr ;goto(mbr1) B=TOS C=B MDR=C; wr goto(mbr1) Κύκλοι ρολογιού: 5X1/3=1.6 < 2
Υλοποίηση της BIPUSH στο Mic-3 SP=MAR=SP+1 1 2 3 4 5 B=SP C=B+1 MAR=C; SP=C MDR=TOS=MBR1;wr ;goto(mbr1) B=MBR1 C=B MDR=C; TOS=C;wr goto(mbr1) Κύκλοι ρολογιού: 5X1/3=1.6 < 2
Υλοποίηση της ΙΙΝC στο Mic-3 1 2 3 4 5 6 7 8 MAR=LV+MBR1U;rd H=MBR1 A=LV; B=MBR1U C=A+B MAR=C; rd MDR=Mem B=MBR1 C=B H=C MDR=MDR+H;wr ;goto(mbr1) A=MDR;B=H C= A+B MDR=C;wr goto(mbr1) Κύκλοι ρολογιού: 8X1/3=2.6 < 3
Υλοποίηση της ILOAD στο Mic-3 1 2 3 4 5 6 7 8 MAR=LV+MBR1U;rd MAR=SP=SP+1 A=LV;B=MBR1U C=A+B MAR=C;rd MDR=mem B=SP C=B+1 MAR=C; SP=C TOS=MDR;wr;goto(MBR1) B=MDR C=B TOS=C;wr goto(mbr1) Κύκλοι ρολογιού: 8X1/3=2.6 < 3
Υλοποίηση της ISTORE στο Mic-3 MAR=LV+MBR1U MDR=TOS;wr MAR=SP=SP-1;rd TOS=MDR;goto(MBR1) 1 A=LV;B=MBR1U 2 C=A+B 3 MAR=C 4 5 6 7 8 9 10 B=TOS C=B MDR=C; wr B=SP C=B-1 MAR=C;SP=C;rd MDR=mem B=MDR C=B TOS=C goto(mbr1) Κύκλοι ρολογιού: 10X1/3=3.3 < 5
Διοχέτευση BIPUSH και ISTORE SP=MAR=SP+1 MDR=TOS=MBR1; MAR=LV+MBR1U MDR=TOS;wr MAR=SP=SP-1;rd TOS=MDR; wr ;goto(mbr1) goto(mbr1) 1 2 3 4 5 6 7 8 9 10 11 12 B=SP C=B+1 B=MBR1 MAR=C; SP=C C=B A=LV;B=MBR1U MDR=C; TOS=C; wr C=A+B goto(mbr1) MAR=C B=TOS C=B MDR=C; wr B=SP C=B-1 MAR=C;SP=C;rd MDR=mem B=MDR C=B TOS=C goto(mbr1) Κύκλοι ρολογιού: 12X1/3=4
ILOAD, ILOAD, IADD, ISTORE MAR=LV+MBR1U;rd MAR=SP=SP+1 TOS=MDR;wr;* MAR=LV+MBR1U;rd MAR=SP=SP+1 TOS=MDR;wr;*...... 01 A=LV;B=MBR1U 02 C=A+B B=SP 03 MAR=C;rd C=B+1 04 MDR=mem MAR=C; SP=C 05 B=MDR 06 C=B A=LV;B=MBR1U 07 TOS=C;wr C=A+B B=SP 08 * MAR=C;rd C=B+1 09 MDR=mem MAR=C; SP=C 10 B=MDR 11 C=B 12 TOS=C;wr... 13 *...... -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------MAR=SP=SP-1;rd H=TOS MDR=TOS=MDR+H;wr;* MAR=LV+MBR1U MDR=TOS;wr MAR=SP=SP-1;rd TOS=MDR;* 12 B=SP 13 C=B-1 B=TOS 14 MAR=C;SP=C;rd C=B 15 MDR=mem H=C 16 B=MDR 17 C=B+H A=LV;B=MBR1U 18 MDR=C; TOS=C;wr C=A+B B=TOS 19 * MAR=C C=B B=SP 20 21 22 23 24 25 26 MDR=C; wr C=B-1 MAR=C;SP=C;rd MDR=mem B=MDR C=B TOS=C *
Απόδοση Διοχέτευσης Επιτάχυνση 26Χ1/3 = 8.6 κύκλοι έναντι 14 κύκλων, speedup 1.63 (ιδεατό 3, για 3 βαθμίδες, αφού η IFU δεν επηρεάζει και η MEM συμμετέχει μέσω των αναφορών στη μνήμη). Σε μεγαλύτερο αριθμό εντολών η επιτάχυνση τείνει στο 2 (εκτελούνται το πολύ 2 εντολές ταυτόχρονα). Ωφελιμότητα 39 ενεργά στάδια / 3 στάδια Χ 26 κύκλοι = 39 / 78 = 50%. Υποθέσεις Χρόνος σταδίου διοχέτευσης = 1/3 του κύκλου ρολογιού Mic-1ή-2. Χρόνος προσπέλασης μνήμης = χρόνος σταδίου διοχέτευσης.
Μειονεκτήματα Μic-3 * Η χρήση μοντέλου στοίβας προκαλεί μόνιμο κίνδυνο δεδομένων τύπου RAW, Μ-type. Σχεδόν κάθε εντολή (όχι μόνο οι απαραίτητες ILOAD, ISTORE) περιέχει ενημέρωση μνήμης. * Πολλαπλές διελεύσεις ανά εντολή (μεγάλες εντολές). Το πολύ δύο εντολές στη διοχέτευση. Χρήση ALU για αυξήσεις-μειώσεις-διελεύσεις τιμών καταχωρητών. * Περιορισμένος αριθμός καταχωρητών με πολλαπλές εγγραφές και αναγνώσεις ανά εντολή. Έλλειψη επαρκούς αριθμού γενικών καταχωρητών. Λύσεις: Ελαχιστοποίηση προσπελάσεων στη μνήμη. Μεγάλος αριθμός καταχωρητών γενικού σκοπού. Συντομότερες, απλούστερες εντολές μιας διέλευσης. Περισσότερο υλικό.
Διοχέτευση Επτά Σταδίων: Mic-4 (1) + R0-R7 Ποιοί Καταχωρητές είναι περιττοί;
Διοχέτευση Επτά Σταδίων: Mic-4 (2) 1: Μονάδα Ανάκλησης Εντολών (IFU) 2: Αποκωδικοποίηση Εντολών (Decode) εντολές τύπου RISC 3: Ουρά Μικροεντολών (Queue) 4: Προσκόμιση Τελεστέων (Operands) από καταχωρητές 5: Εκτέλεση (Exec) απλή (όχι πολλαπλή) διέλευση 6: Εγγραφή Αποτελέσματος (Write Back) προς καταχωρητές 7: Επικοινωνία με Μνήμη (Memory) μόνο load, store
Αρχιτεκτονική Υπολογιστών Μικροαρχιτεκτονική Μικροαρχιτεκτονική τριών διαύλων (Mic-2) Διοχέτευση (Mic-3 και Mic-4) Πρόβλεψη Διακλάδωσης και Υπερβαθμωτή εκτέλεση Kρυφή Μνήμη Μικροαρχιτεκτονική Pentium 4 και Υλοποίηση JVM
Υλοποίηση της GOTO στο Mic-3 H=PC-1 1 2 3 4 5 6 7 8 PC=H+MBR2;fetch MBR=mem(PC);goto(MBR1) A=PC C=A-1 H=C; Στάση διοχέτευσης: Η επόμενη εντολή δεν εισάγεται A=H, B=MBR2 C=A+B PC=C;fetch MBR=mem goto(mbr1) Νέος PC διαθέσιμος Νέα εντολή διαθέσιμη Εισαγωγή νέας εντολής: Στάση 3 κύκλων Κύκλοι ρολογιού: 8X1/3.5 < 4 Στάση 4 κύκλων
Υλοποίηση της IFLT στο Mic-3 1 2 3 4 5 6 7 8 9 MAR=SP=SP-1;rd OPC=TOS B=SP C=B-1 MAR=C;SP=C;rd MDR=mem B=TOS C=B OPC=C TOS=MDR B=MDR C=B TOS=C N=OPC; if(n) goto T; else goto F B=OPC C=B if (N) goto T; else goto F εκτέλεση μέρους GOTO Κύκλοι ρολογιού: 8X1/3=2.6 < 4 Στάση 2 κύκλοι + στάση μέρους GOTO (~4 κύκλοι): Συνολική στάση ~6 κύκλοι
Υλοποίηση της IFEQ στο Mic-3 1 2 3 4 5 6 7 8 MAR=SP=SP-1;rd OPC=TOS B=SP C=B-1 MAR=C;SP=C;rd MDR=mem B=TOS C=B OPC=C TOS=MDR B=MDR C=B TOS=C Z=OPC; if(z) goto T; else goto F B=OPC C=B if (Z) goto T; else goto F εκτέλεση μέρους GOTO Κύκλοι ρολογιού: 8X1/3=2.6 < 4 Στάση 2 κύκλοι + στάση μέρους GOTO (~ 4 κύκλοι): Συνολική στάση ~ 6 κύκλοι
Υλοποίηση της IF_ICMPNEQ στο Mic-3 MAR=SP=SP-1;rd MAR=SP=SP-1 H=MDR;rd OPC=TOS TOS=MDR 1 2 3 4 5 6 7 8 9 10 11 12 B=SP C=B-1 MAR=C;SP=C;rd MDR=mem Z=H-OPC; if(z) goto T; else goto F B=SP C=B-1 MAR=C B=MDR C=B B=TOS H=C;rd C=B MDR=mem OPC=C B=MDR C=B TOS=C A=H;B=OPC C=A-B if (Z) goto T; else goto F εκτέλεση μέρους GOTO Κύκλοι ρολογιού: 12X1/3=4 < 6 Στάση 2 κύκλοι + στάση μέρους GOTO (~4 κύκλοι): Συνολική στάση ~6 κύκλοι
Κίνδυνος Ελέγχου στο Mic-3 // if (i == 3) k = 0 else k = 1; ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISTORE k GOTO L2 L1: BIPUSH 0 ISTORE k L2: BIPUSH.. ISTORE.. Πρόγραμμα i==3 TRUE i==3 FALSE ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISTORE k GOTO L2 L1: L1: BIPUSH 0 ISTORE k L2: L2: BIPUSH.. ISTORE Ροή εντολών TRUE ILOAD i BIPUSH 3 IF_ICMPEQ L1 BIPUSH 1 ISTORE k GOTO L2 BIPUSH 0 ISTORE k BIPUSH.. ISTORE Ροή εντολών FALSE Στο TRUE οι πράσινες εντολές καθυστερούνται και δεν εισάγονται. Στο FALSE οι πράσινες εντολές καθυστερούνται και εισάγονται ενώ οι μπλέ καθυστερούνται και δεν εισάγονται λόγω GOTO.
Τύποι Διακλάδωσης Χωρίς συνθήκη (GOTO) Η εκτέλεση του GOTO αναιρεί την εκτέλεση ορισμένων εντολών που ακολουθούν και έχουν εισέλθει στη διοχέτευση. Προφανής λύση: πρόκληση στάσης (stall) με εντολές τύπου NOP μέχρι να η GOTO να φθάσει στη φάση εκτέλεσης, ώστε ο PC να λάβει τη σωστή τιμή. Με ειδικό υλικό η διάρκεια της στάσης μπορεί να μειωθεί (άμεση γνώση της διεύθυνσης διακλάδωσης). Με συνθήκη (απόφαση) (IFLT, IFEQ, IF_CMPEQ) Πριν την εκτέλεση της διακλάδωσης απαιτείται υπολογισμός της τιμής της συνθήκης. Αυτό επιβαρύνει ακόμη περισσότερο τη καθυστέρηση που θα επιβληθεί στη διοχέτευση γιατί απαιτείται κανονική εκτέλεση της εντολής (δε μπορεί να γίνει παράκαμψη τύπου GOTO).
Εναλλακτικές Λύσεις Εισαγωγή στάσης (stall) Απλή αλλά χρονοβόρα λύση, μειώνει την απόδοση της διοχέτευσης. Εκτίμηση μέσων καθυστερήσεων (CPI); Βελτίωση με ειδικό υλικό, ειδικά για GOTO. Πρόβλεψη Μη-Διακλάδωσης (IFLT, IFEQ, IF_CMPEQ) Εκτελούνται οι εντολές αμέσως μετά το IF: No Branch. Σε περίπτωση Αληθούς Συνθήκης οι εκτελεσθείσες εντολές πρέπει να αναιρεθούν (ενδεικτική συχνότητα 47%). Πρόβλεψη Διακλάδωσης (IFLT, IFEQ, IF_CMPEQ) Εκτελούνται οι εντολές αμέσως μετά το Label: Branch. Σε περίπτωση Ψευδούς Συνθήκης οι εκτελεσθείσες εντολές πρέπει να αναιρεθούν (ενδεικτική συχνότητα 53%).
Πρόβλεψη Διακλάδωσης Στατική Πρόβλεψη O compiler χρησιμοποιεί βοηθητικές εντολές διακλάδωσης που υποδεικνύουν Διακλάδωση ή Μη-Διακλάδωση (Branch, No Branch). Το πρόγραμμα εκτελείται με profiler για να διαπιστωθεί η συχνότητα επιλογής σε κάθε εντολή διακλάδωσης. Δυναμική Πρόβλεψη Η CPU κρατά τις διευθύνσεις και το ιστορικό των διακλαδώσεων. Εφαρμόζονται διάφοροι αλγόριθμοι πρόβλεψης με βάση το ιστορικό. Και στις δύο περιπτώσεις απαιτείται σύνθετο υλικό (στη δυναμική πρόβλεψη πιο σύνθετο).
Υπερβαθμωτή (Superscalar) Αρχιτεκτονική (1) Υπερβαθμωτός επεξεργαστής με πέντε λειτουργικές μονάδες, τοποθετημένος σε διοχέτευση πέντε σταδίων (Pentim II).
Υπερβαθμωτή (Superscalar) Αρχιτεκτονική (2) 1 2 3 4 5 6 7 8 9 10 Χρόνος Α Β C D1 D2 D3 D4 D5 E Μονάδες Η Υπερβαθμωτή αρχιτεκτονική επιτρέπει την εκτέλεση πολλαπλών εντολών: Τα στάδια Α έως C 'αδειάζουν' γρήγορα. Η σειρά ολοκλήρωσης των εντολών μπορεί να είναι διαφορετική από τη σειρά εισαγωγής λόγω διαφορετικής καθυστέρησης μονάδων και χρήσης πολλαπλών καταχωρητών.
Εκτέλεση Εντός-Εκτός Σειράς Οι εντολές υποβάλονται (issue) με τη σειρά εμφάνισης στο πρόγραμμα. Οι εντολές αποχωρούν (retire) με τη σειρά εμφάνισης στο πρόγραμμα. Οι εντολές μπορεί να εκτελούνται εντός σειράς (in order) ή εκτός σειράς (out of order). Εντολές ή τμήματα εντολών (πράξεις) που δεν εξαρτώνται μεταξύ τους μπορεί να εκτελεστούν εκτός σειράς, με χρήση μετονομασίας καταχωρητών (register renaming). Τα αποτελέσματα αποθηκεύονται σε ενδιάμεσους (πρόχειρους) καταχωρητές και όταν η εξάρτηση λυθεί το αποτέλεσμα μεταφέρεται στον σωστό καταχωρητή. Η απόδοση διοχέτευσης και υπερβαθμωτής εκτέλεσης μπορεί να μην είναι βέλτιστη λόγω εξαρτήσεων δεδομένων (data dependencies) ή κινδύνων δεδομένων (data hazards). Δεδομένα μεταγενέστερων εντολών δεν είναι έτοιμα προς χρήση έγκαιρα.
Κανόνες Εκτέλεσης Εντολών 1. Αληθής Εξάρτηση Δεδομένων (Κίνδυνος RAW) Μια εντολή δεν μπορεί να εκτελεστεί αν ένας τελεστής (καταχωρητής) αναμένει να εγγραφεί. 2. Αντι-Εξάρτηση Δεδομένων (Κίνδυνος WAR, R-type) Μια εντολή δεν μπορεί να εκτελεστεί πλήρως αν ο προορισμός (καταχωρητής) αναμένει να διαβαστεί. Μπορεί όμως να εκτελεστεί με μετονομασία καταχωρητή προορισμού. 3. Eξάρτηση Εξόδου (Κίνδυνος WAW) Μια εντολή δεν μπορεί να εκτελεστεί πλήρως αν ο προορισμός (καταχωρητής) αναμένει να εγγραφεί. Μπορεί όμως να εκτελεστεί με μετονομασία καταχωρητή προορισμού.
Αρχιτεκτονική Υπολογιστών Μικροαρχιτεκτονική Μικροαρχιτεκτονική τριών διαύλων (Mic-2) Διοχέτευση (Mic-3 και Mic-4) Πρόβλεψη Διακλάδωσης και Υπερβαθμωτή εκτέλεση Kρυφή Μνήμη Μικροαρχιτεκτονική Pentium 4 και Υλοποίηση JVM
Ιεραρχία Μνήμης 16-256 καταχωρητές Static RAM L1: 16-64K L1 Instruction/Data on chip L2: 128-512K L2 on chip package L3: 128K -8M L3 on board Dynamic RAM: ως 16G Virtual memory HDD: ως Τ Εντολές καταχωρητών * * Εντολές μνήμης * Εντολές Ι/Ο Μια ιεραρχία μνήμης με πέντε (ή εννέα) φυσικά επίπεδα. Τα λογικά επίπεδα είναι τρία (σημειώνονται με *).
Κρυφή Μνήμη Σύστημα με τρία επίπεδα κρυφής μνήμης (Cache L1/2/3) που βρίσκονται σε διαφορετική θέση, και έχουν διαφορετική ταχύτητα, χωρητικότητα και λειτουργικότητα (Εντολές, Δεδομένα).
Γενικά Χαρακτηριστικά Κόστος L1 > Kόστος L2 > Κόστος L3 > Κόστος Κύριας Μνήμης. Ταχύτητα L1 < Ταχύτητα L2 < Ταχύτητα L3 < Ταχύτητα Κ. Μνήμης Μέγεθος L1 < Μέγεθος L2 < Μέγεθος L3 < Μέγεθος Κ. Μνήμης Μέγεθος Cache < 1% Μέγεθος Κύριας Μνήμης Διαφορές με Καταχωρητές: * Η Cache είναι διαφανής στο επίπεδο συνόλου εντολών (δεν υπάρχουν δηλαδή ειδικές εντολές γλώσσας μηχανής). * Η διαχείριση της Cache γίνεται από το υλικό, όχι το λογισμικό. * Η Cache αποθηκεύει δεδομένα και εντολές.
Παράδειγμα Ιεραρχίας Μνήμης ( με 2 επίπεδα cache ) Μεγαλύτερη Ταχύτητα Μεγαλύτερη Χωρητικότητα Processor Main Memory (DRAM) Virtual Memory, Secondary Storage (Disk) Control Registers Datapath On-Chip Level One Cache L1 Second Level Cache (SRAM) L2 Tertiary Storage (Tape) Ταχύτητα : 1-5ns 10ns 30ns 50ns 10ms 10sec Μέγεθος : <1KB <256KB <8MB <4GB >1GB TB Bandwidth : 150GB/s 50GB/s cslab@ntua 2007-2008 25GB/s 4GB/s 10MB/s
Αρχή Τοπικότητας Ένα πρόγραμμα έχει τη τάση να προσπελαύνει σε κάθε χρονική στιγμή δεδομένα και εντολές σε σχετικά περιορισμένο χώρο διευθύνσεων. Δύο ειδών τοπικότητες: Χρονική Τοπικότητα: Αν μια θέση μνήμης προσπελαστεί μια φορά, τότε πιθανότατα θα ξαναχρησιμοποιηθεί τις επόμενες χρονικές στιγμές. Παράδειγμα: εντολές βρόχων επανάληψης Χωρική Τοπικότητα: Αν μια θέση μνήμης προσπελαστεί, τότε πιθανότατα σύντομα θα προσπελαστούν και οι γειτονικές θέσεις μνήμης. Παράδειγμα: πίνακες και άλλες δομές δεδομένων.
Οργάνωση και Λειτουργία Οργάνωση δεδομένων (Τύποι Κρυφής Μνήμης): direct-mapped (άμεση χαρτογράφηση) set-associative (συνολοσυνειρμική) fully associative (πλήρως συνειρμική) Προσπέλαση δεδομένων (Διευθυνσιοδότηση): Tag line mod (#lines, #sets, #1) Ανάγνωση/Εγγραφή δεδομένων: Read / Write Hit / Miss Μηχανισμός Aντικατάστασης: Direct (Άμεσος) Least Recently Used (LRU) Λιγότερο Πρόσφατη Χρήση FIFO (First In First Out) Random (Τυχαίος) Μηχανισμός Eνημέρωσης : write-through ή write-back write-allocate ή write-no-allocate cslab@ntua 2007-2008
Τύποι Κρυφής Μνήμης (1) Άμεσης Χαρτογράφησης (Direct Mapped Cache) Κάθε λέξη μνήμης έχει μια μόνο πιθανή θέση στη cache. Σχετικά απλή στην υλοποίηση. Συνειρμική (Associative Cache) Κάθε λέξη μνήμης μπορεί να καταλάβει οποιαδήποτε θέση της cache. Πολύ ευέλικτη αλλά δαπανηρή στην υλοποίηση. Συνολοσυνειρμική (Set-associative Cache) Κάθε λέξη μνήμης έχει ένα συγκεκριμένο σύνολο πιθανών θέσεων στη cache. Παράδειγμα: Συνολοσυνειρμική κρυφή μνήμη τεσσάρων δρόμων.
Τύποι Κρυφής Μνήμης (2) Γραμμή Η γραμμή 12 μπαίνει οπουδήποτε Η γραμμή 12 μπαίνει Η γραμμή 12 μπαίνει μόνο στη θέση 4 οπουδήποτε μέσα στο 4=12 mod 8) set 0 (=12 mod 4) Γραμμή Γραμμή Cache Αρ. Γραμμής διεύθυνση της γραμμής δεδομένων Μνήμη Κρυφή μνήμη με 8 γραμμές και μνήμη με 32 γραμμές δεδομένων cslab@ntua 2007-2008
Κρυφή Μνήμη Άμεσης Χαρτογράφησης (a) Κρυφή μνήμη άμεσης χαρτογράφησης 64K bytes =2K Χ 32 bytes. Στο μέγεθος δεν λαμβάνονται υπ' όψη τα bits ελέγχου (Valid, Tag). (b) Εικονική διεύθυνση των 32 bits (ίση με τη φυσική).
Διεθυνσιοδότηση και Μεγέθη (1) Η εικονική διεύθυνση παράγεται από τη CPU και έχει την ίδια μορφή σε όλους τους τύπους κρυφής μνήμης και το μέγεθός της είναι ίσο με αυτό της φυσικής διεύθυνσης. Καθορίζεται από το μέγεθος της κύριας μνήμης. Θεωρούμε οτι έχουμε κύρια μνήμη με 2^32 bytes, άρα διεύθυνση μεγέθους 32 bits. Η μνήμη είναι οργανωμένη σε λέξεις (words) των 4(2^2) bytes, άρα έχουμε 2^30 λέξεις των 4 bytes. Εικονική Διεύθυνση LINE TAG 16 bits 11 bits WORD BYTE 3 bits 2 bits 32 bits
Διεθυνσιοδότηση και Μεγέθη (2) Δεδομένα (Data) ή Line ή Block Δεδομένων 8 λέξεις ή 32 bytes δεδομένων από κύρια μνήμη που αποθηκεύονται σε μια γραμμή της κρυφής μνήμης. Το μέγεθος αυτό καθορίζεται από την αρχιτεκτονική της κρυφής μνήμης και φαίνεται στο σχετικό πεδίο της εικονικής διεύθυνσης. Byte ή Byte Select (= Word / Byte ) Δείχνει αν γίνεται αναφορά σε μεμονωμένο byte. Το μέγεθος εξερτάται από τον αριθμό bytes ανά λέξη. Αφού έχουμε 4 bytes ανά λέξη, απαιτούνται 2 bytes, όταν είναι 00 προσπελέυνουμε πλήρη λέξη. Λέξη (Word) ή Block Offset Δείχνει σε ποιά λέξη της γραμμής γίνεται αναφορά. Αφού η κάθε γραμμή αποθηκεύει 32 bytes ή 8 words, απαιτούνται 3 bits από την εικονική διεύθυνση. Άρα στη κύρια μνήμη έχουμε 2^27 γραμμές ή blocks των 32 bytes.
Διεθυνσιοδότηση και Μεγέθη (3) Γραμμή (Line) ή Δείκτης (Index) ή Block Δείχνει ποιά καταχώρηση κρυφής μνήμης περιέχει τα αντίστοιχα δεδομένα της κύριας μνήμης, αν υπάρχουν. Αφού η κρυφή μνήμη έχει 2K γραμμές απαιτούνται 11 bits. Άρα οι 2^27 γραμμές (blocks) της κύριας μνήμης ομαδοποιούνται σε 2^11 ομάδες γραμμών που η κάθε μια περιέχει 2^16 γραμμές. Ετικέτα (Tag) Μια μοναδική τιμή 16 bits που καθορίζει μια από τις 2^16 γραμμές κάθε ομάδας (τα bits υψηλότερης τάξης από τη θέση κύριας μνήμης από όπου προέρχονται τα δεδομένα). Επομένως στην κρυφή μνήμη άμεση χαρτογράφησης μόνο μια από τις γραμμές κάθε ομάδας μπορεί να βρίσκεται στη κρυφή μνήμη, η γραμμή Tag Line mod #lines. 'Εγκυρo (Valid) Δείχνει αν η καταχώρηση έχει έγκυρα δεδομένα (1 bit).
Παράδειγμα Ομαδοποίησης Κάθε χρώμα ορίζει μια ομάδα γραμμών / block δεδομένων. Κάθε ομάδα μπορεί να αποθηκευθεί μόνο σε μία γραμμή της κρυφής μνήμης άμεσης χαρτογράφησης: (διεύθυνση γραμμής block) MOD (Αριθμός γραμμών / blocks στην cache) Στο παράδειγμά μας: (διεύθυνση block address) MOD (8) cache 111 110 101 100 011 010 001 000 8 cache γραμμές (11101) MOD (1000) = 101 32 γραμμές (blocks) δεδομένων 00001 cslab@ntua 2007-2008 00101 01001 01101 10001 Μνήμη 10101 11001 11101
Παράδειγμα Υλοποίησης Tag field Διεύθυνση (θέση των bit) 31 15 14 5 4..2 1 0 Index field 2K γραμμές / blocks, κάθε block = 8 words, κάθε word = 4 bytes byte offset Hit/Miss 16 11 3 2 index 16 b i t s v data Επιλογή λέξης tag block offset 8 Χ 4 bytes = 32 bytes = 256 bits tag data 2047 2K γραμμές... 16 32 32... Mux 32 cslab@ntua 2007-2008 32 32 1 0
Συνολοσυνειρμική Κρυφή Μνήμη (1) 511 Συνολοσυνειρμική μνήμη τεσσάρων δρόμων.
Συνολοσυνειρμική Κρυφή Μνήμη (2) Η εικονική διεύθυνση έχει την ίδια μορφή με τη κρυφή μνήμη άμεσης χαρτογράφησης. Όμως έχουμε τη Η συνολοσυσχετιστική μνήμη 4 δρόμων αποθηκεύει 4 γραμμές της ίδιας ομάδας, άρα έχουμε 4 εναλλακτικές ετικέτες για κάθε γραμμή. Επομένως το σύνολο των τετράδων κάθε ομάδας είναι ίσο με 2^9 = 2^11 / 2^2. Αντίστοιχα τα tag bits αυξάνονται κατά δύο (δηλ. 18 = 16 + 2) για να επιλέγουμε μια γραμμή από τη τετράδα. Tag Line mod (#lines/#sets) Εικονική Διεύθυνση TAG 18 bits LINE 9 bits WORD BYTE 3 bits 2 bits
Συνολοσυνειρμική Κρυφή Μνήμη (3) Στη περίπτωση της πλήρως συνειρμικής μνήμης έχουμε στην ουσία μια συνολοσυνειρμική μνήμη με 2^27 ομάδες-γραμμές των 32 bytes η κάθε μια (2^32 = 2^27 X 2^5). Άρα #lines = #sets και η προσπέλαση γίνεται με Tag Line mod (#lines/#sets) Επομένως 1 αν #sets = 1: αμεση χαρτογράφηση αν #sets = #lines: πλήρως συνειρμική αν 1 < #sets < #lines: συνολοσυνειρμική Εικονική Διεύθυνση TAG LINE 27 bits WORD BYTE 3 bits 2 bits
Συνολοσυνειρμική Κρυφή Μνήμη (4) 1-way set associative (direct mapped) block Tag Data 0 2-way set associative 1 Set 2 Χωρητικότητα cache : 8 words Tag Data Tag Data 0 3 1 4 2 5 3 6 7 4-way set associative Set Tag Data Tag Data Tag Data Tag Data 0 1 8-way set associative (fully associative) Tag Data Tag Data cslab@ntua 2007-2008 Tag Data Tag Data Tag Data Tag Data Tag Data Tag Data
Συνολοσυνειρμική Κρυφή Μνήμη (5) Διεύθυνση Tag Field 31 3 0 16 15 1 4 13 12 9 1 8 In d ex V Tag D a ta V Tag D a ta Word/byte 6 5 4.. 0 Index Field 3 2 V T ag D ata V T ag D ata 511 510 509 2 1 0 18 512 sets 2048 block frames 4 to 1 multiplexer Hlt/Miss cslab@ntua 2007-2008 data 4x32
Παράδειγμα οργάνωσης και διευθυνσιοδότησης κρυφής μνήμης Έστω κρυφή μνήμη με 128 γραμμές (block frames) Κάθε γραμμή (block frame) περιέχει 4 λέξεις (16 bytes) 16-bit διευθύνσεις μνήμης στην cache (64Kbytes κύρια μνήμη ή 4096 γραμμές) Δείξτε την οργάνωση της κρυφής μνήμης και τα πεδία της εικονικής διεύθυνσης: Fully Associative cache. Direct mapped cache. 2-way set-associative cache. cslab@ntua 2007-2008
Fully Associative Valid bit V V Oι 128 tags ελέγχονται παράλληλα από το hardware κατά την τοποθέτηση ενός data block στην cache V Διεύθυνση του Block = 12bits Tag = 12bits cslab@ntua 2007-2008 Block Offset = 4bits
Direct Mapped Valid bit V V V Μόνο ένα tag ελέγχεται παράλληλα από το hardware κατά την τοποθέτηση ενός data block στην cache V Διεύθυνση του Block = 12bits Tag = 5bits Index = 7bits cslab@ntua 2007-2008 Block Offset = 4bits Κύρια Μνήμη
2-Way Set-Associative Cache Δύο tags σε ένα set ελέγχονται παράλληλα από το hardware κατά την τοποθέτηση ενός data block στην cache Διεύθυνση του Block = 12bits Tag = 6bits Index = 6bits cslab@ntua 2007-2008 Block Offset = 4bits Κύρια Μνήμη
Αλγόριθμος Ανάγνωσης 1. Η CPU παράγει μια εικονική διεύθυνση για Read. 2. Το υλικό διαβάζει τις κατάλληλες Γραμμές της κρυφής μνήμης ανάλογα με τον τύπο οργάνωσης. 3. Συγκρίνει τα bits Ετικέτας της εικονικής διεύθυνσης με τα bits Valid/Ετικέτας της Γραμμής (ή Γραμμών). Αν δεν υπάρχει συμφωνία τότε έχουμε Αποτυχία Ανάγνωσης (Read Miss). 4. Επιτυχία Ανάγνωσης (Read Hit). Με βάση το πεδίο Λέξη (Word) και Byte προσκομίζονται τα αντίστοιχα bytes από τα Δεδομένα (Data) από τη κατάλληλη Γραμμή, γίνεται η ανάγνωση. Τέλος. 5. Αποτυχία Ανάγνωσης (Read Miss). Η αντίστοιχη γραμμή προσκομίζεται από ανώτερο επίπεδο Κρυφής Μνήμης ή τελικά από τη Κύρια Μνήμη. 5.1. Αν η αποτυχία οφειλόταν στο Valid bit τότε έχουμε νέα Εγγραφή, αλλιώς 5.2. έχουμε Σύγκρουση που απαιτεί Αντικατάσταση. Τελικά γίνεται η ανάγνωση. Τέλος.
Αλγόριθμος Εγγραφής 1. Η CPU παράγει μια εικονική διεύθυνση για Write (ή προκύπτει εγγραφή λόγω του αλγορίθμου ανάγνωσης). 2. Το υλικό διαβάζει τις κατάλληλες Γραμμές της κρυφής μνήμης ανάλογα με τον τύπο οργάνωσης. 3. Συγκρίνει τα bits Ετικέτας της εικονικής διεύθυνσης με τα bits Valid/Ετικέτας της Γραμμής (ή Γραμμών). Αν δεν υπάρχει συμφωνία τότε έχουμε Αποτυχία Κρυφής Μνήμης (Write Miss). 4. Επιτυχία Εγγραφής (Write Hit). Με βάση το πεδίο Λέξη (Word) και Byte προσκομίζονται τα αντίστοιχα bytes από τα Δεδομένα (Data) στη κατάλληλη Γραμμή, γίνεται η Ενημέρωση. Τέλος. 5. Αποτυχία Εγγραφής (Write Miss). 5.1. Αν η αποτυχία οφειλόταν στο Valid bit τότε έχουμε νέα Εγγραφή, αλλιώς 5.2. έχουμε Σύγκρουση που απαιτεί Αντικατάσταση. Τελικά γίνεται η εγγραφή (Δες Write Miss παρακάτω). Τέλος.
Αντικατάσταση Άμεσης Χαρτογράφησης Direct (Άμεσος): μια μόνη επιλογή. Συνειρμική και Συνολοσυνειρμική Least Recently Used (LRU) Λιγότερο Πρόσφατη Χρήση FIFO (First In First Out) Σειρά Εισόδου Random (Τυχαίος) Ενημέρωση, Εγγραφή Write Allocate + Write Back Στο write miss το block μεταφέρεται στη cache και ενημερώνεται. Η κύρια μνήμη ενημερώνεται μόνο στην αντικατάσταση. Write No-Allocate + Write Through Στο write miss το block ενημερώνεται στη κύρια μνήμη. Η κύρια μνήμη ενημερώνεται σε κάθε εγγραφή στη cache.
Λειτουργία (1) Σύστημα με διαδρομή δεδομένων 16 bit (1 λέξη = 2 bytes), Διευθύνσεις των 16 bit, άρα 2^16 bytes ή 2^15 λέξεις. H γραμμή της κρυφής μνήμης κρατά 16 λέξεις (32 bytes). Η μνήμη ομαδοποιείται σε 2^16/2^5 = 2^15/2^4 = 2^11 blocks (lines). H κρυφή μνήμη είναι τύπου Άμεσης Χαρτογράφησης και έχει συνολικά 8 γραμμές (2^3). Σε κάθε γραμμή αντιστοιχούν 2^11/2^3 = 2^8 blocks. Άρα η διευθυνσιοδότηση έχει τη μορφή Tag Line mod 8 Tag Line Word Byte 8 3 4 1 Εικονική Διεύθυνση
Λειτουργία (2) word/byte Line 0xXX00-0xXX1F 0xXX20-0xXX3F 0xXX40-0xXX5F...... 0xXXE0-0xXXFF Κρυφή Μνήμη, αρχική κατάσταση 0x00 000 0000 0-0x00 000 1111 1 0x01 000 0000 0-0x01 000 1111 1 0x02 000 0000 0-0x02 000 1111 1 0x03 000 0000 0-0x03 000 1111 1... 0xFC 000 0000 0-0xFC 000 1111 1 0xFD 000 0000 0-0xFD 000 1111 1 0xFE 000 0000 0-0xFE 000 1111 1 0xFF 000 0000 0-0xFF 000 1111 1 0x00 001 0000 0-0x00 001 1111 1 0x01 001 0000 0-0x01 001 1111 1 0x02 001 0000 0-0x02 001 1111 1 0x03 001 0000 0-0x03 001 1111 1... 0xFC 001 0000 0-0xFC 001 1111 1 0xFD 001 0000 0-0xFD 001 1111 1 0xFE 001 0000 0-0xFE 001 1111 1 0xFF 001 0000 0-0xFF 001 1111 1
Λειτουργία (3) Tag Line 00001010 011 Y 0x0Α Word 1001 Byte 0 (0x0A60-0x0A7F) READ 0x0A72. Read Miss (Valid bit). Νέα Εγγραφή. Ανάγνωση.
Λειτουργία (4) Tag Line 00001100 101 Word 0100 Y 0x0Α (0x0A60-0x0A7F) Y 0x0C (0x0CA0-0x0CBF) Byte 0 READ 0x0CA8. Read Miss (Valid bit). Νέα Εγγραφή. Ανάγνωση.
Λειτουργία (5) Tag Line 00000001 000 Word 1111 Y 0x01 (0x0100-0x011F) Y 0x0Α (0x0A60-0x0A7F) Y 0x0C (0x0CA0-0x0CBF) Byte 0 READ 0x011E. Read Miss (Valid bit). Νέα Εγγραφή. Ανάγνωση.
Λειτουργία (6) Αποτυχία Tag Line 00100100 011 Word 0010 Y 0x01 (0x0100-0x011F) Y 0x0Α (0x0A60-0x0A7F) Y 0x0C Byte 0 Αντικατάσταση αν έχει (0x0CA0-0x0CBF) αλλάξει και προσκόμιση των νέων δεδομένων. READ 0x2464. Read Miss (Tag). Αντικατάσταση >>.
Λειτουργία (7) Overwrite Tag Line 00100100 011 Word 0010 Y 0x01 (0x0100-0x011F) Y 0x24 (0x2460-0x247F) Y 0x0C (0x0CA0-0x0CBF) Byte 0 READ 0x2464. Read Miss (Tag). >> Αντικατάσταση. Ανάγνωση.
Λειτουργία (8) Tag Line 00000001 000 Word 0111 Y 0x01 (0x0100-0x011F) Y 0x24 (0x2460-0x247F) Y 0x0C (0x0CA0-0x0CBF) Byte 1 READ 0x010F. Read Ηit. Ανάγνωση.
Λειτουργία (8) Tag Line 00001100 101 Word 1000 0x01 (0x0100-0x011F) Y 0x0Α (0x0A60-0x0A7F) Y 0x0C (0x0CA0-0x0CBF) Byte 0 WRITE 0x0CB0. Write Hit. Εγγραφή.
Απόδοση Κρυφής Μνήμης (1) Επιτυχία (hit) : το block βρίσκεται σε θέση του εξεταζόμενου επιπέδου κρυφής μνήμης hit rate : hits προς συνολικές προσπελάσεις μνήμης (ποσοστό) hit time/cycles : χρόνος/κύκλοι προσπέλασης των δεδομένων Αποτυχία (miss) : το block δεν υπάρχει στο εξεταζόμενο επίπεδο μνήμης miss rate : 1 (hit rate) miss penalty : χρόνος/κύκλοι μεταφοράς των δεδομένων ενός block στο συγκεκριμένο επίπεδο μνήμης + χρόνος/κύκλοι απόκτησης των δεδομένων από την CPU χρόνος/κύλοι προσπέλασης (access time/cycles) : χρόνος/κύκλοι απόκτησης της 1ης λέξης από τη μνήμη μέσος χρόνος/κύκλοι προσπέλασης (average access time/cycles) : hit time/cycle + miss rate X miss penalty cslab@ntua 2007-2008
Απόδοση Κρυφής Μνήμης (2) Για CPU με ένα μόνο επίπεδο (L1) cache και καθόλου πρόσθετη καθυστέρηση όταν έχουμε cache hit: Χρόνος CPU = χρόνος 1 κύκλου ρολογιού Χ { κύκλοι ρολογιού ανά εντολή κατά τη λειτουργία της CPU και για cache hit + κύκλοι ρολογιού λόγω καθυστέρησης από προσπέλαση της μνήμης λόγω cache miss (Mem stalls) } Mem stalls = αναγνώσεις x miss rate αναγνώσεων x miss penalty αναγνώσεων + εγγραφές x miss rate εγγραφών x miss penalty εγγραφών Αν τα miss penalties των αναγνώσεων και των εγγραφών είναι ίδια: Mem stalls = προσπελάσεις μνήμης x miss rate x miss penalty cslab@ntua 2007-2008
Παράδειγμα Έστω μία CPU λειτουργεί cache L1 και έχει CPIexecution = 1.1 cycles Εντολές: 50% arith/logic, 30% load/store, 20% control Έστω cache miss rate = 1.5% και miss penalty = 50 cycles. CPI = CPIexecution + Mem stalls/εντολή Mem Stalls/εντολή = Mem accesses /εντολή x Miss rate x Miss penalty Mem accesses /εντολή = 1 + 0.3 = 1.3 cycles Instruction fetch Load/store Mem Stalls /εντολή = 1.3 x 0.015 x 50 = 0.975 cycles CPI = 1.1 + 0.975 = 2.075 cycles Η ιδανική CPU χωρίς misses είναι 2.075/1.1 = 1.88 φορές γρηγορότερη Ποιοί είναι οι χρόνοι με ρολόι 200 MHz (5 ns/cycle) ; cslab@ntua 2007-2008
Αρχιτεκτονική Υπολογιστών Μικροαρχιτεκτονική Μικροαρχιτεκτονική τριών διαύλων (Mic-2) Διοχέτευση (Mic-3 και Mic-4) Πρόβλεψη Διακλάδωσης και Υπερβαθμωτή εκτέλεση Kρυφή Μνήμη Μικροαρχιτεκτονική Pentium 4 και Υλοποίηση JVM
Διάγραμμα Pentium 4 Επικοινωνία με Μνήμη Μονάδα Εκτέλεσης Δεδομένα Κρυφή Μνήμη L2 Ανάκληση Αποκωδ-ση Υπερβαθμωτή Εκτέλεση Ουρά Εντολών Μικροεντολές Υποβολή Αποχώρηση Πρόβλεψη Διακλάδωσης Κύρια Μονάδα Ελέγχου Έλεγχος Σειράς Εκτέλεσης
Εικόνα Intel Pentium 4
Δίαυλος NetBurst Pentium 4
Υλοποίηση JVM (1) o stack σε register file
Σύμπτυξη εντολών (1) Κίνηση στη στοίβα για την ακολουθία ILOAD, ILOAD, IADD, ISTORE (a) Χωρίς σύμπτυξη εντολών (b) Με σύμπτυξη χωρίς σύμπτυξη εντολών
(a) (b) Σύμπτυξη εντολών (2) (a) Ομάδες εντολών της JVM (b) Σύμπτυξη ομάδων εντολών της JVM