Διάλεξη 14 Εισαγωγή στην Ιεραρχία Μνήμης



Σχετικά έγγραφα
Διάλεξη 15 Απόδοση της Ιεραρχίας Μνήμης Βελτιστοποίηση της απόδοσης

Διάλεξη 12 Καθυστερήσεις (Stalls) Εκκενώσεις Εντολών (Flushing)

Κεφάλαιο 7 Ιεραρχία Μνήμης (Memory Hierarchy)

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΔΕΥΤΕΡΗ ΠΡΟΟΔΟΣ ΣΤΗΝ ΟΡΓΑΝΩΣΗ ΣΤΟΥΣ Η/Y (ΗΥ232)

Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών H/Y Department of Electrical and Computer Engineering. Εργαστήριο 8. Χειμερινό Εξάμηνο

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών. Διάλεξη 13. Διακλαδώσεις. Νίκος Μπέλλας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

Διάλεξη 11 Προώθηση (Forwarding)

Διάλεξη 12 Καθυστερήσεις (Stalls)

Θέµατα Φεβρουαρίου

ΠΛΕ- 074 Αρχιτεκτονική Υπολογιστών 2

Ιεραρχία Μνήμης. Ιεραρχία μνήμης και τοπικότητα. Σκοπός της Ιεραρχίας Μνήμης. Κρυφές Μνήμες

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Κρυφές Μνήμες. (οργάνωση, λειτουργία και απόδοση)

ΠΛΕ- 027 Μικροεπεξεργαστές 9ο μάθημα: Αρχιτεκτονική συστήματος μνήμης: Κρυφές μνήμες εισαγωγή

Εικονική Μνήμη (Virtual Μemory)

Ασκήσεις Caches

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Άσκηση 1η. Θεωρήστε ένα σύστημα μνήμης με μία cache: 4 way set associative μεγέθους 256ΚΒ,

Επιπλέον διδακτικό υλικό κρυφών μνημών: set-associative caches, πολιτικές αντικατάστασης, χειρισμός εγγραφών

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ

Εικονική Μνήμη (Virtual Μemory)

Ασκήσεις Caches

Ασκήσεις Caches. Αρχιτεκτονική Υπολογιστών. 5ο εξάμηνο ΣΗΜΜΥ ακ. έτος: Νεκ. Κοζύρης

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Processor-Memory (DRAM) ιαφορά επίδοσης

Αρχιτεκτονική Υπολογιστών

Α. Δίνονται οι. (i) στη. πρέπει να. πιο. (ii) $a0. $s0 θα πρέπει να. αποθήκευση. αυξάνει τον. f: sub sll add sub jr. h: addi sw sw.

add $t0,$zero, $zero I_LOOP: beq $t0,$s3, END add $t1, $zero,$zero J_LOOP: sub $t2, $s3, $t0 add $t2, $t2, $s1 int i, j, tmp; int *arr, n;

SMPcache. Ένα εργαλείο για προσομοίωση-οπτικοποίηση κρυφής μνήμης (Cache)

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Υ- 01 Αρχιτεκτονική Υπολογιστών Υπόβαθρο: Κρυφές μνήμες

i Στα σύγχρονα συστήματα η κύρια μνήμη δεν συνδέεται απευθείας με τον επεξεργαστή

Τελική Εξέταση, Απαντήσεις/Λύσεις

Τεχνολογίες Κύριας Μνήμης

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

3 η ΑΣΚΗΣΗ ΑΡΧΙΤΕΚΤΟΝΙΚΗΣ ΥΠΟΛΟΓΙΣΤΩΝ

Η ιεραρχία της μνήμης

Processor-Memory (DRAM) ιαφορά επίδοσης

Οργάνωση Υπολογιστών (ΙI)

ΕΘΝΙKΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. Ονοματεπώνυμο: ΑΜ:

Processor-Memory (DRAM) Διαφορά επίδοσης

ΕΙΣΑΓΩΓΗ ΣΤΟΥΣ ΥΠΟΛΟΓΙΣΤΕΣ. ΜΑΘΗΜΑ 4 ο ΟΡΓΑΝΩΣΗ ΤΗΣ ΜΝΗΜΗΣ ΠΕΡΙΦΕΡΕΙΑΚΗ ΜΝΗΜΗ

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΔΕΥΤΕΡΗ ΠΡΟΟΔΟΣ ΣΤΗΝ ΟΡΓΑΝΩΣΗ ΣΤΟΥΣ Η/Y (ΗΥ232)

Κύρια μνήμη. Μοντέλο λειτουργίας μνήμης. Ένα τυπικό υπολογιστικό σύστημα σήμερα. Οργάνωση Υπολογιστών (ΙI)

