Post on 27-Dec-2019
Υ-‐01 Αρχιτεκτονική Υπολογιστών Ιεραρχία μνήμης: προχωρημένα θέματα
Αρης Ευθυμίου
Το σημερινό μάθημα
Εικονική μνήμη και κρυφές μνήμες – Physical/Virtual indexing – Σκοπός: μείωση hit Ome
Τεχνικές σχετικές με associaOvity – pseudo-‐associaOvity, way-‐predicOon, vicOm cache
Αλγόριθμοι αντικατάστασης Lockup-‐free caches
2
Εικονική μνήμη και cache
Απαραίτητη σε ένα σύγχρονο σύστημα Απαιτείται υποστήριξη από υλικό
– TLB για γρήγορη μετάφραση Πώς συνδιάζεται η μετάφραση με προσπέλαση κρυφής μνήμης;
Physically Indexed, Physically Tagged – πρώτα μετάφραση, μετά προσπέλαση κρυφής μνήμης
Virtually Indexed, Virtually Tagged – μετάφραση μόνο για αστοχίες κρυφής μνήμης
Virtually Indexed, Physically Tagged – ταυτόχρονη μετάφραση, προσπέλαση κρυφής μνήμης
Physically Indexed, Virtually Tagged
3
Virtually Indexed, Virtually Tagged
Μετάφραση μόνο για αστοχίες κρυφής μνήμης – Το TLB δε θα είναι ενημερωμένο για εγγραφές, πληροφορία LRU
Ομώνυμες διευθύνσεις (homonyms) – Ιδιες εικονικές διευθύνσεις (διαφορετικών διεργασιών)
αντιστοιχούν σε διαφορετικές φυσικές διευθύνσεις
– Λύση: προσθήκη του Process ID (PID) στην εικονική διεύθυνση, ή άδειασμα (flush) της κρυφής μνήμης σε κάθε αλλαγή διεργασίας (context switch)
Συνώνυμες διευθύνσεις (synonyms) – Διαφορετικές εικονικές διευθύνσεις (διαφορετικών διεργασιών)
αντιστοιχούν στην ίδια φυσική διεύθυνση
4
Virtually Indexed, Physically Tagged
Παράλληλη προσπέλαση TLB, cache – η σύγκριση των tag της cache θα γίνει μετά τη μετάφραση διευθ.
Δεν υπάρχουν ομώνυμες διευθύνσεις – το TLB πρέπει να περιέχει PID ή να αδειάζει σε αλλαγή
διεργασίας
Συνώνυμες διευθύνσεις μπορούν να υπάρχουν
5
TLB
Processor Core
VIPT Cache
Main Memory VA
hit
miss
cache line return
PA
Αποφυγή συνωνύμων
Αν το a είναι 0 bits, ή το Set index βρίσκεται “δεξιότερα” του page offset, δεν μπορούν να υπάρχουν συνώνυμα – τυχόν συνώνυμες γραμμές θα είναι στο ίδιο set
Το μέγεθος page καθορίζει τη μέγιστη χωρητικότητα της κρυφής μνήμης (για direct mapped)
ή τον μέγιστο αριθμό των set – Max number of sets = page size / cache line size
6
VPN Page Offset
Cache Tag Set Index Line Offset
εικονική διεύθυνση
a
Ανίχνευση συνωνύμων, a > 0
Μεταβολή του συστήματος μετάφρασης ώστε οι μοιραζόμενες σελίδες να έχουν ίδια τα a bits διευθύνσεων – ονομάζεται page colouring
Κάθε cache miss εξετάζει όλες τις πιθανές θέσεις/set για συνώνυμα – π.χ. για a=2, τα συνώνυμα μπορούν να βρισκονται σε 4 μόνο set
Ελεγχος συνωνύμων στη L2 cache – L2 direct mapped, δυσκολότερο αν είναι associaOve
– L2 physically indexed, physically tagged – L2 inclusive
7
Συνώνυμα στο MIPS R10000 (L2)
Αποθήκευση του VPN[1:0] (που αντιστοιχεί στο a) στα tags της L2, επιπλέον του κανονικού tag
Εστω 2 συνώνυμες διευθύνσεις VA1, VA2 που διαφέρουν στο VPN[1:0], αλλά απεικονίζονται στην ίδια φυσική διεύθυνση PA
Υποθ. VA1, υπάρχει ήδη στις L1, L2 Προσπέλαση VA2 αστοχεί στην L1 Στην L2 θα υπάρχει ήδη η γραμμή, με το επιπλέον PPN
(VA1)[1:0], που θα πρέπει να αντικατασταθεί
8
VPN 12 bit
10 bit 4-‐bit
Way-‐associaOve caches
Βελτιώνουν το miss rate, μειώνουν conflict misses – law of diminishing returns
Αυξάνουν το hit Ome και την κατανάλωση ενέργειας – προσπέλαση πολλαπλών ways και επιλογή του way που ευστοχεί – τα δεδομένα όλων των υπόλοιπων δεν χρησιμοποιούνται
Ενδιαφέρουσες τεχνικές: Way-‐predicOon
– πρόβλεψη του way που θα ευστοχήσει Faking-‐associaOvity
– Μικρές αλλαγές σε direct-‐mapped ώστε να έχει όφελος παρόμοιο με way associaOve
VicOm cache – μειώνει conflict misses χωρίς associaOvity
9
Column-‐associaOve cache
Βασική ιδέα:
Κοινή direct-‐mapped cache Δεύτερη ευκαιρία αν υπάρχει αστοχία: re-‐hash τη
διεύθυνση (αντιστοίχιση σε άλλη γραμμή της cache)
Το hashing πρέπει να είναι απλό, π.χ. αντιστροφή του msb του index – το tag πρέπει να επεκταθεί ώστε να περιέχει το επιπλέον bit
Η διαπίστωση αστοχίας παίρνει λίγο παραπάνω χρόνο
10
Column-‐associaOve cache
Δύο είδη ευστοχίας (hit): με διαφορετικούς χρόνους Η MRU γραμμή θα πρέπει να έχει γρήγορο hit
– Ανταλλαγή των 2 γραμμών του ψεύτο-‐set Προσπέλαση: a,b,c,b,c,b,c,…
– a, b έχουν ίδιο index, c διαφέρει στο msb του index από τις a,b
Σε μία κανονική 2-‐way με LRU – οι πρώτες, a,b,c είναι miss, μετά πάντα hit
Στη Column AssociaOve Cache:
11
a a b c a a b
Skewed associaOve cache
Η χρήση απλής αντιστοίχισης διεύθυνσης σε cache index προκαλεί συχνά συγκρούσεις ακόμη και σε set-‐associaOve caches
Μια λύση είναι η χρήση διαφορετικής αντιστοίχισης (hash) σε κάθε way
Η χρήση αλγόριθμου αντικατάστασης LRU είναι δύσκολη
12
Way predicOon
Πρόβλεψη του way που έχει τη γραμμή – δεν γίνεται προσπέλαση στα άλλα ways – Χρησιμοποιείται για περιορισμό κατανάλωσης ενέργειας – Αν η πρόβλεψη αποτύχει: προσπέλαση σε άλλα ways – Μεταβλητός χρόνος hit
Διάφορες τεχνικές πρόβλεψης: – Most recently used way (στον R10K μαζί με pseudo-‐associaOve) – Σε συνδιασμό με τον branch predictor στον Alpha 21264
Εχει μεγαλύτερα ποσοστά επιτυχούς πρόβλεψης σε I$
13
VicOm cache
Μικρός buffer με μεγάλη associaOvity – 4 – 64 γραμμές
«Πίσω» από την κρυφή μνήμη Περιέχει γραμμές που πρόσφατα εκδιώχθηκαν
(evicted) από τη L1
Κάθε miss της L1 εξετάζει τη vicOm cache πρίν προσπελάσει το επόμενο επίπεδο ιεραρχίας – αν hit, ξαναφέρνει τη γραμμή στη L1
Μειώνει τα conflict misses – αυξάνει λίγο το miss penalty
14
Αλγόριθμοι αντικατάστασης
Σε associaOve caches υπάρχουν αρκετές επιλογές για κάθε αντικατάσταση – η επιλεγόμενη γραμμή λέγεται θύμα (vicOm)
Ο πιο γνωστός αλγόριθμος αντικατάστασης είναι ο least recently used (LRU) – στηρίζεται στην αρχή τοπικότητας αναφορών
Ακριβή υλοποίηση σε υλικό για associaOvity >= 8 – για m-‐ways, υπάρχουν m! δυνατές κατατάξεις
– άρα απαιτούνται τουλάχιστον log2(m!) bits
Προσεγγιστικοί αλγόριθμοι LRU Αλγόριθμος NMRU (not most recently used)
15
Αλγόριθμος LRU (matrix) Κάθε θέση γραμμής κρατάει πληροφορίες για το χρόνο
τελευταίας προσπέλασης – επιπλέον του tag, dirty, valid – πρέπει να ανανεώνεται (ανάγνωση, εγγραφή) σε κάθε
προσπέλαση χωρίς να επηρεάσει το κύκλο ρολογιού
16
0
1
2
3
0 1 2 3
Tree PLRU
Η σειρά των προσπελάσεων καταγράφεται σε ένα δυαδικό δέντρο – τα φύλλα αντιστοιχούν στα ways και δεν αποθηκεύουν τίποτα – Χρειάζονται m-‐1 bit για m ways (για m δύναμη του 2)
Το θύμα επιλέγεται ακολουθώντας το δέντρο – Αν ο κόμβος είναι 0, πήγαινε αριστερά, αν 1, δεξιά
Κάθε προσπέλαση αλλάζει τις τιμές των κόμβων που διάσχισε έτσι ώστε να δείχνουν προς την αντίθετη μεριά από το φύλλο που αντιστοιχεί στο MRU
17
Tree PLRU operaOon
Path shows the vicOm
18
Tree PLRU operaOon Previous allocaOon changes tree nodes to point away from last way (0)
Path for next vicOm
19
Tree PLRU operaOon
20
Tree PLRU operaOon
Now we have a hit in way 4. Not a new allocaOon as in previous steps
21
Tree PLRU operaOon
Nodes 202, 205 were poinOng away from way 4 already, so they don’t change!
22
Αλγόριθμος NMRU
1 bit για κάθε way Σε κάθε hit, το bit παίρνει τη τιμή 1 Περιοδικά, όλα τα bits μηδενίζονται
– ή/και όταν όλα γίνουν 1 Για αντικατάσταση επιλέγεται η «πρώτη» way που έχει
τιμή 0 – η θέση που ξεκινάμε την αναζήτηση αλλάζει με round-‐robin
23
Sector cache
Τα tags μιας κρυφής μνήμης καταλαμβάνουν σημαντικό ποσοστό του συνολικού χώρου της
Χρησιμοποιώντας (πολύ) μεγάλες γραμμές, μειώνεται ο αριθμός των απαιτούμενων bit για tags – αλλά αυξάνεται ο χρόνος μεταφοράς ολόκληρων γραμμών
μεταξύ cache, κύριας μνήμης – επιπλέον, σε πολυεπεξεργαστές, αυξάνεται η πιθανότητα false
sharing
Sector cache: χωρίζει γραμμές σε υπο-‐τμήματα (sector) και μεταφέρει μόνο sectors μεταξύ επιπέδων της ιεραρχίας μνήμης – καθε sector χρειάζεται ξεχωριστό valid bit
Lockup-‐free (non-‐blocking) caches
Επιτρέπουν προσπελάσεις μετά από 1 ή περισσότερες αστοχίες – hit-‐under-‐miss
– hit under mulOple miss, miss under miss
Δεν έχουν νόημα χωρίς – εκτέλεση εκτός σειράς – ιεραρχία μνήμης που δεν
επιτρέπει πολλαπλές προσπελάσεις σε εξέλιξη
Εξετάζουμε μόνο αναγνώσεις – Εγγραφές: βλ. write-‐buffer
25
Miss Status Holding Registers
MSHR αποθηκεύει πληροφορία σχετική με την αστοχία:
αν η καταχώρηση είναι έγγυρη διεύθυνση της γραμμής που αστόχησε
– με δυνατότητα παράλληλης (associaOve) αναζήτησης για κάθε load/store σχετική με τη γραμμή:
– είδος, μέγεθος προσπέλασης – block offset – ο αριθμός φυσικού καταχωρητή που θα φορτώσει την τιμή ή
store buffer
26
MSHR λειτουργία
Κάθε νέο miss ελέγχει όλους τους MSHRs – αν η γραμμή υπάρχει, προσθέτει πληροφορία – αλλιώς, χρησιμοποίησε ελεύθερο MHSR – αλλιώς, stall
Κάθε cache refill ή μέρος του, ελέγχει όλους τους MSHRs – αν η γραμμή υπάρχει, ψάχνει αν μια load/store περιμένει τη λέξη
και τη γράφει στον αντίστοιχο καταχωρητή – γράφει στην κρυφή μνήμη
Οταν το refill ολοκληρωθεί – ο αντίστοιχος MSHR ενημερώνεται ως μη έγγυρος
27
Non-‐uniform cache access
Μεγάλες μνήμες δεν υλοποιούνται ως ένα ενιαίο ορθογώνιο από κελιά μνήμης – οργανώνονται ως μικρότερα “arrays” (mats) – κάποια bit της διεύθυνσης επιλέγουν ένα από τα arrays
Σε αρκετά μεγάλες μνήμες (μερικά Mbytes) η διαφορά καθυστέρησης δεν είναι ομοιομορφη – κοντινά arrays έχουν μικρότερη καθυστέρηση από μακρινά
Οι NUCAs δεν κρύβουν τις διαφορές καθυστέρησης Θέματα τοποθέτησης δεδομένων
– στατική ή δυναμική