Σχεδιασμός της Ιεραρχίας Μνήμης (1) Pedro Trancoso Τμήμα Πληροφορικής Πανεπιστήμιο Κύπρου
Η Αρχή... “Ideally one would desire an indefinitely large memory capacity such that any particular…word would be immediately available…We are…forced to recognize the possibility of constructing a hierarchy of memories, each of which has greater capacity than the preceding but which is less quickly accessible” A.W.Burks, H.H.Goldstein, and J. von Neumann (1946)
Το Κίνητρο... Διαφορά μεταξύ της επίδοσης του επεξεργαστή και της μνήμης: Παράδειγμα: Alpha 200MHz340ns/5.0ns = 136 clk Alpha 300MHz266ns/3.3ns = 320 clk Alpha 566MHz180ns/1.7ns = 648 clk
Τυπική Ιεραρχία Μνήμης
Ορολογία για Κρυφή Μνήμη... Cache, fully associative, write allocate, virtual memory, dirty bit, unified cache, memory stall cycles, block offset, misses per instruction, direct mapped, write back, block, valid bit, data cache, locality, block address, hit time, address trace, write through, cache miss, set, instruction cache, page fault, random replacement, average memory access time, miss rate, index field, cache hit, n-way set associative, no-write allocate, page, least- recently used, write buffer, miss penalty, tag field, write stall,...
Βασικές Έννοιες Πρόσβαση στην Κρυφή Μνήμη Λόγος Επιτυχίας (Cache Hit / Hit Rate), Χρόνος Επιτυχίας (Hit Time) Λόγος Αποτυχίας (Cache Miss / Miss Rate), Ποινή Αποτυχίας (Miss Penalty) Τοπικότητα Χρονική Τοπικότητα (Temporal Locality) If an item is referenced, it will tend to be referenced again soon (e.g. loops, reuse) Χωρική Τοπικότητα (Spatial Locality) If an item is referenced, items whose addresses are close by tend to be referenced soon (e.g. straight line code, array accesses)
Επίδοση της Κρυφής Μνήμης Παράδειγμα: CPI=1, load/store=50% instr, miss penalty=25clk, miss rate=2%, speedup=? CPU execution time = (CPU clock cycles + Memory stall cycles) x Clock cycle time Memory Stall Cycles = Number of misses x Miss penalty = IC x (Misses / Instruction) x Miss penalty = IC x (Memory Accesses / Instruction) x Miss rate x Miss penalty Memory stall Cycles = IC x Reads per instruction x Read miss rate x Read miss penalty + IC x Writes per instruction x Write miss rate x Write miss penalty (Misses / Instruction) = (Miss rate x Memory accesses) / Instruction count = Miss rate x (Memory accesses / Instruction)
Κρυφή Μνήμη BLOCK SET WORD
Τέσσερις Ερωτήσεις 1.Που μπορούμε να βάλουμε ένα μπλοκ; (block placement) 2.Πως βρίσκουμε αν ένα μπλοκ είναι στην Κρυφή Μνήμη; (block identification) 3.Ποιο μπλοκ να αντικαταστήσω μετά από αποτυχία; (block replacement) 4.Τι γίνεται όταν γράφουμε; (write strategy)
Που μπορούμε να βάλουμε ένα μπλοκ; Οργάνωση της Κρυφής Μνήμης: Direct Mapped: each block has only one place it can appear Mapping = (Block address) MOD (Number of blocks in cache) Fully Associative: a block can be placed anywhere Set Associative: a block can be placed on a restricted set of places Mapping = (Block address) MOD (Number of sets in cache)
Πως βρίσκουμε αν ένα μπλοκ είναι στην Κρυφή Μνήμη; Διεύθυνση: Block Offset Block Address: Index + Tag Λειτουργία: Index για να βρει που μπορεί να είναι, Tag για να βρει αν είναι το συγκεκριμένο μπλοκ (κάνουμε Tag Check για όλα τα πιθανά Tags), Offset για να βρει τα δεδομένα μέσα στο μπλοκ
Ποίο μπλοκ να αντικαταστήσω μετά από αποτυχία; Direct Mapped: Μόνο ένα μπλοκ μπορεί να αντικατασταθεί Set Associative: Random (απλό) Least-recently used (LRU) First in, first out (FIFO)
Τι γίνεται όταν γράφουμε; Οι περισσότερες προσβάσεις είναι διαβάσματα (π.χ. 10% st και 37% ld για 5 SPECint2000) Για το read μπορούμε να διαβάζουμε το Tag και το μπλοκ ταυτόχρονα όμως για το write... Δυο επιλογές για να γράψουμε: Write through: write to both block in cache and in main memory Write back: write only to block in cache. Modified block written to main memory upon replacement (use dirty bit)
Τι γίνεται όταν γράφουμε; Δυο επιλογές όταν έχουμε write miss (write miss policy): Write allocate: block is allocated (read miss + write) No-write allocate: does not affect the cache, modifies only lower-level memory Βελτίωση... Write buffer: processor continues execution as data is written to buffer
Παράδειγμα: Alpha Data Cache
Επίδοση της Κρυφής Μνήμης Άσκηση: Ποια οργάνωση έχει χαμηλότερο λόγο αποτυχίας: 16KB instruction cache + 16KB data cache 32 KB unified cache Assume: 36% of instr are data transfers, hit=1clk, miss penalty=100clk, unified with single port means 1 extra clk if 2 requests, write-through with write buffer (ignore stalls to write buffer) Average memory access time = ΑΜΑΤ = Hit time + Miss rate x Miss penalty
Επίδοση της Κρυφής Μνήμης Άσκηση: cache penalty=100clk, all instr take 1clk, average miss rate=2%, average memory refs per instr=1.5, average cache misses per 1000 instr=30. Performance with and without cache=? CPU time = (CPU execution clock cycles + Memory stall clock cycles) x Clock cycle time
Μείωση Ποινής Λόγω Αποτυχιών Κρυφή Μνήμη Πολύ-επιπέδου Πιο γρήγορη ή πιο μεγάλη ΚΜ; ΚΜ Δεύτερο επίπεδο (L2) Λόγοι αποτυχίας της L2: Local miss rate = miss L2 / access L2 Global miss rate = miss L2 / memory access Multilevel inclusion / exclusion AMAT = Hit time L1 + Miss rate L1 x Miss penalty L1 Miss penalty L1 = Hit time L2 + Miss rate L2 x Miss penalty L2 AMAT = Hit time L1 + Miss rate L1 x (Hit time L2 + Miss rate L2 x Miss penalty L2) AMAT = Misses per instruction L1 x Hit time L2 + Misses per instruction L2 x Miss penalty L2
Μείωση του Λόγου Αποτυχίας Types of Misses (“three C’s”) Compulsory: first access. Also called cold- start misses or first-reference misses Capacity: cache can not contain all blocks Conflict: many blocks map to the same set. Also called collision misses or interference misses (fourth C: Coherence…)
Μείωση του Λόγου Αποτυχίας Μεγαλύτερο μέγεθος του μπλοκ Reduces compulsory misses (spatial locality) Increases miss penalty May increase conflict and capacity misses
Μεγαλύτερο μέγεθος του μπλοκ Άσκηση: Cache Size Block Size4K16K64K256K %3.94%2.04%1.09% %2.87%1.35%0.70% %2.64%1.06%0.51% %2.77%1.02%0.49% %3.29%1.15%0.49% Assume memory system takes 80 clk overhead and then delivers 16 bytes every 2 clk (16 bytes in 82clk, 32 bytes in 84clk,…). Which block size has the smallest average memory access time for each cache size?
Μείωση του Λόγου Αποτυχίας Μεγαλύτερη Κρυφή Μνήμη Προφανώς! Higher Associativity Μείωση των Conflict Misses Way Prediction and Pseudoassociative Caches
Μείωση του Λόγου Αποτυχίας Βελτιώσεις από το Μεταγλωττιστή Loop Interchange for (j=0; j<100; j++) for (i=0; i<5000; i++) x[i][j] = 2*x[i][j] for (i=0; i<5000; i++) for (j=0; j<100; j++) x[i][j] = 2*x[i][j] i=0 j=0 i=0 j=100 … i=1 j=0 i=0 j=0 i=0 j=100 … i=1 j=0
Μείωση του Λόγου Αποτυχίας Blocking X=X=