και η µονάδα ελέγχου (control) O επεξεργαστής: Η δίοδος δεδοµένων (datapath) Εντολές διακλάδωσης (branch beq, bne) I Type Σχεδίαση datapath

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

Εικονική Μνήμη (virtual memory)

Οργάνωση Ιεραρχίας Μνήμης - Caches

ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΡΗΤΗΣ

2 η Ενδιάμεση Εξέταση Λύσεις/Απαντήσεις

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Αρχιτεκτονική Υπολογιστών

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Επεξεργαστής Υλοποίηση ενός κύκλου μηχανής

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Εικονική Μνήμη. (και ο ρόλος της στην ιεραρχία μνήμης)

Προγραμματισμός συστημάτων UNIX/POSIX. Θέμα επιλεγμένο από τους φοιτητές: Προγραμματιστικές τεχνικές που στοχεύουν σε επιδόσεις

ΟΡΓΑΝΩΣΗ ΚΑΙ ΣΧΕΔΙΑΣΗ Η/Υ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

- Εισαγωγή - Επίπεδα μνήμης - Ολοκληρωμένα κυκλώματα μνήμης - Συσκευασίες μνήμης προσωπικών υπολογιστών

O επεξεργαστής: Η δίοδος δεδομένων (datapath) και η μονάδα ελέγχου (control)

ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ

Γενική οργάνωση υπολογιστή «ΑΒΑΚΑ»

Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής. Οργάνωση Η/Υ. Γιώργος Δημητρίου. Μάθημα 3 ο ΜΕΔ απλού κύκλου

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

ΕΙΔΙΚΟΤΗΤΑ: ΤΕΧΝΙΚΟΣ ΕΦΑΡΜΟΓΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΑΘΗΜΑ: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

Κεφάλαιο 5. ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ -. Σερπάνος 2. Σημείωση

Αρχιτεκτονική Υπολογιστών

Οργάνωση Η/Υ. Γιώργος ηµητρίου. Μάθηµα 4 ο. Πανεπιστήµιο Θεσσαλίας - Τµήµα Μηχανικών Η/Υ, Τηλεπικοινωνιών και ικτύων

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Σχεδίαση μονάδας ελέγχου επεξεργαστή

Αρχιτεκτονική υπολογιστών

Αρχιτεκτονική Υπολογιστών II Ενδεικτικές απαντήσεις στα θέματα των εξετάσεων

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

Τέτοιες λειτουργίες γίνονται διαμέσου του

Αρχιτεκτονική Eckert-von Neumann. Πως λειτουργεί η ΚΜΕ; Κεντρική μονάδα επεξεργασίας [3] ΕΠΛ 031: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Είδη των Cache Misses: 3C s

Cach O p i timisati tions

ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2012

Είναι το «μυαλό» του υπολογιστή μας. Αυτός κάνει όλους τους υπολογισμούς και τις πράξεις. Έχει δική του ενσωματωμένη μνήμη, τη λεγόμενη κρυφή

ΠΛΕ- 027 Μικροεπεξεργαστές

Λειτουργικά Συστήματα (Λ/Σ)

ΣΥΣΚΕΥΕΣ ΑΠΟΘΗΚΕΥΣΗΣ (ΜΝΗΜΗ)

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2015

AΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ (5 ο εξάμηνο) ΕΠΑΝΑΛΗΠΤΙΚΗ ΕΞΕΤΑΣΗ (ΦΘΙΝΟΠΩΡΟ 2007) ΔΙΑΡΚΕΙΑ ΕΞΕΤΑΣΗΣ: 2 ΩΡΕΣ 30 ΛΕΠΤΑ

Αρχιτεκτονική Υπολογιστών

Ασκήσεις στα Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών

ΕΠΛ 001: ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΕΠΙΣΤΗΜΗ ΤΗΣ ΠΛΗΡΟΦΟΡΙΚΗΣ

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ

Αρχιτεκτονική-ΙI Ενότητα 4 :

Μάθημα 8: Διαχείριση Μνήμης

Τεχνολογία μνημών Ημιαγωγικές μνήμες Μνήμες που προσπελαύνονται με διευθύνσεις:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχανικών - Μηχανικών Υπολογιστών. Αρχιτεκτονική Υπολογιστών Νεκτάριος Κοζύρης.

Δομή Ηλεκτρονικού υπολογιστή

