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

Σχετικά έγγραφα
Ασκήσεις Caches

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

Ασκήσεις Caches

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

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

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

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

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;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Cach O p i timisati tions

Αζθήζεηο Caches

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

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

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

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

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

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

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

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

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

Οργάνωση και Σχεδίαση Υπολογιστών Η ιασύνδεση Υλικού και Λογισµικού, 4 η έκδοση. Κεφάλαιο 5. Μεγάλη και γρήγορη: Αξιοποίηση της ιεραρχίας της µνήµης

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

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

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

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

Θέματα Μεταγλωττιστών

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

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

Ζητήµατα Απόδοσης. Ιεραρχία Μνήµης. Αναγκαιότητα για Ιεραρχία Μνήµης. Processor-DRAM Gap (latency) Ε-85: Ειδικά Θέµατα Λογισµικού

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

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

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

Ενότητα 2: Η κρυφή µνήµη και η λειτουργία της

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

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

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

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

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

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

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

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

ΕΠΛ 605: ΑΡΧΙΤΕΚΤΟΝΙΚΗ ΥΠΟΛΟΓΙΣΤΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ 2018 ΕΡΓΑΣΙΑ 3 (13/10/2018) Ηµεροµηνία Παράδοσης δεύτερου µέρους: 18/10/2018

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

ΠΑΡΑΛΛΗΛΗ ΕΠΕΞΕΡΓΑΣΙΑ

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

Προχωρηµένα Θέµατα Αρχιτεκτονικής

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

Υ- 01 Αρχιτεκτονική Υπολογιστών Ιεραρχία μνήμης: προχωρημένα θέματα

Δείκτες & Πίνακες Δείκτες, Πίνακες

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

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

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

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

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

Σειρά Ασκήσεων 11: Κρυφές Μνήμες και η Επίδοσή τους

Ο Σ ο β ι ε τ ι κ ό ς Κ ρ υ π τ α λ γ ό ρ ι θ μ ο ς G O S T

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

Οργάνωση Υπολογιστών

Υ- 07 Παράλληλα Συστήματα Αρχιτεκτονική σύγχρονων πυρήνων επεξεργαστών

ΔΙΑΛΕΞΕΙΣ 6-7: ΚΡΥΦΗ ΜΝΗΜΗ (Cache)

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

Συστήματα μνήμης και υποστήριξη μεταφραστή για MPSoC

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

ΘΕΜΑ PROJECT COMPILER FLAGS ΤΡΑΧΑΝΗΣ ΔΗΜΗΤΡΗΣ 6108 ΤΡΑΧΑΝΗΣ ΓΕΩΡΓΙΟΣ 5789

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

ΔΙΑΛΕΞΕΙΣ 6-7: ΚΡΥΦΗ ΜΝΗΜΗ (Cache)

Υλοποίηση DMA για υπολογιστικό σύστημα με Scratch pad μνήμη και βελτιστοποιημένη υλοποίηση εφαρμογών

Άσκηση

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΘΕΜΑ 2. (2,5 µονάδες) Θεωρήστε τρεις κρυφές µνήµες των 512 πλαισίων µε 8 λέξεις ανά πλαίσιο και οργανώσεις αντίστοιχα:

Advanced Data Indexing

ΕΠΛ221: Οργάνωση Υπολογιστών και Συμβολικός Προγραμματισμός. Ενότητα 7(α) - Ιεραρχία Μνήμης

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

Σχεδιασµός της Ιεραρχίας Μνήµης. Pedro Trancoso

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

Spim Cache. Εισαγωγή στη χρήση του προσοµοιωτή. Αρχιτεκτονική Υπολογιστών ΙΙ. Σπύρος Ξεργιάς, ηµήτρης Γκιζόπουλος, Πανεπιστήµιο Αθηνών

ΠΡΟΗΓΜΕΝΟΙ ΜΙΚΡΟΕΠΕΞΕΡΓΑΣΤΕΣ PROJECT 2: MEMORY MANAGEMENT

