ΠΑΝΕΠΙΣΤΗΜΙΟ ΙΩΑΝΝΙΝΩΝ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Αρχιτεκτονική Υπολογιστών Υποσύστημα μνήμης Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου
Άδειες Χρήσης Το παρόν εκπαιδευτικό υλικό υπόκειται σε άδειες χρήσης Creative Commons. Για εκπαιδευτικό υλικό, όπως εικόνες, που υπόκειται σε άλλου τύπου άδειας χρήσης, η άδεια χρήσης αναφέρεται ρητώς.
ΜΥΥ- 402 Αρχιτεκτονική Υπολογιστών Υποσύστημα μνήμης- κρυφή μνήμη Αρης Ευθυμίου πηγή διαφανειών: CS61C UCB
Ασκηση 6! Παράταση μια βδομάδα προθεσμία 23.00 Πρωτομαγιά! Υπάρχει bug στο κομμάτι προσθήκης επιπλέον εντολών δείτε το email στο ecourse! Συνηθισμένο πρόβλημα στη προσομοίωση: δεν φορτώνονται οι μνήμες εντολών και δεδομένων (στα αρχεία imem.v, dmem.v) εμφανίζεται μόνο ένα warning που εύκολα μπορεί κανείς να μη το προσέξει. Δείτε στο κάτω παράθυρο του modelsim 2
Το σημερινό μάθημα (θα δούμε excepnons/interupts αργότερα)!!!! Το (ύπο)σύστημα μνήμης Τοπικότητα αναφορών Ιεραρχία μνήμης Οργάνωση κρυφής μνήμης fully associanve set- associanve direct mapped! Χειρισμός εγγραφών 3
Η μνήμη! Σκοπιά του προγραμματιστή: ένας τεράστιος πίνακας από bytes (ή words) 4
Προβλήματα «μεγέθους»! Προσπέλαση σε «κάτι» μεγάλο παίρνει περισσότερο χρόνο από προσπέλαση σε «κάτι» μικρό ακόμη και αν γνωρίζει κανείς που θα βρεί αυτό που θέλει Π.χ. βιβλιοθήκη τμήματος βιβλιοθήκη παν/μίου! Το ίδιο ισχύει και για τη μνήμη υπολογιστών μια μεγάλη μνήμη είναι αργή σε σχέση με μια μικρή μνήμη ακόμα και στην ακριβότερη δυνατή τεχνολογία 5
Διαφορά επίδοσης μνήμης- επεξεργαστή µproc 60%/year CPU 100 Processor- Memory Performance Gap: (growing 50%/yr) 10 DRAM DRAM 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 1 7%/year 1980 1981 Performance 1000 Time! Αλλά, θέλουμε μεγάλη και γρήγορη μνήμη! 6
Αρχή της τοπικότητας! Ενα πρόγραμμα χρειάζεται/χρησιμοποιεί ένα μικρό μέρος της μνήμης κάθε φορά Σε μια δεδομένη στιγμή ένα μικρό μέρος του προγράμματος τρέχει και εξετάζει ένα μέρος των δεδομένων Τοπικότητα αναφορών (locality of reference) μνήμης:! Χρονική (temporal) μια θέση μνήμης που προσπελαύνεται είναι πολύ πιθανό να προσπελαστεί ξανά σύντομα στο μέλλον! Χωρική (spanal) αν μια θέση μνήμης προσπελαστεί, τότε είναι πολύ πιθανό να προσπελαστούν κοντινές θέσεις μνήμης 7
Αναλογία με βιβλιοθήκη Για μία εργασία σε ένα θέμα! υπάρχουν 100 βιβλία σχετικά στη βιβλιοθήκη! παίρνεις 5 βιβλία και τα βάζεις στο γραφείο σου υποθέτουμε ότι δεν χωράνε περισσότερα ή αν ήταν περισσότερα θα ήθελες πολύ ώρα να βρείς αυτό που θέλεις κάθε φορά! Αν διάλεξες τα κατάλληλα βιβλία, δεν χρειάζεται να ξαναπάς στη βιβλιοθήκη είναι σαν να έχεις τη γνώση των 100 βιβλίων στο γραφείο σου! ιεραρχία βιβλίων: τοπικά στο γραφείο, για γρήγορη προσπέλαση, απομακρισμένα στη βιβλιοθήκη για πληρότητα 8
Ιεραρχία μνήμης 9
Διαχείριση ιεραρχίας μνήμης! Καταχωρητές επεξεργαστή προγραμματιστής - compiler! Κρυφή μνήμη (πολλά επίπεδα) υλικό. Ο προγραμματιστής δεν «βλέπει» τη κρυφή μνήμη! Δευτερεύουσα μνήμη Λειτουργικό σύστημα, προγραμματιστής, χρήστης! Διαχείριση κρυφής μνήμης: δουλεύει σωστά χωρίς να χρειάζεται παρέμβαση του προγραμματιστή για καλές επιδόσεις, χρειάζεται γνώση των ιδιοτήτων της 10
Τεχνολογίες μνήμης! Πολλές «τεχνολογίες» κατασκευής μνήμης διαφορετικές ιδιότητες, κόστη! Κρυφή μνήμη (και καταχωρητές επεξεργαστή) SRAM 6 transistor για κάθε bit! Κύρια μνήμη DRAM 1 transistor για κάθε bit! Δευτερεύουσα μνήμη σκληρός δίσκος Flash 11
Ιεραρχία: όψη υλικού On-Chip Components Control ½ s Size (bytes): 100 s Cost/bit: highest Instr Data Cache Cache Speed (cycles): RegFile Datapath 1 s 10K s Second- Level Cache (SRAM) Third- Level Cache (SRAM) 10 s M s Main Memory (DRAM) 100 s G s Secondary Memory (Disk Or Flash) 1,000,000 s T s lowest 12
Ορολογία! Δεδομένα μεταφέρονται πάντα μεταξύ δύο επιπέδων αν και η ιεραρχία μνήμης έχει περισσότερα επίπεδα συνήθως το «κάτω» επίπεδο περιέχει ένα υπερσύνολο των δεδομένων του επάνω επιπέδου (ιδιότητα inclusion)! Θεωρούμε ότι το «επάνω» επίπεδο είναι μικρότερο, ταχύτερο (και ακριβότερο ανά bit) βρίσκεται πιο «κοντά» στον επεξεργαστή! Η ελάχιστη ποσότητα από bytes που μεταφέρεται ονομάζεται γραμμή (line ή block)! Αν το δεδομένο που προσπελαύνεται βρεθεί στη κρυφή μνήμη, έχουμε ευστοχία (hit)! αλλιώς έχουμε αστοχία (miss) και η προσπέλαση προωθείται στο επόμενο επίπεδο 13
Προσπέλαση μέσω κρυφής μνήμης Εντολή: lw $t0,0($t1)! 1. 2. $t1 περιέχει 2048ten, Memory[2048] = 20 Ο επεξεργαστής ζητάει από την κρυφή μνήμη, ανάγνωση από τη διεύθυνση 2048 Η κρυφή μνήμε ελέγχει αν έχει αντίγραφο των δεδομένων στη διεύθυνση 2048 2a. Ευστοχία: η κρυφή μνήμη διαβάζει 20 και το στέλνει στον επεξεργαστή 2b. Αστοχία: Η κρυφή μνήμη προωθεί τη διεύθυνση 2048 στη μνήμη I. II. III. IV. 3. Η μνήμη διαβάζει 20 στη διεύθυνση 2048 και το στέλνει στη κρυφή μνήμη Η κρυφή μνήμη αντικαθιστά την παλιά τιμή με το 20 και στέλνει το 20 στον επεξεργαστή Ο επεξεργαστής βάζει το 20 στον καταχωρητή $t0 14
Πώς βρίσκουμε μια γραμμή;! Πολλές γραμμές της μνήμης μπορούν να τοποθετηθούν σε κάθε θέση της κρυφής μνήμης! Για να τις ξεχωρίσουμε χρειάζεται μια ετικέτα διεύθυνσης (address tag) ώστε να μπορούμε να ελέγξουμε αν τα δεδομένα που ζητάει ο επεξεργστής βρίσκονται στην κρυφή μνήμη ή όχι αποθηκεύεται μαζί με τα δεδομένα Tag Data 252 1020 132 2048 12 99 7 20 15
Κρυφή μνήμη 4 γραμμών, 4Β Processor! «Αναζήτηση» γραμμής: Συγκριση των αποθηκευμένων tags με τη διεύθυνση προσπέλασης 4 συγκρίσεις των 30 bit 32-bit Address! Ευστοχία: προσπέλαση της λέξης στην ίδια σειρά με το tag που ταιριάζει! Αστοχία: 32-bit Data 12 99 99 7 252 1020 1022 132 2048 προσπέλαση κύριας μνήμης refill της λέξης στη κρυφή μνήμη αντικατάσταση της 32-bit προηγούμενης λέξης Address 20 Cache 32-bit Data Memory 16
Γραμμές 8 Bytes! Οι γραμμές πρέπει να είναι ευθυγραμμισμένες (aligned)! Τα tag αντιστοιχούν στις αριστερές λέξεις address % 8 == 0! Τα τελευταία 3 bit των διευθύνσεων είναι 0! Οικονομία σε αποθηκευτικό χώρο tag και μικρότεροι συγκριτές Processor 32-bit Data 32-bit Address 248 1016 128 2048-10 12 1000 42 20 99 7 1947 Cache 32-bit Address 32-bit Data Memory 17
Fully- associanve cache! Η κρυφή μνήμη όπως παρουσιάστηκε μέχρι τώρα ακολουθεί την οργάνωση fully- associanve σε οποιαδήποτε θέση της μπορεί να αποθηκευτεί οποιαδήποτε γραμμή μνήμης! πολύ ευέλικτη! μεγάλο κόστος: αριθμός συγκριτών ίσος με τον αριθμό θέσεων/γραμμών της κρυφής μνήμης μεγάλος αριθμός bit για κάθε tag 18
Set- associanve cache! Χωρίζεται η κρυφή μνήμη 32-bit σε 2 σετ από θέσεις Address! Κάθε σετ είναι σαν μια fully- associanve cache! Επιλογή του σετ με 1 bit Set 0 της διεύθυνσης! Ο αριθμός συγκριτών γίνεται ½ από fully- assoc. Set 1! Το bit διεύθυνσης επιλογής σετ δεν 32-bit χρειάζεται να αποθηκευτεί Address στα tags Processor 32-bit Data Tag Data Tag Data Cache 32-bit Data Memory 19
Πεδία διεύθυνσης Processor Address (32-bits total) Tag Set Index Block offset! Block Offset: διεύθυνση Byte μέσα στη γραμμή! Set Index: αριθμός του σετ που θα προσπελαστεί! Tag: Το υπόλοιπο τμήμα της διεύθυνσης πρέπει να συγκριθεί με το αποθηκευμένο tag για να διαπιστωθεί ευστοχία/αστοχία! Μέγεθος, σε bit, του Index = log2(αριθμός των σετ)! Μεγεθός του Tag = μέγεθος διεύθυνσης μέγεθος Index log2(μέγεθος γραμμής σε bytes) 20
Παράδειγμα! Διευθύνσεις: 32 bit! Μέγεθος γραμμής: 8 bytes! Συνολικό μέγεθος κρυφής μνήμης: 4KBytes δεν περιλαμβάνεται ο χώρος των tag! Αριθμός σετ: 4! Χωρίστε τη διεύθυνση σε πεδία: tag, index, block offset! Πόσα bits χρειάζονται για αποθήκευση tags; 21
Μέγιστος αριθμός σετ! Ο μέγιστος αριθμός σετ είναι ο αριθμός γραμμών της κρυφής μνήμης 1 γραμμή σε κάθε σετ Ονομάζεται direct mapped Οικονομικότερη οργάνωση: 1 συγκριτής, μικρότερο δυνατό tag Λιγότερο ευέλικτη: μια γραμμή μνήμης έχει μόνο 1 δυνατή θέση στη κρυφή μνήμη! Ο ελάχιστος είναι 1 σετ fully- associanve cache 22
Εγγυρότητα γραμμής cache! Στην αρχή η κρυφή μνήμη είναι άδεια υπάρχουν τυχαίες τιμές αποθηκευμένες στους πινακές της πώς ξεχωρίζουν αυτές οι τιμές από τις διευθύνσεις με τις ίδιες τιμές! Ενα επιπλέον bit ανά γραμμή δηλώνει ότι η γραμμή είναι έγγυρη (valid) υπάρχει μηχανισμός που τα μηδενίζει! Ευστοχία: το αποθηκευμένο tag είναι ίσο με το αντίστοιχο τμήμα της διεύθυνσης και το valid bit είναι 1 23
Παράδειγμα direct mapped Cache Index Valid Tag Data 00 01 10 11 Καθορισμός ευστοχίας: Σύγκριση του αποθηκευμένου tag με τα υπόλοιπα bit της διεύθυνσης (2 MSB bits). Πρέπει και το valid bit να είναι 1 Main Memory 0000xx Γραμμή = μία λέξης 4Β 0001xx Τα 2 LSB (xx) καθορίζουν 0010xx το byte μέσα στο block/ 0011xx λέξη 0100xx 0101xx 0110xx 0111xx Αντιστοίχιση γραμμών 1000xx μνήμης σε θέσης 1001xx κρυφής μνήμης 1010xx 1011xx Τα 2 επόμενα bit είναι 1100xx το index καθορίζουν 1101xx τη γραμμή κρυφής 1110xx μνήμης (διεύθυνση mod 1111xx αριθμός γραμμών) 24
Λειτουργία direct mapped 31 30... 13 12 11... 2 1 0 Hit Tag 20 Index Index Valid Tag Block offset 10 Data Data 0 1 2... 1021 1022 1023 32 20 Συγκριτής 25
DM με μεγαλύτερες γραμμές 31 30... 13 12 11... 4 3 2 1 0 Hit Tag Index Valid Tag 0 1 2... 253 254 255 20 Index Byte offset Data Block offset 8 Data 20 32 26
Επόμενο μάθημα Κρυφές μνήμες: συνέχεια 27
Τέλος Ενότητας
Χρηματοδότηση Το παρόν εκπαιδευτικό υλικό έχει αναπτυχθεί στα πλαίσια του εκπαιδευτικού έργου του διδάσκοντα. Το έργο «Ανοικτά Ακαδημαϊκά Μαθήματα στο Πανεπιστήμιο Ιωαννίνων» έχει χρηματοδοτήσει μόνο τη αναδιαμόρφωση του εκπαιδευτικού υλικού. Το έργο υλοποιείται στο πλαίσιο του Επιχειρησιακού Προγράμματος «Εκπαίδευση και Δια Βίου Μάθηση» και συγχρηματοδοτείται από την Ευρωπαϊκή Ένωση (Ευρωπαϊκό Κοινωνικό Ταμείο) και από εθνικούς πόρους.
Σημειώματα
Σημείωμα Ιστορικού Εκδόσεων Έργου Το παρόν έργο αποτελεί την έκδοση 1.0. Έχουν προηγηθεί οι κάτωθι εκδόσεις: Έκδοση 1.0 διαθέσιμη εδώ. http://ecourse.uoi.gr/course/view.php?id=1307.
Σημείωμα Αναφοράς Copyright Πανεπιστήμιο Ιωαννίνων, Διδάσκων: Επίκουρος Καθηγητής Αριστείδης Ευθυμίου. «Αρχιτεκτονική Υπολογιστών. Υποσύστημα μνήμης». Έκδοση: 1.0. Ιωάννινα 2014. Διαθέσιμο από τη δικτυακή διεύθυνση: http://ecourse.uoi.gr/course/view.php?id=1307.
Σημείωμα Αδειοδότησης Το παρόν υλικό διατίθεται με τους όρους της άδειας χρήσης Creative Commons Αναφορά Δημιουργού - Παρόμοια Διανομή, Διεθνής Έκδοση 4.0 [1] ή μεταγενέστερη. [1] https://creativecommons.org/licenses/by-sa/4.0/.