(advanced_ca, ακ. έτος Cache Optimisations

ΥΠΟΥΡΓΕΙΟ ΠΑΙΔΕΙΑΣ ΚΑΙ ΠΟΛΙΤΙΣΜΟΥ ΔΙΕΥΘΥΝΣΗ ΑΝΩΤΕΡΗΣ ΚΑΙ ΑΝΩΤΑΤΗΣ ΕΚΠΑΙΔΕΥΣΗΣ ΥΠΗΡΕΣΙΑ ΕΞΕΤΑΣΕΩΝ ΠΑΓΚΥΠΡΙΕΣ ΕΞΕΤΑΣΕΙΣ 2009 ΑΠΑΝΤΗΣΕΙΣ

Υπάρχουν δύο τύποι μνήμης, η μνήμη τυχαίας προσπέλασης (Random Access Memory RAM) και η μνήμη ανάγνωσης-μόνο (Read-Only Memory ROM).

Οργάνωση Υπολογιστών (IΙI)

Transcript:

ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη 14 Εισαγωγή στην Ιεραρχία Μνήμης Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων 1

H Μικρο-αρχιτεκτονική μας 4 1 0 PCSrc IF/ID Control ID/EX WB M EX Το data path είναι σε καλή κατάσταση. Οι μνήμες όμως; Είναι πολύ πιο πολύπλοκες από ότι φαίνεται στο σχήμα EX/MEM WB M MEM/WB WB P C Add Shift left 2 RegWrite Add PCSrc Read Instruction address [31-0] Instruction memory Sign extend Read register 1 Read register 2 Write register Write data Instr [20-16] Instr [15-11] Read data 1 Read data 2 Registers = ALU 0 Result 1 ALUOp ALUSrc RegDst 0 1 Address Write data MemWrite Data memory MemRead Read data MemToReg 1 0 2

Μνήμες σε πραγματικό σύστημα Core-i7 ιεραρχία μνήμης 3

Ιεραρχία Μνήμης Large and Fast Έχουμε δει ήδη κάποιες βασικές τεχνικές για να επιταχύνουμε την επεξεργασία δεδομένων στην CPU (πχ διοχέτευση) Δεν έχουμε πει όμως τίποτε για τις μνήμες. Χρειαζόμαστε μεγάλες μνήμες για να αποθηκεύσουμε εντολές και δεδομένα για μεγάλες εφαρμογές όπως βάσεις δεδομένων, video και μουσική, κτλ Χρειαζόμαστε γρήγορες μνήμες για να μπορούμε να παρέχουμε εντολές και δεδομένα με τον ίδιο ρυθμό που μας ζητάει η CPU. Αλλιώς η CPU θα περιμένει συνέχεια χωρίς να κάνει τίποτα. Το μοντέλο ότι έχουμε μια μεγάλη επίπεδη μνήμη η οποία μπορεί να παρέχει εντολές και δεδομένα σε έναν κύκλο και έχει ανεξάντλητο μέγεθος δεν ισχύει. Σε αυτήν την ενότητα θα δούμε πως μπορούμε να σχεδιάσουμε τις μνήμες εντολών και δεδομένων ώστε να προσομοιάζει όσο το δυνατόν το παραπάνω μοντέλο. Κρυφές μνήμες (cache memories). Εικονικές μνήμες (virtual memories) 4

Είδη μνήμης Η τεχνολογία μνημών είναι είτε γρήγορη και ακριβή (SRAMs), είτε αργή και φθηνή (Magnetic Disks) Η πιο γρήγορη μνήμη (SRAM) είναι πολύ ακριβή για να χρησιμοποιηθεί εξ ολοκλήρου σε μια CPU. Από την άλλη, η δυναμική μνήμη (DRAM) έχει χαμηλότερη ταχύτητα από την λογική που χρησιμοποιείται στην μικρο-αρχιτεκτονική. Εάν χρησιμοποιηθεί εξ ολοκλήρου σε μια CPU, το σύστημα θα πρέπει να καθυστερεί πολλούς κύκλους για να διαβάζουμε δεδομένα ή εντολές. Είδος Μνήμης Ταχύτητα Κόστος/MB Χωρητικότητα Static RAM H πιο γρήγορη Ακριβή Μικρή Dynamic RAM Αργή Φθηνή Μεγάλη Hard disks Η πιο αργή Η πιο Φθηνή Η μεγαλύτερη Είδος Μνήμης Ταχύτητα Κόστος/MB Χωρητικότητα Static RAM 1-10 cycles ~$5 έως ~4MB Dynamic RAM 100-200 cycles ~$0.10 128MB-4GB Hard disks 10,000,000 cycles ~$0.0005 20GB-400GB 5

Μνήμη Cache To ιδανικό λοιπόν είναι να βρούμε μια ισορροπία μεταξύ γρήγορης και φθηνής μνήμης. Πως μπορούμε να έχουμε τον καλύτερο συνδυασμό των δύο αυτών κόσμων; Η λανθάνουσα μνήμη (cache memory) είναι μια μικρή και γρήγορη μνήμη που ανταποκρίνεται σε αυτές τις προδιαγραφές. Επειδή είναι μικρή σε μέγεθος σε σχέση με την κύρια μνήμη δεν είναι πολύ ακριβή. Η cache βρίσκεται ανάμεσα στον επεξεργαστή και στην (μεγαλύτερη και πιο αργή) κύρια μνήμη. Κρατάει αντίγραφα των πιο συχνά εκτελούμενων εντολών και δεδομένων. Η προσπέλαση δεδομένων και εντολών μειώνεται με το να κάνουμε την συχνή περίπτωση πιο γρήγορη. Η κύρια μνήμη χρειάζεται να προσπελασθεί μόνο για δεδομένα που δεν είναι στην cache. Αυτά είναι συνήθως δεδομένα που δεν εκτελούνται τόσο συχνά Cache (Merriam-Webster online dictionary) a hiding place especially for concealing and preserving provisions or implements a secure place of storage CPU Μικρή στατική μνήμη(cache) Μεγάλη δυναμική μνήμη (RAM) 6

Η αρχή της τοπικότητας των προσπελάσεων μνήμης Η ιεραρχία της μνήμης σε έναν επεξεργαστή βασίζεται σε μία πολύ βασική εμπειρική αρχή: Τα προγράμματα σε κάθε χρονική στιγμή προσπελαύνουν ένα μικρό ποσοστό των δεδομένων και εντολών τους. Η αρχή της τοπικότητας διακρίνεται σε: την αρχή της χρονικής τοπικότητας (temporal locality) που λέει ότι ένα πρόγραμμα που προσπελαύνει μια διεύθυνση μνήμης έχει αυξημένες πιθανότητες να την προσπελάσει ξανά σύντομα. την αρχή της χωρικής τοπικότητας (spatial locality) που λέει ότι ένα πρόγραμμα που προσπελαύνει μια διεύθυνση μνήμης έχει αυξημένες πιθανότητες να προσπελάσει σύντομα μια γειτονική διεύθυνση μνήμης. 7

Χρονική τοπικότητα σε προγράμματα Τα loops είναι τυπικά παραδείγματα εμφάνισης χρονικής τοπικότητας σε προγράμματα. Το block του loop εκτελείται πολλές φορές, και συνεπώς κάθε εντολή στο loop προσπελαύνεται συνεχώς από την μνήμη Εάν τοποθετήσουμε τις εντολές του loop σε μια μνήμη cache, θα μπορούμε να τις προσπελαύνουμε συνεχώς από εκεί και όχι από την κύρια μνήμη. Loop: lw $t0, 0($s1) add $t0, $t0, $s2 sw $t0, 0($s1) addi $s1, $s1, -4 bne $s1, $0, Loop 8

Χρονική τοπικότητα σε δεδομένα Πολλά προγράμματα προσπελαύνουν τις ίδιες μεταβλητές, ειδικά μέσα σε loops. Για παράδειγμα, οι μεταβλητές sum και i προσπελαύνονται συνεχώς. sum = 0; for (i = 0; i < MAX; i++) sum = sum + f(i); Τέτοιες μεταβλητές πολλές φορές αποθηκεύονται σε καταχωρητές και όχι στην μνήμη, για να μπορούν να διαβαστούν χωρίς να χρειάζεται να φορτωθούν πρώτα από την μνήμη. Αυτό, όμως, δεν είναι πάντα δυνατόν να γίνει. Υπάρχει περιορισμένος αριθμός καταχωρητών σε μια CPU. 9

Χωρική τοπικότητα σε προγράμματα Όταν προσπελάσουμε μια εντολή, κατά πάσα πιθανότητα, αμέσως μετά θα προσπελάσουμε και τις εντολές που έπονται στον χώρο. Εάν εκτελέσουμε μια εντολή στην διεύθυνση i, είναι πολύ πιθανόν να εκτελέσουμε μια εντολή στις επόμενες διευθύνσεις. Τμήματα κώδικα όπως τα loops χαρακτηρίζονται πολύ συχνά από χρονική και χωρική τοπικότητα ταυτόχρονα. sub $sp, $sp, 16 sw $ra, 0($sp) sw $s0, 4($sp) sw $a0, 8($sp) sw $a1, 12($sp) 10

Χωρική τοπικότητα σε δεδομένα Πολλά προγράμματα προσπελαύνουν δεδομένα που είναι αποθηκευμένα σε γειτονικές θέσεις μνήμης. Οι πίνακες (όπως το array στον κώδικα) αποθηκεύονται σε συνεχείς θέσεις στην μνήμη. Τα πεδία ενός struct ή object επίσης αποθηκεύονται σε συνεχείς θέσεις στην μνήμη. Άρα και τα δεδομένα σε loops μπορούν να έχουν χρονική και χωρική τοπικότητα ταυτόχρονα. sum = 0; for (i = 0; i < MAX; i++) sum = sum + array[i]; employee.name = Homer Simpson ; employee.boss = Mr. Burns ; employee.age = 45; 11

Μνήμες Cache και χρονική τοπικότητα Στην πρώτη προσπέλαση μιας διεύθυνσης, α) τα δεδομένα διαβάζονται από την κύρια μνήμη, και β) ένα αντίγραφο των δεδομένων μεταφέρεται και στην cache. Με αυτόν τον τρόπο τα δεδομένα μπορούν να διαβάζονται στην συνέχεια από την γρήγορη cache (1 κύκλος μηχανής) και όχι από την αργή κύρια μνήμη (δεκάδες ή και εκατοντάδες κύκλοι μηχανής) H πρώτη προσπέλαση είναι αργή, αλλά αφού ζεσταθεί η cache με δεδομένα, οι επόμενες προσπελάσεις είναι πολύ πιο γρήγορες. Αυτός ο αλγόριθμος εκμεταλλεύεται την χρονική τοπικότητα. Δεδομένα και εντολές που προσπελαύνονται συχνά θα βρίσκονται στην cache. CPU Μικρή στατική μνήμη(cache) Μεγάλη δυναμική μνήμη (RAM) 12