Διπλωματική Εργασία του φοιτητή του Τμήματος Ηλεκτρολόγων Μηχανικών και Τεχνολογίας Υπολογιστών της Πολυτεχνικής Σχολής του Πανεπιστημίου Πατρών

ΥΠΟΛΟΓΙΣΤΕΣ ΙΙ. Τι περιλαμβάνει μια μεταβλητή; ΔΕΙΚΤΕΣ. Διεύθυνση μεταβλητής. Δείκτης

Transcript:

Ασκήσεις Αρχιτεκτονικής Υπολογιστών ακαδ. έτος 2008-2009

Άσκηση 1: caches

Θεωρούμε το ακόλουθο κομμάτι κώδικα #define N 4 #define M 8 double c[n], a[n][m], b[m]; int i,j; for(i = 0; i < N; i++) for(j = 0; j < M; j++) c[i] = c[i] + a[i][j] * b[j]; Kάθε στοιχείο του πίνακα έχει μέγεθος 8 bytes Yπάρχει 1 επίπεδο κρυφής μνήμης, πλήρως συσχετιστικής, με LRU πολιτική αντικατάστασης, αποτελούμενη από 4 blocks δεδομένων μεγέθους 16 bytes Όλες οι μεταβλητές αποθηκεύονται σε καταχωρητές εκτός από τα στοιχεία των πινάκων Οι πίνακες αποθηκεύονται κατά γραμμές Η σειρά με την οποία γίνονται οι αναφορές είναι c, a, b, c. Αρχικά η cache είναι άδεια Βρείτε το συνολικό ποσοστό αστοχίας (miss rate) για τον παραπάνω κώδικα

1 block = 16 bytes 1 στοιχείο = 8 bytes πίνακας αποθηκευμένος κατά γραμμές σε 1 block της cache θα απεικονίζονται 2 διαδοχικά στοιχεία του πίνακα, π.χ. a[i][j], a[i][j+1]

i=0,j=0 c[1] δηλαδή, αναφερόμαστε για 1 η φορά στα αντίστοιχα blocks

i=0,j=0 a[0][0] c[1] a[0][1] LRU a[0][0]

i=0,j=0 a[0][0] a[0][0] b[0] c[1] a[0][1] b[1] LRU b[0]

i=0,j=0 a[0][0] a[0][0] b[0] c[1] a[0][1] b[1] LRU b[0]

i=0,j=1 c[1] a[0][0] a[0][1] LRU b[0] b[1]

i=0,j=1 a[0][1] a[0][0] b[0] c[1] a[0][1] b[1] LRU

i=0,j=1 a[0][1] a[0][0] b[0] c[1] a[0][1] b[1] LRU b[1]

i=0,j=1 a[0][1] a[0][0] b[0] c[1] a[0][1] b[1] LRU b[1]

i=0,j=2 c[1] a[0][0] a[0][1] LRU b[0] b[1]

i=0,j=2 a[0][2] a[0][0] b[0] a[0][2] c[1] a[0][1] b[1] a[0][3] LRU

i=0,j=2 a[0][2] b[2] b[2] b[0] a[0][2] c[1] b[3] b[1] a[0][3] LRU

i=0,j=2 a[0][2] b[2] b[2] b[0] a[0][2] c[1] b[3] b[1] a[0][3] LRU

i=0,j=3 b[2] b[0] c[1] b[3] b[1] LRU a[0][2] a[0][3]

i=0,j=3 a[0][3] b[2] b[0] a[0][2] c[1] b[3] b[1] a[0][3] LRU

i=0,j=3 a[0][3] b[3] b[2] b[0] a[0][2] c[1] b[3] b[1] a[0][3] LRU

i=0,j=3 a[0][3] b[3] b[2] b[0] a[0][2] c[1] b[3] b[1] a[0][3] LRU

i=0,j=4 b[2] b[0] c[1] b[3] b[1] LRU a[0][2] a[0][3]

