ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2 9ο μάθημα: Κρυφές μνήμες εικονική μνήμη Αρης Ευθυμίου Πηγές διαφανειών: συνοδευτικές διαφάνειες αγγλικης εκδοσης του βιβλιου
Μεγαλύτερη associadvity! Rules of thumb: 8- way has as good a miss rate as fully associadve 2:1 cache rule of thumb direct mapped μεγέθους Ν έχει ίδιο miss rate με 2- way set- associadve μεγέθους Ν/2! Γενικά αυξάνοντας την associadvity αυξάνει ο κύκλος ρολογιού! Σε ένα γρήγορο επεξεργαστή η παραπάνω πολυπλοκότητα μειώνει το ρυθμό ρολογιού αλλά το αυξημένο miss penalty (σε αριθμό κύκλων) ευνοεί το καλύτερο miss rate της μεγαλύτερης associadvity 2
Πολλαπλά επίπεδα cache! Η τεχνολογία DRAM δεν βελτιώνει τη ταχύτητα προσπέλασης με τόσο γρήγορο ρυθμό όσο η τεχνολογία επεξεργαστών το miss penalty σε αριθμό κύκλων ρολογιού μεγαλώνει! Πολλαπλά επίπεδα cache βελτιώνουν το miss penalty Level 2, level 3 κρυφές μνήμες τοποθετούνται στο ολοκληρωμένο του επεξεργαστή/πυρήνα! AMAT = Hit Dme L1 + Miss rate L1 * Miss penalty L1! Miss penalty L1 = Hit Dme L2 + Miss rate L2 * Miss penalty L2 3
Global, local misses! Πώς ορίζονται τα miss rate για κάθε επίπεδο?! Local miss rate ο αριθμός αστοχιών μιας cache διαιρεμένος με τον αριθμό προσπελάσεων της ίδιας cache Ο προηγούμενος τύπος χρησιμοποιεί local miss rates! Global miss rate - ο αριθμός αστοχιών μιας cache διαιρεμένος με τον αριθμό προσπελάσεων που προκαλεί ο επεξεργαστής! Το local miss rate είναι σχετικά μεγάλο για το 2ο επίπεδο το 1 ο επίπεδο εκμεταλεύτηκε το μεγαλύτερο μέρος της τοπικότητας αναφορών μνήμης 4
Παράδειγμα! Σε 1000 προσπελάσεις, 40 αστοχίες στο 1 ο επίπεδο, 20 στο 2 ο επίπεδο! 1.5 προσπελάσεις μνήμης ανά εντολή! Hit Dme L1 είναι 1 κύκλος! Hit Dme L2 είναι 10 κύκλοι! Miss penalty από L2 είναι 200 κύκλοι! Υπολογίστε τα Miss rates και AMAT 5
Λύση! Miss rate L1 (ίδιο για global, local) = 40/1000 = 0.04 (4%)! Global miss rate L2 = 20/1000 = 2%! Local miss rate L2 = 20/40 = 50%! ΑΜΑΤ = HitL1 + MissL1 * (HitL2 + local Miss L2 * Penalty L2) = 1+0.04*(10+0.5*200)=5.4 κύκλοι 6
Πολλαπλά επίπεδα cache! Η ταχύτητα του 1 ου επιπέδου επηρεάζει το ρυθμό ρολογιού του επεξεργαστή! Η ταχύτητα του 2 ου επιπέδου επηρεάζει το miss penalty του 1 ου επιπέδου! Υπάρχει μεγαλύτερη ευελιξία επιλογής οργάνωσης στο 2 ο επίπεδο! Μεγάλη σημασία έχει το κόστος και πόσο μειώνει το μέσο χρόνο προσπέλασης (ΑΜΑΤ) 7
Παράδειγμα! Hit Dme L2 = 10 clock cycles! 2- way associadvity αυξάνει το hit Dme σε 10.1 υποθέτουμε σχετικά αργό ρολόι για το 2 ο επίπεδο! Local miss rate direct mapped = 25%! Local miss rate 2- way = 20%! Miss penalty = 200 κύκλοι! Ποιά οργάνωση είναι καλύτερη? 8
Λύση! Υπολογίζουμε τα miss penaldes που θα «έβλεπε» η cache 1 ου επιπέδου! Miss penalty direct mapped = 10+0.25*200 = 60! Miss penalty 2- way = 10.1+0.2*200 = 50.1! Αν το 0.1 μας αναγκάζει να αυξήσουμε το L2 hit Dme σε 11 κύκλους, Miss penalty 2- way = 51 πάλι το κέρδος είναι μεγάλο 9
Cache inclusion Πρέπει όλες οι γραμμές της L1 να βρίσκονται και στην L2; inclusion property! Χρήσιμο σε πολυεπεξεργαστές: είναι εύκολο να ξέρει το κατώτερο επίπεδο κρυφής μνήμης αν υπάρχει αντίγραφο μιας γραμμής στην ιεραρχία μνήμης ενός πυρήνα! αλλά ξοδεύουν χώρο στην L2, αυξάνοντας το miss rate 10
Προτεραιότητα σε αναγνώσεις! Οι αναγνώσεις είναι πιο χρήσιμες από τις εγγραφές κάποια κοντινή (επόμενη) εντολή χρειάζεται τη τιμή! Μπορούμε να καθυστερήσουμε τις εγγραφές τοποθετώντας τες προσωρινά σε write buffer! Προβλήματα, βλ. παρακάτω πρόγραμμα διευθύνση 512, 1024 αντιστοιχούν στην ίδια θέση στη cache 11
Προτεραιότητα σε αναγνώσεις! Οι αστοχίες πρέπει να περιμένουν το write buffer να αδειάσει! Οι αστοχίες εξετάζουν και το write buffer! Παρόμοια μια write- back cache μπορεί να μειώσει το κόστος εγγραφών η dirty γραμμή γράφεται σε ένα buffer διαβάζει τη νέα γραμμή που αστόχησε μετά γράφει το θύμα στο επόμενο επίπεδο 12
Μικρές και απλές!! Στόχος: μείωση του hit Dme! Το cridcal path στη κρυφή μνήμη (hits) ανάγνωση μνήμης tag σύγκριση με το αντίστοιχο τμήμα της διεύθυνσης επιλογή του σωστού set! Η πιο απλή υλοποίηση είναι direct mapped μία σύγκριση, δε χρειάζεται επιλογή δε χρειάζεται αλγόριθμος αντικατάστασης Ταχύτερος κύκλος ρολογιού! Σύγκριση tag μπορεί να γίνει παράλληλα με τη μεταφορά δεδομένων 13
L1 size and associadvity 14
Way predicdon! Οι γραμμές κάθε set συνήθως κρατούνται σε ξεχωριστές SRAM οι SRAMs ονομάζονται ways! Απλή οργάνωση: διάβασε ολόκληρο το set (δηλαδή όλες τις ways) και επέλεξε τη γραμμή όπου το αντίστοιχο tag ταιριάζει όλες οι προσπελάσεις εκτός από μία, «πάνε χαμένες» μεγάλη κατανάλωση/σπατάλη ενέργειας! Εναλλακτικά: πρόβλεψε ένα way, αν δεν περιέχει τη γραμμή, δοκίμασε τα υπόλοιπα ways Αν η πρόβλεψη είναι σωστή, μικρότερη κατανάλωση, μικρότερο hit Dme 15
Way predicdon! Χρησιμοποιείται ευρύτατα MIPS 10000, ARM Cortex- A8,! Ακρίβεια πρόβλεψης > 90% for two- way > 80% for four- way I- cache has be er accuracy than D- cache! Πολλαπλοί χρόνοι hit 16
Διοχετευμένες cache! Αύξηση καθυστέρησης και ρυθμού προσπελάσεων εύστοχη προσπέλαση (hit) παίρνει ένα αριθμό από κύκλους PenDum: 1 cycle PenDum Pro PenDum III: 2 cycles PenDum 4 Core i7: 4 cycles! Ευκολότερη αύξηση associadvity! Προβλήματα μεγαλύτερες ποινές: λανθασμένης πρόβλεψης διακλάδοσης φόρτωσης χρήσης (load use)! Τα προβλήματα είναι λιγότερο σημαντικά σε επεξεργαστές με δυναμικό scheduling και εκτέλεση εκτός σειράς 17
Non- blocking caches! Επεξεργαστές με εκτέλεση εκτός σειράς δε χρειάζεται να να παγώνουν τη διοχέτευση σε κάθε αστοχία κρυφής μνήμης! Οι non- blocking (ή lockup- free) caches επιτρέπουν εύστοχες προσπελάσεις όσο εξυπηρετείται η προηγούμενη αστοχία λέγεται hit- under- miss! Ετσι μειώνεται η ποινή αστοχίας μηδενίζεται για L1, πολύ δύσκολο για L2! Μπορεί ακόμη να σχεδιαστεί μια cache ώστε να επιτρέπει πολλαπλές αστοχίες λέγεται hit under muldple miss ή miss under miss 18
Non- blocking caches 19
MulD- banked caches! Διάσπαση της cache σε ανεξάρτητα κομμάτια ονομάζονται banks! Ταυτόχρονη προσπέλαση σε κάθε bank! Φτηνός τρόπος για πολλαπλές θύρες πρόσβασης αρκεί οι ταυτόχρονες προσβάσεις να αντιστοιχούν σε διαφορετικά banks sequendal interleaving - συνεχόμενες διευθύνσεις γραμμών σε διαφορετικές banks 20
Early- restart, cridcal word first! Βασική ιδέα: μετά από miss, δε χρειάζεται να περιμένουμε την εγγραφή όλης της γραμμής (cache line refill) πριν επιστρέψουμε στον επεξεργαστή τη λέξη που ζήτησε! Early- restart μόλις έρθει η λέξη, τη στέλνουμε στον επεξεργαστή! CriDcal word first Προσκόμισε τη ζητούμενη λέξη πρώτα και μετά τα υπόλοιπα στοιχεία της γραμμής! Χρήσιμες τεχνικές για μεγάλες γραμμές! Δυσκολότερος χειρισμός 2 ης προσπέλασης σε λέξη της γραμμής πριν ολοκληρωθεί το refill 21
Merging write buffer! Write buffer προσωρινή αποθήκευση για εγγραφές προς το επόμενο επίπεδο μνήμης ώστε να εξυπηρετηθούν οι αναγνώσεις κατά προτεραιότητα Παραλλαγή: vicdm buffer γραμμές προς αντικατάσταση! Ο write buffer έχει πεπερασμένη χωρητικότητα πολλαπλές εγγραφές γεμίζουν όλες τις θέσεις και μετά παγώνει η cache μέχρι να αδειάσει Λύση: merging wb 22
Compiler opdmizadons! Η καλύτερη μέθοδος για το hardware: αφήνει το so ware να κάνει τη δουλειά!! Τοποθέτηση δεδομένων και προγράμματος! Παράδειγμα: branch staightening: Αν ο compiler γνωρίζει ότι η πιθανότητα να ακολουθηθεί μια διακλάδοση είναι μεγάλη, αντιστρέφει τη συνθήκη ώστε να εκτελείται το σειριακό κομμάτι κώδικα συχνότερα εκμεταλεύεται χωρική τοπικότητα αναφορών 23
Πίνακες στη μνήμη! Ο πίνακας είναι 2 διαστάσεων αλλά στη μνήμη υπάρχει μόνο 1 διάσταση column major A(i,j) at A+i+j*n row major A(i,j) at A+i*n+j Column major Row major 0 5 10 15 0 1 2 3 1 6 11 16 4 5 6 7 2 7 12 17 8 9 10 11 3 8 13 18 12 13 14 15 4 9 14 19 16 17 18 19 24
Loop interchange! Αλλαγή σειράς σε επαναλήψεις ώστε τα δεδομένα να προσπελαύνονται σειριακά 25
Blocking! «σμίκρυνση» του προβλήματος ώστε να χωράει στη κρυφή μνήμη και εκτέλεση περισσότερων επαναλήψεων! Παράδειγμα: πολλαπλασιασμός πινάκων c ij * = a i* b *j 26
Απλή υλοποίηση for (i=0;i<n;i++) for (j=0;j<n;j++) for (k=0;k<n;k++) c[i][j] += a[i][k] * b[k][j]; 27
Γραμμική άλγεβρα! Μπορούμε να σπάσουμε τον πίνακα σε μικρότερους! κάθε πολλαπλασιασμός γίνεται σε μικρούς πίνακες με μέγεθος κατάλληλο ώστε να χωράνε στη κρυφή μνήμη 28
Υλοποίηση for(jj=0; jj < N; jj=jj+b) for(kk=0; kk < N; kk=kk+b) for(i=0; i < N; i++) for(j=jj; j < min(jj+b,n); j++) { r = 0; for(k=kk; k < min(kk+b,n); k++) r = r + a[i][k] * b[k][j]; c[i][j] = c[i][j] + r; } 29
Γραμμική άλγεβρα 30
Hardware prefetching! Προσκόμιση γραμμών πριν τις ζητήσει ο επεξεργαστής Μειώνει compulsory misses! Παράδειγμα: σε κάθε αστοχία προσκόμισε τη γραμμή που χρειάζεται και την επόμενη! Προσκόμιση μπορεί να γίνεται στην cache ή σε ειδικό χώρο αποθήκευσης (stream buffer)! Εκμεταλεύεται memory bandwidth που δεν χρησιμοποιείται μπορεί να καθυστερήσει εξυπηρέτηση αστοχιών ή να αντικαταστάσει χρήσιμες γραμμές 31
PenDum 4 L2 prefetching 32
So ware prefetching! Ειδικές εντολές prefetch τοποθετημένες από τον compiler αρκετά πριν χρειαστούν τα δεδομένα συχνά σε συνδιασμό με loop- unrolling! Register prefetch φορτώνουν τιμές σε καταχωρητή αλλά οι καταχωρητές είναι λίγοι...! Cache prefetch φορτώνουν τιμές στη cache μόνο! Τι συμβαίνει αν μια εντολη prefetch προκαλέσει page fault? Συνήθως είναι non- fauldng, αν θα προκαλούσαν page fault μετατρέπονται σε no- ops 33
Εικονική μνήμη 34
Εικονική μνήμη ως cache! Η κύρια μνήμη (DRAM) μπορεί να θεωρηθεί ως «κρυφή μνήμη» της δευτερεύουσας μνήμης (δίσκος) ο χειρισμός γίνεται και με υλικό και με λογισμικό (Λ.Σ.)! Τα προγράμματα μοιράζονται τη κύρια μνήμη κάθε διεργασία έχει ξεχωριστό ένα χώρο διευθύνσεων μνήμης, εικονική μνήμη (virtual memory) προστατεύεται από άλλες διεργασίες που τρέχουν ταυτόχρονα! Το Λ.Σ. και ο επεξεργαστής μεταφράζουν τις εικονικές διευθύνσεις σε φυσικές (physical) μια «γραμμή» εικονικής μνήμης λέγεται σελίδα (page) αστοχία στη κύρια μνήμη λέγεται σφάλμα σελίδας (page fault) 35
Αντιστοιχία με κρυφή μνήμη 36
Μετάφραση διευθύνσεων! Σελίδες σταθερού μεγέθους (π.χ. 4ΚΒ) λιγότερα bits για αριθμό σελίδας (οικονομία στην αποθήκευση) εκμετάλευση του σχετικά μεγάλου ρυθμού μεταφοράς από το δίσκο σε σχέση με τον αργό χρόνο προσπέλασης! Δεν χρειάζεται οι σελίδες να είναι σε συνεχόμενο χώρο στη (φυσική) μνήμη 37
Πίνακας (μετάφρασης)σελίδων! Αποθηκεύει πληροφορίες για τη μετάφραση πίνακας καταχωρήσεων σελίδων (page table entry PTE), διευθυνσιοδοτημένoς με τον εικονικό αριθμό σελίδας! Αν μια σελίδα είναι στην μνήμη η καταχώριση περιλαμβάνει τον αριθμό φυσικής σελίδας και διάφορα bit κατάστασης, χρήσιμα για αλγόριθμο αντικατάστασης, χειρισμό εγγραφών! Αν η σελίδα δεν είναι στη μνήμη η καταχώριση δείχνει τη θέση της σελίδας στο δίσκο! Ταυτόχρονα μπορεί να ελεγχθεί αν επιτρέπεται πρόσβαση στη σελίδα από τη διεργασία π.χ. πρόσβαση σε διεύθυνση που δεν έχει κατανεμηθεί στη διεργασία 38
Ξεχωριστοί πίνακες ανά διεργασία! Ο χώρος που απαιτείται είναι μεγάλος μόνο η κύρια μνήμη μπορεί να αποθηκεύσει τον πίνακα σελίδων! Οργάνωση σε 2 (ή περισσότερα) επίπεδα για οικονομία χώρου 39
Πίνακες στη μνήμη! Κάθε προσπέλαση στην εικονική μνήμη από το πρόγραμμα στην πραγματικότητα προκαλεί 2 προσπελάσεις μνήμης 40
Γρήγορη μετάφραση! Οι προσπελάσεις στο πίνακα σελίδων έχουν μεγάλη τοπικότητα αναφορών! Μπορει να εκμεταλευτεί από μια κρυφή μνήμη για καταχωρήσεις πίνακα μετάφρασης (PTE) ευστοχία: άμεση μετάφραση σε ένα κύκλο (ή και μισό) αστοχία: page table walk από υλικό ή λογισμικό! Ονομάζεται TranslaDon Look- aside Buffer (TLB)! Περιέχει 16-512 PTEs, 0.5 1 cycle for hit, 10 100 cycles for miss, 0.01% 1% miss rate! Πρόσφατοι επεξεργαστές έχουν 2 επίπεδα TLB ακριβώς όπως οι κρυφές μνήμες: μειώνουν τη ποινή αστοχίας 41
Μετάφραση διεύθυνσης 42
Μετάφραση και διοχέτευση Η μετάφραση διεύθυνσης προσθέτει χρόνο. Επιλογές:! αύξηση περιόδου ρολογιού όχι!! χωριστά στάδια διοχέτευσης για TLB και κρυφή μνήμη δεν είναι καταστροφικό αλλά αυξάνει χρόνο προσπέλασης! κρυφές μνήμες με εικονικές διευθύνσεις! παράλληλη προσπέλαση σε TLB και κρυφή μνήμη 43
Κρυφές μνήμες με εικονικές διευθύνσεις! Δεν χρειάζεται μετάφραση αν ευστοχεί στην κρυφή μνήμη αλλά ο έλεγχος πρόσβασης πρέπει να γίνεται! Τα tags πρέπει να επεκτείνονται με αριθμό/κωδικό διεργασίας αλλιώς σε κάθε context switch πρέπει να αδειάζει όλη η cache!! Πρόβλημα ψευδόνυμων (aliasing) αν δύο εικονικές σελίδες αντιστοιχούν στην ίδια πραγματική, δύο αντίγραφα της ίδιας γραμμής μπορεί να βρίσκονται στην κρυφή μνήμη 44
Παράλληλη προσπέλαση! Λέγεται virtually indexed, physically tagged! Το index της κρυφής μνήμης δεν χρειάζεται μετάφραση αν «πεφτει» στο τμήμα της διεύθυνσης που αντιστοιχεί στο page offset! Η σύγκριση των tags γίνεται μετά από και τις δύο προσπελάσεις 45
Ορια παράλληλης προσπέλασης! Αν L + b > k, μπορεί να έχουμε aliasing! Τίθεται όριο στον αριθμό set της κρυφής μνήμης! L = k- b! Η κρυφή μνήμη μπορεί να αυξηθεί, μόνο χρησιμοποιώντας περισσότερα ways 46