Μνήμες Cache και χωρική τοπικότητα Oπως μόλις είδαμε, όταν η CPU διαβάζει από την θέση i της κύριας μνήμης, ένα αντίγραφο των δεδομένων στην θέση αυτή αποθηκεύεται στην cache. Αντί όμως να αντιγράφουμε μόνο την θέση i αντιγράφουμε και αρκετές άλλες θέσεις γειτονικές της i; για παράδειγμα τα δεδομένα στις θέσεις από i μέχρι και i + 3. Για παράδειγμα, αντί να διαβάσουμε μόνο ένα στοιχείο A[i] του πίνακα A, μπορούμε να διαβάσουμε τα στοιχεία Α[i].. A[i+3] ή και παραπάνω ΠΡΙΝ τα ζητήσει η CPU. Prefetching Τα δεδομένα σε αυτές τις θέσεις θα βρίσκονται στην cache εάν η CPU αργότερα χρειασθεί να τα προσπελάσει.. CPU Μικρή στατική μνήμη(cache) Μεγάλη δυναμική μνήμη (RAM) 13

H ιδέα της cache είναι πολύ γενικότερη H ιδέα του να φέρουμε τα δεδομένα που επεξεργαζόμαστε συχνά κοντά στον τόπο επεξεργασίας είναι μία από τις πιο βασικές αρχές της επιστήμης υπολογιστών. Πάρτε για παράδειγμα τα δίκτυα. Δίκτυα όπως το internet έχουν μεγάλο χρόνο απόκρισης (latency), και συνεπώς το να μεταφέρουμε δεδομένα συνεχώς δεν είναι επιθυμητό. Web browsers όπως Firefox και Chrome αποθηκεύουν σελίδες που προσπελαύνετε συχνά στον σκληρό σας δίσκο. 14