i=0,j=4 a[0][4] b[2] a[0][4] a[0][2] c[1] b[3] a[0][5] a[0][3] LRU

i=0,j=4 a[0][4] b[4] b[2] a[0][4] b[4] c[1] b[3] a[0][5] b[5] LRU

i=0,j=4 a[0][4] b[4] b[2] a[0][4] b[4] c[1] b[3] a[0][5] b[5] LRU

i=0,j=5 a[0][5] b[5] b[2] a[0][4] b[4] c[1] b[3] a[0][5] b[5] LRU

αποτέλεσμα c0 a00 b0 c0 m m m h c0 a01 b1 c0 h h h h c0 a02 b2 c0 h m m h c0 a03 b3 c0 h h h h c0 a04 b4 c0 h m m h c0 a05 b5 c0 h h h h c0 a06 b6 c0 h m m h c0 a07 b7 c0 h h h h c1 a10 b0 c1 h m m h c1 a11 b1 c1 h h h h c1 a12 b2 c1 h m m h c1 a13 b3 c1 h h h h c1 a14 b4 c1 h m m h c1 a15 b5 c1 h h h h c1 a16 b6 c1 h m m h c1 a17 b7 c1 h h h h 9 misses 23 s 8 misses 24 s

αποτέλεσμα c2 a20 b0 c2 m m m h c2 a21 b1 c2 h h h h c2 a22 b2 c2 h m m h c2 a23 b3 c2 h h h h c2 a24 b4 c2 h m m h c2 a25 b5 c2 h h h h c2 a26 b6 c2 h m m h c2 a27 b7 c2 h h h h c3 a30 b0 c3 h m m h c3 a31 b1 c3 h h h h c3 a32 b2 c3 h m m h c3 a33 b3 c3 h h h h c3 a34 b4 c3 h m m h c3 a35 b5 c3 h h h h c3 a36 b6 c3 h m m h c3 a37 b7 c3 h h h h 9 misses 23 s 8 misses 24 s

Συνολικά Accesses : 128 Misses : 34 Miss rate = 0.266 Εφαρμόστε την τεχνική του blocking για να βελτιώσετε την απόδοση του συστήματος μειώνοντας το ποσοστό αστοχίας.

1 2 3 c0 a00 b0 c0 c0 a01 b1 c0 c0 a02 b2 c0 4 5 c0 a03 b3 c0 c0 a04 b4 c0 6 c0 a05 b5 c0 c0 a06 b6 c0 c0 a07 b7 c0 i c i a j b j Τα b[0], b[1] χρησιμοποιούνται με τα a[0][0],a[0][1], a[1][0],a[1][1] για τον υπολογισμό των,c[1] Αφού στην cache έχουμε ήδη τα,c[1] και b[0],b[1] γιατί να μην τα ξαναχρησιμοποιήσουμε;

#define N 4 #define M 8 #define bs 2 double c[n], a[n][m], b[m]; int i,j; for(i = 0; i < N; i+=bs) for(j = 0; j < M; j+=bs) for(ii = i; ii < i + bs; ii++) for(jj = j; jj < j + bs; jj++) c[ii] = c[ii] + a[ii][jj] * b[jj]; i c i a ii jj j b j

#define N 4 #define M 8 #define bs 2 double c[n], a[n][m], b[m]; int i,j; for(i = 0; i < N; i+=bs) for(j = 0; j < M; j+=bs) for(ii = i; ii < i + bs; ii++) for(jj = j; jj < j + bs; jj++) c[ii] = c[ii] + a[ii][jj] * b[jj]; c0 a00 b0 c0 m m m h c0 a01 b1 c0 h h h h c1 a10 b0 c1 h m h h c1 a11 b1 c1 h h h h c0 a02 b2 c0 h m m h c0 a03 b3 c0 h h h h c1 a12 b2 c1 h m h h c1 a13 b3 c1 h h h h 13 misses 51 s c0 a04 b4 c0 h m m h c0 a05 b5 c0 h h h h c1 a14 b4 c1 h m h h c1 a15 b5 c1 h h h h c0 a06 b6 c0 h m m h c0 a07 b7 c0 h h h h c1 a16 b6 c1 h m h h c1 a17 b7 c1 h h h h