Mια απλή μνήμη cache Οι Caches διαιρούνται σε blocks που αποτελούνται από ένα ή περισσότερα bytes. Ο αριθμός των blocks σε μια cache είναι συνήθως δύναμη του 2. Ας πάρουμε την απλή περίπτωση που ένα block έχει μέγεθος ένα byte. Συνήθως το block έχει πολύ μεγαλύτερο μήκος, αλλά ας το δεχτούμε αυτό για χάριν απλότητας. Block index 8-bit data 000 001 010 011 100 101 110 111 15

Τέσσερεις σημαντικές ερωτήσεις 1. Που ακριβώς στην cache τοποθετείται ένα block δεδομένων όταν αντιγράφεται από την κύρια μνήμη; 2. Πως ανιχνεύουμε εάν κάποια λέξη είναι ήδη στην cache, ή θα πρέπει να πρέπει να την φέρουμε από την κύρια μνήμη; 3. Τι κάνουμε όταν γεμίσει η cache με δεδομένα; Για να φέρουμε καινούργια δεδομένα από την κύρια μνήμη στην cache, πρέπει να διώξουμε ένα block από δεδομένα που είναι ήδη στην cache. Πώς επιλέγουμε αυτό το block; 4. Τι κάνουμε όταν θέλουμε να γράψουμε στην μνήμη; 16

1. Που τοποθετούνται νέα δεδομένα Μία cache άμεσης απεικόνισης (direct-mapped) ακολουθεί την πιο απλή προσέγγιση: κάθε διεύθυνση μνήμης μπορεί να απεικονιστεί σε ένα και μόνο cache block. Πχ. Κύρια μνήμη 16 bytes, cache 4 bytes. Οι διευθύνσεις 0, 4, 8 και 12 μπορούν να τοποθετηθούν ΜΟΝΟ στο block 0 της cache. Οι διευθύνσεις 1, 5, 9 και 11 μπορούν να τοποθετηθούν ΜΟΝΟ στο block 1 της cache. Memory Address 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Index 0 1 2 3 17

1. Που τοποθετούνται νέα δεδομένα Σε μια direct-mapped μνήμη cache μεγέθους 2 k blocks, η διεύθυνση i θα τοποθετηθεί στο cache block i mod 2 k Για παράδειγμα, σε μια cache με 4 blocks η διεύθυνση 14 θα τοποθετηθεί στο block 2 14 mod 4 = 2 Memory Address 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Index 0 1 2 3 18

1. Που τοποθετούνται νέα δεδομένα Ένας απλός τρόπος να υπολογίσουμε το i mod 2 k είναι να κοιτάξουμε τα τελευταία k bits της διεύθυνσης i. Για την 4-bit cache, ελέγχουμε τα τελευταία 2 bits. H διεύθυνσης 14 (1110 δυαδικό) θα τοποθετηθεί στο cache block 2 (10 in binary). Memory Address 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Index 19 00 01 10 11

2. Πως βρίσκουμε δεδομένα στην cache Πως ανιχνεύουμε εάν κάποια λέξη είναι ήδη στην cache; To πρώτο βήμα για να βρούμε εάν η διεύθυνση i είναι στην cache είναι να υπολογίσουμε το block όπου θα πρέπει να βρίσκεται η διεύθυνση i i mod 2 k Όμως πολλές άλλες διευθύνσεις μπορούν να αποθηκευθούν στο ίδιο cache block. Για παράδειγμα, το cache block 2 μπορεί να περιέχει δεδομένα από τις διευθύνσεις 2, 6, 10 or 14. Άρα χρειάζεται επιπλέον πληροφορία Memory Address 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 20 Index 0 1 2 3

2. Πως βρίσκουμε δεδομένα στην cache; Tags! Χρησιμοποιούμε ως tags τα υπόλοιπα bits της διεύθυνσης για να ξεχωρίσουμε μεταξύ διαφορετικών θέσεων μνήμης που τυχαίνει να πέφτουν στο ίδιο cache block. Για να έχουμε match, πρέπει το tag στην cache να είναι το ίδιο με τα αντίστοιχα bits της διεύθυνσης i. 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Index 00 01 10 11 Tag 00 11 01 01 Tag + Index = Address 00 + 00 = 0000 11 + 01 = 1101 01 + 10 = 0110 01 + 11 = 0111 Data 21

2. Πως βρίσκουμε δεδομένα στην cache; Όταν ξεκινάει να τρέχει ένα πρόγραμμα, η cache είναι άδεια και περιέχει άκυρα δεδομένα (invalid data). Για να ξεχωρίσουμε λοιπόν μεταξύ έγκυρων και άκυρων δεδομένων, προσθέτουμε ένα valid bit σε κάθε cache block. Όταν το σύστημα αρχικοποιείται όλα τα valid bits γίνονται 0. Όταν δεδομένα φορτώνονται σε ένα cache block, το αντίστοιχο valid bit γίνεται 1. Για να έχουμε match, πρέπει το tag στην cache να είναι το ίδιο με τα αντίστοιχα bits της διεύθυνσης i KAI το valid bit του cache block να είναι 1. Valid Index Bit Tag Data 00 01 10 11 1 0 0 1 00 11 01 01 Valid Bit Main memory address in cache block 00 + 00 = 0000 Invalid Invalid 01 + 11 = 0111 22

Παράδειγμα λειτουργίας Cache (I) 8-blocks, 1 word/block, direct mapped Αρχική κατάσταση της cache: Block Index 000 N 001 N 010 N 011 N 100 N 101 N 110 N 111 N V Tag Data 23

Παράδειγμα λειτουργίας Cache (II) Word addr Binary addr (5 bits) Hit/miss Cache block 22 10 110 Miss 110 Block Index 000 N 001 N 010 N 011 N 100 N 101 N V Tag Data 110 Y 10 Mem[22] 111 N 24

Παράδειγμα λειτουργίας Cache (III) Word addr Binary addr Hit/miss Cache block 26 11 010 Miss 010 Index V Tag Data 000 N 001 N 010 Y 11 Mem[26] 011 N 100 N 101 N 110 Y 10 Mem[22] 111 N 25