c0 a00 b0 c0 m m m h c0 a01 b1 c0 h h h h c1 a10 b0 c1 h m h h c1 a11 b1 c1 h h h h c0 a02 b2 c0 h m m h c0 a03 b3 c0 h h h h c1 a12 b2 c1 h m h h c1 a13 b3 c1 h h h h c2 a20 b0 c2 m m m h c2 a21 b1 c2 h h h h c3 a30 b0 c3 h m h h c3 a31 b1 c3 h h h h c2 a22 b2 c2 h m m h c2 a23 b3 c2 h h h h c3 a32 b2 c3 h m h h c3 a33 b3 c3 h h h h c0 a04 b4 c0 h m m h c0 a05 b5 c0 h h h h c1 a14 b4 c1 h m h h c1 a15 b5 c1 h h h h c0 a06 b6 c0 h m m h c0 a07 b7 c0 h h h h c1 a16 b6 c1 h m h h c1 a17 b7 c1 h h h h c2 a24 b4 c2 h m m h c2 a25 b5 c2 h h h h3 c3 a34 b4 c3 h m h h c3 a35 b5 c3 h h h h c2 a26 b6 c2 h m m h c2 a27 b7 c2 h h h h c3 a36 b6 c3 h m h h c3 a37 b7 c3 h h h h

Συνολικά Accesses : 128 Misses : 26 Miss rate = 0.203

Άσκηση 2: caches

Θεωρούμε το ακόλουθο κομμάτι κώδικα int i,j; double result, a[110][4]; for(i=0; i<4; i++) for(j=0; j<100; j++) result += a[j][i]*a[j+1][i] + 0.5; Υποθέσεις κάθε στοιχείο του πίνακα έχει μέγεθος 8 bytes υπάρχει 1 επίπεδο κρυφής μνήμης, πλήρως συσχετιστικής, με LRU πολιτική αντικατάστασης, αποτελούμενη από 100 blocks δεδομένων το μέγεθος του block είναι 32 bytes ο πίνακας είναι αποθηκευμένος στην κύρια μνήμη κατά γραμμές, και είναι «ευθυγραμμισμένος» ώστε το 1 ο στοιχείο του να απεικονίζεται στην αρχή μιας γραμμής της cache αρχικά η cache είναι άδεια

Βρείτε ποιες από τις αναφορές στα στοιχεία του πίνακα a για όλη την εκτέλεση του παραπάνω κώδικα καταλήγουν σε misses στην cache. Υποδείξτε ποια είναι compulsory, ποια είναι capacity, και ποια conflict. Δώστε τον συνολικό αριθμό των misses.

1 block = 32 bytes 1 στοιχείο = 8 bytes πίνακας αποθηκευμένος κατά γραμμές σε 1 block της cache θα απεικονίζονται 4 διαδοχικά στοιχεία του πίνακα, π.χ. a[i][j], a[i][j+1], a[i][j+2], a[i][j+3] επιπλέον πίνακας ευθυγραμμισμένος σε 1 block της cache θα απεικονίζεται 1 ολόκληρη γραμμή του πίνακα, δηλαδή a[i][j], a[i][j+1], a[i][j+2], a[i][j+3] όπου j%4=0

i=0,j=0 a[0][0] a[0][0] a[0][1] a[0][2] a[0][3] δηλαδή, αναφερόμαστε για 1 η φορά στα αντίστοιχα blocks

i=0,j=0 a[0][0] a[1][0] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3]

i=0,j=0 a[0][0] a[1][0] i=0,j=1 a[1][0] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3]

i=0,j=0 a[0][0] a[1][0] i=0,j=1 a[1][0] a[2][0] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]