Παράδειγμα λειτουργίας Cache (IV) Word addr Binary addr Hit/miss Cache block 22 10 110 Hit 110 26 11 010 Hit 010 Index V Tag Data 000 N 001 N 010 Y 11 Mem[26] 011 N 100 N 101 N 110 Y 10 Mem[22] 111 N 26

Παράδειγμα λειτουργίας Cache (V) Word addr Binary addr Hit/miss Cache block 16 10 000 Miss 000 3 00 011 Miss 011 16 10 000 Hit 000 Index V Tag Data 000 Y 10 Mem[16] 001 N 010 Y 11 Mem[26] 011 Y 00 Mem[3] 100 N 101 N 110 Y 10 Mem[22] 111 N 27

Παράδειγμα λειτουργίας Cache (VI) Word addr Binary addr Hit/miss Cache block 18 10 010 Miss 010 Index V Tag Data 000 Y 10 Mem[16] 001 N 010 Y 10 Mem[18] 011 Y 00 Mem[3] 100 N 101 N 110 Y 10 Mem[22] 111 N 28

Μικρο-αρχιτεκτονική της cache Όταν η CPU διαβάζει από την μνήμη, η διεύθυνση στέλνεται καταρχάς στον ελεγκτή της cache (cache controller). Tα λιγότερο σημαντικά k bits της διεύθυνσης χρησιμοποιούνται σαν block index στην cache. Εάν το block είναι έγκυρο (valid bit = 1) και το πεδίο tag είναι το ίδιο με τα περισσότερο σημαντικά (m - k) bits της m-bit της διεύθυνσης, τότε έχουμε cache hit και τα δεδομένα στέλνονται στην CPU Address (32 bits) 22 10 Index Index Valid Tag Data 0 1 2 3 1022 1023 To CPU Tag = Hit 29

Cache Misses Μιας και οι μνήμες cache είναι πολύ μικρότερες από την κύρια μνήμη, είναι αναπόφευκτο να υπάρχουν φορές που δεν βρίσκουμε τα δεδομένα στην cache (cache miss). H κύρια μνήμη είναι μερικά GB, ενώ μια τυπική cache 16-32 ΚΒ Το ποσοστό των cache hits ανάμεσα σε όλες τις προσπελάσεις τις cache, λέγεται hit rate. Το ποσοστό των cache misses λέγεται miss rate. Σε περίπτωση ενός cache miss, η CPU φέρνει τα δεδομένα από την κύρια μνήμη και ταυτόχρονα τα μεταφέρει και στην cache. Θεωρούμε για απλούστευση ότι μέχρι να έρθουν τα δεδομένα στην cache η CPU κάνει stall. Αυτό το stall μπορεί να διαρκέσει δεκάδες ή και εκατοντάδες κύκλους μηχανής. 30

Cache Misses Τα δεδομένα που έρχονται από την μνήμη μεταφέρονται και στην cache ως εξής: Tα λιγότερο σημαντικά k bits της διεύθυνσης χρησιμοποιούνται σαν block index στην cache. The περισσότερο σημαντικά (m - k) bits της διεύθυνσης αποθηκεύονται στο πεδίο tag. To δεδομένα από την κύρια μνήμη αποθηκεύονται στο πεδίο Data. Θέτουμε το valid bit του cache block ίσο με 1. Address (32 bits) 22 10 Data Index Tag Index Valid Tag Data 0 1 2 3 1 31

3. Tί γίνεται εάν γεμίσει η cache Τι κάνουμε όταν γεμίσει η cache με δεδομένα; Για να φέρουμε καινούργια δεδομένα από την κύρια μνήμη στην cache, πρέπει να διώξουμε ένα block από δεδομένα που είναι ήδη στην cache. Πώς επιλέγουμε αυτό το block; Η απάντηση είναι πολύ απλή. Ένα cache miss μεταφέρει καινούργια δεδομένα από την κύρια μνήμη στην cache. Τα δεδομένα αυτά διαγράφουν οτιδήποτε ήταν στην cache στο ίδιο block. 32

Τέσσερεις σημαντικές ερωτήσεις 1. Που ακριβώς στην cache τοποθετείται ένα block δεδομένων όταν αντιγράφεται από την κύρια μνήμη; 2. Πως ανιχνεύουμε εάν κάποια λέξη είναι ήδη στην cache, ή θα πρέπει να πρέπει να την φέρουμε από την κύρια μνήμη; 3. Τι κάνουμε όταν γεμίσει η cache με δεδομένα; Για να φέρουμε καινούργια δεδομένα από την κύρια μνήμη στην cache, πρέπει να διώξουμε ένα block από δεδομένα που είναι ήδη στην cache. Πώς επιλέγουμε αυτό το block; 4. Τι κάνουμε όταν θέλουμε να γράψουμε στην μνήμη; 33

4. Γράφοντας στην cache Η πρώτη περίπτωση είναι να γράψουμε σε μια διεύθυνση που είναι ήδη στην cache (write hit). Θεωρείστε μια direct-mapped cache. Index V Tag Data 110 1 11010 42803 Address 1101 0110 Data 42803 Έστω ότι θέλουμε να γράψουμε νέα δεδομένα στην cache στην διεύθυνση 1101 0110. Υπάρχουν δύο στρατηγικές οργάνωσης της cache σε περίπτωση write hit. Mem[1101 0110] = 21763 Index V Tag Data 110 1 11010 21763 Address 1101 0110 Data 42803 34

Write-through caches Μια write-through cache γράφει τα δεδομένα εκτός από την cache ΚΑΙ στην μνήμη, έτσι ώστε η κύρια μνήμη να είναι πάντα ενημερωμένη με τα τελευταία δεδομένα. Mem[1101 0110] = 21763 Index V Tag Data 110 1 11010 21763 Address 1101 0110 Data 21763 Αυτό είναι μια απλή λύση, αν και συνήθως δημιουργεί υψηλό overhead Δημιουργεί την ανάγκη να στέλνουμε συνέχεια δεδομένα στην κύρια μνήμη πολλές φορές χωρίς λόγο. 35

Write-back caches Σε μια write-back cache γράφουμε μόνο στην cache αμέσως αλλά όχι στην κύρια μνήμη. H κύρια μνήμη ανανεώνεται με τα πιο πρόσφατα δεδομένα μόνο όταν το cache block το οποίο γράψαμε αντικαθίσταται και πρέπει να γραφεί πίσω στην μνήμη. Αυτό σημαίνει ότι για κάποιο χρονικό διάστημα το δεδομένα της κύριας μνήμης δεν είναι τα σωστά (πρόβλημα ασυνέπειας μνήμης = inconsistency) Κάθε μελλοντικό διάβασμα (read) από το ίδιο block θα εξυπηρετηθεί από την cache. Χρειάζεται ένα extra bit (dirty bit) για κάθε block στην cache. Γίνεται 1 όταν η CPU γράψει οποιαδήποτε byte στο block αυτό. Μόνο όταν dirty bit = 1, χρειάζεται να ανανεωθεί η κύρια μνήμη σε περίπτωση αντικατάστασης ενός block. Mem[1101 0110] = 21763 Index V Dirty Tag Data Address Data 110 1 1 11010 21763 1101 0110 42803 36

Write-back caches Παράδειγμα λειτουργίας μιας write-back cache στις 2 παρακάτω πράξεις Mem[11010 110] = 21763 Read Mem[10001 110] // Write Hit // Read Miss Index V Dirty Tag Data Address 10001110 Data 1225 110 1 1 11010 21763 11010110 42803 Index V Dirty Tag Data Address 10001110 Data 1225 110 1 0 10001 1225 11010110 21763 37

Write misses Η δεύτερη περίπτωση είναι να γράψουμε σε μια διεύθυνση που δεν είναι στην cache (write miss). Θεωρείστε μια direct-mapped cache. Έστω ότι θέλουμε να γράψουμε: Mem[11010 110] = 21763 // Write Miss Πως αντιμετωπίζουμε αυτήν την περίπτωση; Index V Tag Data Address Data 110 1 00010 123456 11010110 6378 38

Write Allocate Μία στρατηγική είναι να προσκομίσουμε πρώτα το block από την κύρια μνήμη και στην συνέχεια να το γράψουμε στην cache (write allocate). Mem[11010 110] = 21763 Index V Tag Data 110 1 11010 21763 Address Τα δεδομένα θα παρέχονται από την cache εάν τα χρειαστούμε πάλι. Αυτή η στρατηγική χρησιμοποιείται κυρίως σε συνδυασμό με write-back caches. 11010110 Data 21763 39

No Write Allocate Λειτουργεί καλά αυτή η στρατηγική για τον παρακάτω κώδικα; for (int i = 0; i < LARGE; i++) a[i] = i; Όχι, δεν έχει νόημα να βάζουμε στην cache δεδομένα όπως ο πίνακας a[.] που δεν θα ξαναχρησιμοποιηθούν για μεγάλο χρονικό διάστημα. H δεύτερη στρατηγική είναι να γράψουμε απευθείας στην κύρια μνήμη, χωρίς να τοποθετήσουμε τα δεδομένα στην cache (no write allocate). Mem[11010 110] = 21763 Index V Tag Data 110 1 00010 123456 Address 1101 0110 Data 21763 40