i=0,j=0 a[0][0] a[1][0] i=0,j=1 a[1][0] a[2][0] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] Έτσι για i=0, j=2 99 θα έχουμε 1 + 1 comp. miss για κάθε επανάληψη του j

i=0,j=0 a[0][0] a[1][0] i=0,j=1 a[1][0] a[2][0] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] Έτσι για i=0, j=2 99 θα έχουμε 1 + 1 comp. miss για κάθε επανάληψη του j για i=0 θα έχουμε 2+99=101 misses, όλα compulsory

i=0,j=99 a[99][0] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3]

i=0,j=99 a[99][0] a[100][0] αντικατέστησε το LRU block που υπήρχε στην cache a[100][0] a[100][1] a[100][2] a[100][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3]

i=1,j=0 a[0][1] capacity miss διότι αντικαταστάθηκε λόγω έλλειψης χώρου το block που είχε έρθει στην cache κατά το παρελθόν και το περιείχε a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[2][0] a[2][1] a[2][2] a[2][3] a[3][0] a[3][1] a[3][2] a[3][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3]

i=1,j=0 a[0][1] a[1][1] capacity miss capacity miss a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[3][0] a[3][1] a[3][2] a[3][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3]

i=1,j=0 a[0][1] a[1][1] i=1,j=1 a[1][1] capacity miss capacity miss a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[3][0] a[3][1] a[3][2] a[3][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3]

i=1,j=0 a[0][1] a[1][1] i=1,j=1 a[1][1] a[2][1] capacity miss capacity miss capacity miss a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3]

i=1,j=0 a[0][1] a[1][1] i=1,j=1 a[1][1] a[2][1] capacity miss capacity miss capacity miss a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3] Στις επόμενες επαναλήψεις θα έχουμε κυκλικές αντικαταστάσεις blocks, οπότε τα misses και τα s θα ακολουθούν το ίδιο μοτίβο όπως και για i=0.

i=1,j=0 a[0][1] a[1][1] i=1,j=1 a[1][1] a[2][1] capacity miss capacity miss capacity miss a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3] Στις επόμενες επαναλήψεις θα έχουμε κυκλικές αντικαταστάσεις blocks, οπότε τα misses και τα s θα ακολουθούν το ίδιο μοτίβο όπως και για i=0. συνολικά θα έχουμε 4*101=404 misses

i=1,j=0 a[0][1] a[1][1] i=1,j=1 a[1][1] a[2][1] capacity miss capacity miss capacity miss a[100][0] a[100][1] a[100][2] a[100][3] a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3] a[4][0] a[4][1] a[4][2] a[4][3] a[98][0] a[98][1] a[98][2] a[98][3] a[99][0] a[99][1] a[99][2] a[99][3] Conflict misses δεν έχουμε διότι η cache είναι fully associative τα blocks δεδομένων μπορούν να απεικονιστούν οπουδήποτε στην cache

Θεωρείστε πάλι τον αρχικό κώδικα. Ποια γνωστή τεχνική βελτιστοποίησης θα εφαρμόζατε στον κώδικα ώστε να μειωθούν τα misses; for(i=0; i<4; i++) for(j=0; j<100; j++) result += a[j][i]*a[j+1][i] + 0.5; στο σώμα του loop δεν υπάρχουν εξαρτήσεις, επομένως μπορούμε να εφαρμόσουμε αναδιάταξη βρόχων (loop interchange) for(j=0; j<100; j++) for(i=0; i<4; i++) result += a[j][i]*a[j+1][i] + 0.5; τώρα ο πίνακας προσπελαύνεται όπως είναι αποθηκευμένος καλύτερη τοπικότητα αναφορών, αφού γειτονικά στοιχεία προσπελαύνονται σε διαδοχικές επαναλήψεις του εσωτερικού loop misses συμβαίνουν όταν αναφερόμαστε στο πρώτο στοιχείο κάθε γραμμής (i=0) συνολικά έχουμε 100 misses