Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p,...

113
28/01/2019 cslab@ntua 2018-2019 Άσκηση 1 η Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){ if (*p < 100) *p = *p % N; else *p = *p / N; p++; } Ζητούμενο: Δίνεται το παρακάτω πρόγραμμα σε C καθώς και μια μετάφραση του σε assembly MIPS. Δίνεται ότι ο καταχωρητής $s0 δείχνει στο πρώτο στοιχείο του πίνακα array. Συμπληρώστε τα κενά. Σας υπενθυμίζουμε ότι ο καταχωρητής $0 (ή $zero) είναι πάντα μηδέν. addi ____, $s0, ____ LOOP: lw ____, 0($s1) ___ $t0 , ____ , ____ div ____, $s2 ___ ____, $t0, 100 ___ $t1, ____ , _____ ___ $t0 jmp ____ ELSE: ___ ____ NEXT: sw ____, ____ addi ____, ____, ____ jmp ___ END: $s1 32 $t0 $t1 $zero $t0 beq mfhi beq $zero END $t0 mflo ELSE $t0 0($s1) $s1 $s1 4 NEXT slti LOOP $s0 $s1 $s2

Transcript of Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p,...

Page 1: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 1η – Μέρος Α

int array[100];int *p, N;

p = &array[8];

while (*p != 0){if (*p < 100)

*p = *p % N;else

*p = *p / N;p++;

}

Ζητούμενο: Δίνεται το παρακάτω πρόγραμμα σε C καθώς και μια μετάφραση του σε assembly MIPS. Δίνεται ότι ο καταχωρητής $s0 δείχνει στο πρώτο στοιχείο του πίνακα array. Συμπληρώστε τα κενά. Σας υπενθυμίζουμε ότι ο καταχωρητής $0 (ή $zero) είναι πάντα μηδέν.

addi ____, $s0, ____

LOOP: lw ____, 0($s1)

___ $t0 , ____ , ____

div ____, $s2

___ ____, $t0, 100

___ $t1, ____ , _____

___ $t0

jmp ____

ELSE: ___ ____

NEXT: sw ____, ____

addi ____, ____, ____

jmp ___

END:

$s1 32

$t0

$t1

$zero

$t0

beq

mfhi

beq

$zero

END

$t0mflo

ELSE

$t0 0($s1)

$s1 $s1 4

NEXT

slti

LOOP

$s0

$s1 $s2

Page 2: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η Άσκηση

LOOP: LW $t1, 0($t0)ADD $t2, $t1, $t4 SW $t2, 0($t3)ADD $t3, $t2, $t6ADDI $t0, $t0, 4LW $t5, 0($t0)ADD $t7, $t7, $t2lW $t6, 0($t5)ADD $t4, $t7, $t3ADDI $t9, $t9, -4BNEZ $t9, LOOP

Δεδομένα

Έχουμε ένα loop...

Page 3: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η ΆσκησηΔεδομένα

Έχουμε ένα loop...

$t9 = 64

• MEM → M1, M2• Δεν υπάρχει cache miss• Cache hit σε 1cc• branches γίνονται resolve στο M2 stage

και αυτή την αρχική κατάστασηLOOP: LW $t1, 0($t0)

ADD $t2, $t1, $t4 SW $t2, 0($t3)ADD $t3, $t2, $t6ADDI $t0, $t0, 4LW $t5, 0($t0)ADD $t7, $t7, $t2lW $t6, 0($t5)ADD $t4, $t7, $t3ADDI $t9, $t9, -4BNEZ $t9, LOOP

Page 4: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η Άσκηση

Ο βρόχος θα εκτελεστεί 64 / 4 = 16 φορές.

$t9 = 64

$t9 = 64, 60, …, 0

LOOP: LW $t1, 0($t0)ADD $t2, $t1, $t4 SW $t2, 0($t3)ADD $t3, $t2, $t6ADDI $t0, $t0, 4LW $t5, 0($t0)ADD $t7, $t7, $t2lW $t6, 0($t5)ADD $t4, $t7, $t3ADDI $t9, $t9, -4BNEZ $t9, LOOP

Page 5: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η Άσκηση – 1ο ζητούμενο1ο Ζητούμενο : Για το 1ο LOOP (μέχρι και το lw του 2ου LOOP)

Να δείξετε τα διάφορα στάδια του pipeline (διάγραμμα χρονισμού) που περνάνε οι εντολές. Υποθέστε ότι η αρχιτεκτονική δε διαθέτει σχήμα προώθησης.

1 2 3 4 5 6 7

IF ID EX MEM WB

... ... ... ... ...

Κύκλος

Εντολή 1

Εντολή 2

Εντολή 3

...

IF ID EX MEM WB

Page 6: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F

ADD

$t2,$t1,$t4

SW

$t2,0($t3)

ADD

$t3,$t2,$t6

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 7: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D

ADD

$t2,$t1,$t4F

SW

$t2,0($t3)

ADD

$t3,$t2,$t6

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 8: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X

ADD

$t2,$t1,$t4F D

SW

$t2,0($t3)F

ADD

$t3,$t2,$t6

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 9: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X

ADD

$t2,$t1,$t4F D

SW

$t2,0($t3)F

ADD

$t3,$t2,$t6

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 10: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - -

SW

$t2,0($t3)F - - -

ADD

$t3,$t2,$t6

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 11: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X

SW

$t2,0($t3)F - - - D

ADD

$t3,$t2,$t6F

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 12: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X

SW

$t2,0($t3)F - - - D

ADD

$t3,$t2,$t6F

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 13: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - -

ADD

$t3,$t2,$t6F - - -

ADDI

$t0,$t0,4

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 14: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X

ADD

$t3,$t2,$t6F - - - D

ADDI

$t0,$t0,4F

LW

$t5,0($t0)

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 15: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1

ADD

$t3,$t2,$t6F - - - D X

ADDI

$t0,$t0,4F D

LW

$t5,0($t0)F

ADD

$t7,$t7,$t2

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 16: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2

ADD

$t3,$t2,$t6F - - - D X M1

ADDI

$t0,$t0,4F D X

LW

$t5,0($t0)F D

ADD

$t7,$t7,$t2F

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 17: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2

ADD

$t3,$t2,$t6F - - - D X M1

ADDI

$t0,$t0,4F D X

LW

$t5,0($t0)F D

ADD

$t7,$t7,$t2F

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 18: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - -

ADD

$t7,$t7,$t2F - - -

LW

$t6,0($t5)

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 19: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X

ADD

$t7,$t7,$t2F - - - D

LW

$t6,0($t5)F

ADD

$t4,$t7,$t3

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 20: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1

ADD

$t7,$t7,$t2F - - - D X

LW

$t6,0($t5)F D

ADD

$t4,$t7,$t3F

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 21: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1

ADD

$t7,$t7,$t2F - - - D X

LW

$t6,0($t5)F D

ADD

$t4,$t7,$t3F

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 22: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2

LW

$t6,0($t5)F D - -

ADD

$t4,$t7,$t3F - -

ADDI

$t9,$t9,-4

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 23: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X

ADD

$t4,$t7,$t3F - - D

ADDI

$t9,$t9,-4F

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 24: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X

ADD

$t4,$t7,$t3F - - D

ADDI

$t9,$t9,-4F

BNEZ

$t9,LOOP

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 25: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X M1

ADD

$t4,$t7,$t3F - - D X

ADDI

$t9,$t9,-4F D

BNEZ

$t9,LOOPF

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 26: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X M1 M2

ADD

$t4,$t7,$t3F - - D X M1

ADDI

$t9,$t9,-4F D X

BNEZ

$t9,LOOPF D

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 27: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X M1 M2

ADD

$t4,$t7,$t3F - - D X M1

ADDI

$t9,$t9,-4F D X

BNEZ

$t9,LOOPF D

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 28: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X M1 M2 W

ADD

$t4,$t7,$t3F - - D X M1 M2 W

ADDI

$t9,$t9,-4F D X M1 M2 W

BNEZ

$t9,LOOPF D - - -

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 29: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X M1 M2 W

ADD

$t4,$t7,$t3F - - D X M1 M2 W

ADDI

$t9,$t9,-4F D X M1 M2 W

BNEZ

$t9,LOOPF D - - - X M1 M2

LW

$t1,0($t0)

2η Άσκηση – 1ο ζητούμενο

Page 30: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

LW

$t1,0($t0)F D X M1 M2 W

ADD

$t2,$t1,$t4F D - - - X M1 M2 W

SW

$t2,0($t3)F - - - D - - - X M1 M2 W

ADD

$t3,$t2,$t6F - - - D X M1 M2 W

ADDI

$t0,$t0,4F D X M1 M2 W

LW

$t5,0($t0)F D - - - X M1 M2 W

ADD

$t7,$t7,$t2F - - - D X M1 M2 W

LW

$t6,0($t5)F D - - X M1 M2 W

ADD

$t4,$t7,$t3F - - D X M1 M2 W

ADDI

$t9,$t9,-4F D X M1 M2 W

BNEZ

$t9,LOOPF D - - - X M1 M2 W

LW

$t1,0($t0)F D

2η Άσκηση – 1ο ζητούμενο

Σύνολο κύκλων: 29*15 + 30 = 465

Page 31: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η Άσκηση – 2ο ζητούμενο2ο Ζητούμενο : Για το 1ο LOOP (μέχρι και το lw του 2ου LOOP)

Να δείξετε τα διάφορα στάδια του pipeline (διάγραμμα χρονισμού) που περνάνε οι εντολές. Υποθέστε τώρα ότι η αρχιτεκτονική διαθέτει σχήμα προώθησης.

1 2 3 4 5 6 7

IF ID EX MEM WB

... ... ... ... ...

Κύκλος

Εντολή 1

Εντολή 2

Εντολή 3

...

IF ID EX MEM WB

Page 32: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F

ADD $t2,$t1,$t4

SW $t2,0($t3)

ADD $t3,$t2,$t6

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 33: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D

ADD $t2,$t1,$t4 F

SW $t2,0($t3)

ADD $t3,$t2,$t6

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 34: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X

ADD $t2,$t1,$t4 F D

SW $t2,0($t3) F

ADD $t3,$t2,$t6

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 35: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X

ADD $t2,$t1,$t4 F D

SW $t2,0($t3) F

ADD $t3,$t2,$t6

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 36: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2

ADD $t2,$t1,$t4 F D - -

SW $t2,0($t3) F - -

ADD $t3,$t2,$t6

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 37: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X

SW $t2,0($t3) F - - D

ADD $t3,$t2,$t6 F

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 38: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X

SW $t2,0($t3) F - - D

ADD $t3,$t2,$t6 F

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 39: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1

SW $t2,0($t3) F - - D X

ADD $t3,$t2,$t6 F D

ADDI $t0,$t0,4 F

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 40: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1

SW $t2,0($t3) F - - D X

ADD $t3,$t2,$t6 F D

ADDI $t0,$t0,4 F

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 41: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2

SW $t2,0($t3) F - - D X M1

ADD $t3,$t2,$t6 F D X

ADDI $t0,$t0,4 F D

LW $t5,0($t0) F

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 42: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2

ADD $t3,$t2,$t6 F D X M1

ADDI $t0,$t0,4 F D X

LW $t5,0($t0) F D

ADD $t7,$t7,$t2 F

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 43: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2

ADD $t3,$t2,$t6 F D X M1

ADDI $t0,$t0,4 F D X

LW $t5,0($t0) F D

ADD $t7,$t7,$t2 F

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 44: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2

ADDI $t0,$t0,4 F D X M1

LW $t5,0($t0) F D X

ADD $t7,$t7,$t2 F D

LW $t6,0($t5) F

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 45: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2

LW $t5,0($t0) F D X M1

ADD $t7,$t7,$t2 F D X

LW $t6,0($t5) F D

ADD $t4,$t7,$t3 F

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 46: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2

LW $t5,0($t0) F D X M1

ADD $t7,$t7,$t2 F D X

LW $t6,0($t5) F D

ADD $t4,$t7,$t3 F

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 47: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2

ADD $t7,$t7,$t2 F D X M1

LW $t6,0($t5) F D -

ADD $t4,$t7,$t3 F -

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 48: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2

LW $t6,0($t5) F D - X

ADD $t4,$t7,$t3 F - D

ADDI $t9,$t9,-4 F

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 49: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2

LW $t6,0($t5) F D - X

ADD $t4,$t7,$t3 F - D

ADDI $t9,$t9,-4 F

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 50: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D - X M1

ADD $t4,$t7,$t3 F - D X

ADDI $t9,$t9,-4 F D

BNEZ $t9,LOOP F

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 51: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D - X M1 M2

ADD $t4,$t7,$t3 F - D X M1

ADDI $t9,$t9,-4 F D X

BNEZ $t9,LOOP F D

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 52: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D - X M1 M2

ADD $t4,$t7,$t3 F - D X M1

ADDI $t9,$t9,-4 F D X

BNEZ $t9,LOOP F D

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 53: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D - X M1 M2 W

ADD $t4,$t7,$t3 F - D X M1 M2

ADDI $t9,$t9,-4 F D X M1

BNEZ $t9,LOOP F D X

LW $t1,0($t0)

2η Άσκηση – 2ο ζητούμενο

Page 54: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D - X M1 M2 W

ADD $t4,$t7,$t3 F - D X M1 M2 W

ADDI $t9,$t9,-4 F D X M1 M2 W

BNEZ $t9,LOOP F D X M1 M2 W

LW $t1,0($t0) F D

2η Άσκηση – 2ο ζητούμενο

Σύνολο κύκλων: 18*15 + 19 = 289

Page 55: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η Άσκηση – 3ο ζητούμενο3ο Ζητούμενο : Ποια επιλογή πετυχαίνει καλύτερη επίδοση;(i) Αναδιάταξη του κώδικα από τον compiler(ii) Επανένωση των σταδίων Μ1 και Μ2

1 2 3 4 5 6 7

IF ID EX MEM WB

... ... ... ... ...

Κύκλος

Εντολή 1

Εντολή 2

Εντολή 3

...

IF ID EX MEM WB

Page 56: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D - - X M1 M2 W

SW $t2,0($t3) F - - D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D - X M1 M2 W

ADD $t4,$t7,$t3 F - D X M1 M2 W

ADDI $t9,$t9,-4 F D X M1 M2 W

BNEZ $t9,LOOP F D X M1 M2 W

LW $t1,0($t0) F D

2η Άσκηση – 3ο ζητούμενο (i)

Θέλουμε να τα αποφύγουμε!

Page 57: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0)

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t2,$t1,$t4

SW $t2,0($t3)

ADD $t3,$t2,$t6

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 3ο ζητούμενο (i)

Page 58: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

LW $t1,0($t0) F D X M1 M2 W

ADDI $t0,$t0,4 F D X M1 M2 W

LW $t5,0($t0) F D X M1 M2 W

ADD $t2,$t1,$t4 F D X M1 M2 W

SW $t2,0($t3) F D X M1 M2 W

ADD $t3,$t2,$t6 F D X M1 M2 W

ADD $t7,$t7,$t2 F D X M1 M2 W

LW $t6,0($t5) F D X M1 M2 W

ADD $t4,$t7,$t3 F D X M1 M2 W

ADDI $t9,$t9,-4 F D X M1 M2 W

BNEZ $t9,LOOP F D X M1 M2 W

LW $t1,0($t0) F D

2η Άσκηση – 3ο ζητούμενο (i)

Σύνολο κύκλων: 15*15 + 16 = 241

Page 59: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

LW $t1,0($t0)

ADD $t2,$t1,$t4

SW $t2,0($t3)

ADD $t3,$t2,$t6

ADDI $t0,$t0,4

LW $t5,0($t0)

ADD $t7,$t7,$t2

LW $t6,0($t5)

ADD $t4,$t7,$t3

ADDI $t9,$t9,-4

BNEZ $t9,LOOP

LW $t1,0($t0)

2η Άσκηση – 3ο ζητούμενο (ii)

Page 60: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17

LW $t1,0($t0) F D X M W

ADD $t2,$t1,$t4 F D - X M W

SW $t2,0($t3) F - D X M W

ADD $t3,$t2,$t6 F D X M W

ADDI $t0,$t0,4 F D X M W

LW $t5,0($t0) F D X M W

ADD $t7,$t7,$t2 F D X M W

LW $t6,0($t5) F D X M W

ADD $t4,$t7,$t3 F D X M W

ADDI $t9,$t9,-4 F D X M W

BNEZ $t9,LOOP F D X M W

LW $t1,0($t0) F D

2η Άσκηση – 3ο ζητούμενο (ii)

Σύνολο κύκλων: 15*15 + 16 = 241

Page 61: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

2η Άσκηση – 3ο ζητούμενο3ο Ζητούμενο : Ποια επιλογή πετυχαίνει καλύτερη επίδοση;(i) Αναδιάταξη του κώδικα από τον compiler

(ii) Επανένωση των σταδίων Μ1 και Μ2

Σύνολο κύκλων: 15*15 + 16 = 241

Σύνολο κύκλων: 15*15 + 16 = 241

Page 62: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019 62

Άσκηση 3η – Μέρος A Ζητούμενο: Δίνεται επεξεργαστής με ένα επίπεδο κρυφής μνήμης με μέσο χρόνο πρόσβασης στη μνήμη 2.4 κύκλους ρολογιού. Πιο συγκεκριμένα, τα hits εξυπηρετούνται σε 1 κύκλο ενώ τα misses εξυπηρετούνται από την κύρια μνήμη σε 80 κύκλους. Σας ζητούν να προσθέσετε ένα δεύτερο επίπεδο κρυφής μνήμης ώστε η επιτάχυνση (speedup) του μέσου χρόνου πρόσβασης να είναι ίση με 1.65. Ποιό το hit rate αυτής της L2, αν η πρόσβαση σε αυτή στοιχίζει 6 κύκλους;

Page 63: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019 63

Άσκηση 3η – Μέρος A Ζητούμενο: Δίνεται επεξεργαστής με ένα επίπεδο κρυφής μνήμης με μέσο χρόνο πρόσβασης στη μνήμη 2.4 κύκλους ρολογιού. Πιο συγκεκριμένα, τα hits εξυπηρετούνται σε 1 κύκλο ενώ τα misses εξυπηρετούνται από την κύρια μνήμη σε 80 κύκλους. Σας ζητούν να προσθέσετε ένα δεύτερο επίπεδο κρυφής μνήμης ώστε η επιτάχυνση (speedup) του μέσου χρόνου πρόσβασης να είναι ίση με 1.65. Ποιό το hit rate αυτής της L2, αν η πρόσβαση σε αυτή στοιχίζει 6 κύκλους;

𝐴𝑀𝐴𝑇L1 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ 𝑀𝑃𝐿1 = 2.4 𝑀𝑅𝐿1 =2.4 − 1

80= 0.0175

Page 64: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019 64

Άσκηση 3η – Μέρος A Ζητούμενο: Δίνεται επεξεργαστής με ένα επίπεδο κρυφής μνήμης με μέσο χρόνο πρόσβασης στη μνήμη 2.4 κύκλους ρολογιού. Πιο συγκεκριμένα, τα hits εξυπηρετούνται σε 1 κύκλο ενώ τα misses εξυπηρετούνται από την κύρια μνήμη σε 80 κύκλους. Σας ζητούν να προσθέσετε ένα δεύτερο επίπεδο κρυφής μνήμης ώστε η επιτάχυνση (speedup) του μέσου χρόνου πρόσβασης να είναι ίση με 1.65. Ποιό το hit rate αυτής της L2, αν η πρόσβαση σε αυτή στοιχίζει 6 κύκλους;

𝐴𝑀𝐴𝑇L1 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ 𝑀𝑃𝐿1 = 2.4 𝑀𝑅𝐿1 =2.4 − 1

80= 0.0175

𝐴𝑀𝐴𝑇L1+L2 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ (𝒉𝒊𝒕𝑳𝟐 +𝑴𝑹𝑳𝟐 ∗ 𝑴𝑷𝑳𝟐)

Page 65: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019 65

Άσκηση 3η – Μέρος A Ζητούμενο: Δίνεται επεξεργαστής με ένα επίπεδο κρυφής μνήμης με μέσο χρόνο πρόσβασης στη μνήμη 2.4 κύκλους ρολογιού. Πιο συγκεκριμένα, τα hits εξυπηρετούνται σε 1 κύκλο ενώ τα misses εξυπηρετούνται από την κύρια μνήμη σε 80 κύκλους. Σας ζητούν να προσθέσετε ένα δεύτερο επίπεδο κρυφής μνήμης ώστε η επιτάχυνση (speedup) του μέσου χρόνου πρόσβασης να είναι ίση με 1.65. Ποιό το hit rate αυτής της L2, αν η πρόσβαση σε αυτή στοιχίζει 6 κύκλους;

𝐴𝑀𝐴𝑇L1 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ 𝑀𝑃𝐿1 = 2.4 𝑀𝑅𝐿1 =2.4 − 1

80= 0.0175

𝐴𝑀𝐴𝑇L1+L2 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ (ℎ𝑖𝑡𝐿2 +𝑀𝑅𝐿2 ∗ 𝑀𝑃𝐿2)

𝐴𝑀𝐴𝑇𝐿1𝐴𝑀𝐴𝑇𝐿1+𝐿2

= 1.65 2.4

1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ (ℎ𝑖𝑡𝐿2 +𝑀𝑅𝐿2 ∗ 𝑀𝑃𝐿2)= 1.65

2.4

1 + 0.0175(6 + 80 ∗ 𝑀𝑅𝐿2)= 1.65 𝑴𝑹𝑳𝟐 = 𝟎. 𝟐𝟓

Page 66: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019 66

Άσκηση 3η – Μέρος A Ζητούμενο: Δίνεται επεξεργαστής με ένα επίπεδο κρυφής μνήμης με μέσο χρόνο πρόσβασης στη μνήμη 2.4 κύκλους ρολογιού. Πιο συγκεκριμένα, τα hits εξυπηρετούνται σε 1 κύκλο ενώ τα misses εξυπηρετούνται από την κύρια μνήμη σε 80 κύκλους. Σας ζητούν να προσθέσετε ένα δεύτερο επίπεδο κρυφής μνήμης ώστε η επιτάχυνση (speedup) του μέσου χρόνου πρόσβασης να είναι ίση με 1.65. Ποιό το hit rate αυτής της L2, αν η πρόσβαση σε αυτή στοιχίζει 6 κύκλους;

𝐴𝑀𝐴𝑇L1 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ 𝑀𝑃𝐿1 = 2.4 𝑀𝑅𝐿1 =2.4 − 1

80= 0.0175

𝐴𝑀𝐴𝑇L1+L2 = 1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ (ℎ𝑖𝑡𝐿2 +𝑀𝑅𝐿2 ∗ 𝑀𝑃𝐿2)

𝐴𝑀𝐴𝑇𝐿1𝐴𝑀𝐴𝑇𝐿1+𝐿2

= 1.65 2.4

1 ∗ ℎ𝑖𝑡𝐿1 +𝑀𝑅𝐿1 ∗ (ℎ𝑖𝑡𝐿2 +𝑀𝑅𝐿2 ∗ 𝑀𝑃𝐿2)= 1.65

2.4

1 + 0.0175(6 + 80 ∗ 𝑀𝑅𝐿2)= 1.65 𝑴𝑹𝑳𝟐 = 𝟎. 𝟐𝟓

L2 Hit Rate = 75%

Page 67: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B Δίνεται ο ακόλουθος κώδικας C:int i,j; double A[8][16], B[8][16];

for (i=0; i < 4; i++) {for (j=0; j < 16; j++)

if (i % 2)

A[i+1][j] = A[i+1][j] + A[i][j] + B[i][j];

else

A[i+1][j] = A[i][j] + B[i-1][j];

}

Κάθε στοιχείο του πίνακα είναι 8 bytes 1 επίπεδο κρυφής μνήμης, 2-way associative, LRU πολιτική αντικατάστασης,

write-allocate, 32B block, μεγέθους 256 bytes Αρχικά η cache είναι άδεια Όλες οι μεταβλητές αποθηκεύονται σε καταχωρητές εκτός από τα στοιχεία των

πινάκων Οι πίνακες αποθηκεύονται στη μνήμη κατά γραμμές και είναι ευθυγραμμισμένοι Ο Α στη θέση μνήμης 0x00008000 Η σειρά με την οποία γίνονται οι αναφορές στην μνήμη είναι A, B, A

Page 68: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)1ο Ζητούμενο: Βρείτε το συνολικό αριθμό hits και 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]

A[0][0] → 0x0000 8000 = 0000 0000 0000 0000 1000 0000 0000 0000B[0] → 0x0000 8400 = 0000 0000 0000 0000 1000 0100 0000 0000

A[0][0] και B[0] γίνονται mapped στο ίδιο block

32 bytes block size = 25 → 5 bits offset

256B cache / 32B block → 8 blocks

8 blocks → 4 sets = 22 → 2 bits index

Πίνακας Α αποθηκευμένος στη θέσή 0x8000

Πίνακας Β αποθηκευμένος μετά τον Α → 0x8000 + 0x400 (=1024) → 0x8400

όλα στο set 0

Page 69: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0Α[1][0] Α[1][1] Α[1][2] Α[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Page 70: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0Α[1][0] Α[1][1] Α[1][2] Α[1][3]

Α[0][0] Α[0][1] Α[0][2] Α[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Page 71: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0Β[0][0] Β[0][1] Β[0][2] Β[0][3]

Α[0][0] Α[0][1] Α[0][2] Α[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

Page 72: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0Β[0][0] Β[0][1] Β[0][2] Β[0][3]

Α[1][0] Α[1][1] Α[1][2] Α[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

Page 73: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0Β[0][0] Β[0][1] Β[0][2] Β[0][3]

Α[1][0] Α[1][1] Α[1][2] Α[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Page 74: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[0][0] A[0][1] A[0][2] A[0][3]

Α[1][0] Α[1][1] Α[1][2] Α[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Page 75: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[0][0] A[0][1] A[0][2] A[0][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

Page 76: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

Page 77: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Page 78: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

A[0][0] A[0][1] A[0][2] A[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Page 79: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[0][0] A[0][1] A[0][2] A[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

Page 80: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

A[1][2] conflict miss

Page 81: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

A[1][2] conflict miss

i=0, j=3 A[1][3] hit

Page 82: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[0][0] A[0][1] A[0][2] A[0][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

A[1][2] conflict miss

i=0, j=3 A[1][3] hit

Α[0][3] conflict miss

Page 83: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[0][0] A[0][1] A[0][2] A[0][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

A[1][2] conflict miss

i=0, j=3 A[1][3] hit

Α[0][3] conflict miss

Β[0][3] conflict miss

Page 84: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

A[1][2] conflict miss

i=0, j=3 A[1][3] hit

Α[0][3] conflict miss

Β[0][3] conflict miss

A[1][3] conflict miss

Page 85: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=0, j=0 A[1][0] compulsory miss

Α[0][0] compulsory miss

Β[0][0] compulsory miss

A[1][0] conflict miss

Για j=4-15 επαναλαμβάνεται το ίδιο pattern

i=0, j=1 A[1][1] hit

Α[0][1] conflict miss

Β[0][1] conflict miss

A[1][1] conflict miss

i=0, j=2 A[1][2] hit

Α[0][2] conflict miss

Β[0][2] conflict miss

A[1][2] conflict miss

i=0, j=3 A[1][3] hit

Α[0][3] conflict miss

Β[0][3] conflict miss

A[1][3] conflict miss

Page 86: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Page 87: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

Page 88: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[2][0] A[2][1] A[2][2] A[2][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

Page 89: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[2][0] A[2][1] A[2][2] A[2][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Page 90: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

Page 91: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[2][0] A[2][1] A[2][2] A[2][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

Page 92: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

A[2][0] A[2][1] A[2][2] A[2][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Page 93: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[1][0] A[1][1] A[1][2] A[1][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Β[0][2] conflict miss

Page 94: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[2][0] A[2][1] A[2][2] A[2][3]

B[0][0] B[0][1] B[0][2] B[0][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Β[0][2] conflict miss

A[2][2] conflict miss

Page 95: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[2][0] A[2][1] A[2][2] A[2][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Β[0][2] conflict miss

A[2][2] conflict miss

i=1, j=3 A[1][3] conflict miss

Page 96: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[1][0] A[1][1] A[1][2] A[1][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Β[0][2] conflict miss

A[2][2] conflict miss

i=1, j=3 A[1][3] conflict miss

Β[0][3] conflict miss

Page 97: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[2][0] A[2][1] A[2][2] A[2][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Β[0][2] conflict miss

A[2][2] conflict miss

i=1, j=3 A[1][3] conflict miss

Β[0][3] conflict miss

A[2][3] conflict miss

Page 98: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[0][0] B[0][1] B[0][2] B[0][3]

A[2][0] A[2][1] A[2][2] A[2][3]

set 1

set 2

set 3

Cache

i=1, j=0 A[1][0] hit

Β[0][0] hit

A[2][0] compulsory miss

Για j=4-15 επαναλαμβάνεται το ίδιο pattern

i=1, j=1 A[1][1] conflict miss

Β[0][1] conflict miss

A[2][1] conflict miss

i=1, j=2 A[1][2] conflict miss

Β[0][2] conflict miss

A[2][2] conflict miss

i=1, j=3 A[1][3] conflict miss

Β[0][3] conflict miss

A[2][3] conflict miss

Page 99: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[3][0] A[3][1] A[3][2] A[3][3]

A[2][0] A[2][1] A[2][2] A[2][3]

set 1

set 2

set 3

Cache

i=2, j=0 A[3][0] compulsory miss

Page 100: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[3][0] A[3][1] A[3][2] A[3][3]

A[2][0] A[2][1] A[2][2] A[2][3]

set 1

set 2

set 3

Cache

i=2, j=0 A[3][0] compulsory miss

Α[2][0] hit

Page 101: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0A[3][0] A[3][1] A[3][2] A[3][3]

B[2][0] B[2][1] B[2][2] B[2][3]

set 1

set 2

set 3

Cache

i=2, j=0 A[3][0] compulsory miss

Α[2][0] hit

Β[2][0] compulsory miss

A[3][0] conflict miss

Για j=4-15 επαναλαμβάνεται το ίδιο pattern

i=2, j=1 A[3][1] hit

Α[2][1] conflict miss

Β[2][1] conflict miss

A[3][1] conflict miss

i=2, j=2 A[3][2] hit

Α[2][2] conflict miss

Β[2][2] conflict miss

A[3][2] conflict miss

i=2, j=3 A[3][3] hit

Α[2][3] conflict miss

Β[2][3] conflict miss

A[3][3] conflict miss

Page 102: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)αναφορές στη μνήμη περιεχόμενα cache

set 0B[2][0] B[2][1] B[2][2] B[2][3]

A[4][0] A[4][1] A[4][2] A[4][3]

set 1

set 2

set 3

Cache

i=3, j=0 A[3][0] hit

Β[2][0] hit

A[4][0] compulsory miss

Για j=4-15 επαναλαμβάνεται το ίδιο pattern

i=3, j=1 A[3][1] conflict miss

Β[2][1] conflict miss

A[4][1] conflict miss

i=3, j=2 A[3][2] conflict miss

Β[2][2] conflict miss

A[4][2] conflict miss

i=3, j=3 A[3][3] conflict miss

Β[2][3] conflict miss

A[4][3] conflict miss

Page 103: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)

αναφορές στη μνήμη αποτέλεσμα

i = 0, j = 0-3:

A[1][0] A[0][0] B[0][0] A[1][0] m m m m

A[1][1] A[0][1] B[0][1] A[1][1] h m m m

A[1][2] A[0][2] B[0][2] A[1][2] h m m m

A[1][3] A[0][3] B[0][3] A[1][3] h m m m

16 * 4 = 64 accesses13 * 4 = 52 misses3 * 4 = 12 hits

Σύνολο για i = 0:

Page 104: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)

αναφορές στη μνήμη αποτέλεσμα

i = 1, j = 0-3:

A[1][0] B[0][0] A[2][0] h h m

A[1][1] B[0][1] A[2][1] m m m

A[1][2] B[0][2] A[2][2] m m m

A[1][3] B[0][3] A[2][3] m m m

12 * 4 = 48 accesses10 * 4 = 40 misses2 * 4 = 8 hits

Σύνολο για i = 1:

Page 105: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)

αναφορές στη μνήμη αποτέλεσμα

i = 2, j = 0-3:

A[3][0] A[2][0] B[2][0] A[3][0] m h m m

A[3][1] A[2][1] B[2][1] A[3][1] h m m m

A[3][2] A[2][2] B[2][2] A[3][2] h m m m

A[3][3] A[2][3] B[2][3] A[3][3] h m m m

16 * 4 = 64 accesses12 * 4 = 48 misses4 * 4 = 16 hits

Σύνολο για i = 2:

Page 106: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)

αναφορές στη μνήμη αποτέλεσμα

i = 3, j = 0-3:

A[3][0] B[2][0] A[4][0] h h m

A[3][1] B[2][1] A[4][1] m m m

A[3][2] B[2][2] A[4][2] m m m

A[3][3] B[2][3] A[4][3] m m m

12 * 4 = 48 accesses10 * 4 = 40 misses2 * 4 = 8 hits

Σύνολο για i = 3:

Page 107: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (i)

Συνολικά

Accesses : 64 + 48 + 64 + 48 = 224Misses : 52 + 40 + 48 + 40 = 180Hits : 12 + 8 + 16 + 8 = 44

Page 108: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (ii)

2ο Ζητούμενο: Σας προτείνουν να αντικαταστήσετε την κρυφή μνήμη με μία άλλη ίδιας χωρητικότητας και οργάνωσης αλλά write-no-allocate. Πώς θα επηρεαστούν τα hits και misses; Δικαιολογήστε την απάντησή σας δίνοντας όπως και πριν το συνολικό τους αριθμό.

Page 109: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (ii)

αναφορές στη μνήμη αποτέλεσμα

i = 0, j = 0-3:

A[1][0] A[0][0] B[0][0] A[1][0] m m m m

A[1][1] A[0][1] B[0][1] A[1][1] m m m m

A[1][2] A[0][2] B[0][2] A[1][2] m m m m

A[1][3] A[0][3] B[0][3] A[1][3] m m m m

64 accesses64 misses0 hits

Σύνολο για i = 0:

Page 110: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (ii)

αναφορές στη μνήμη αποτέλεσμα

i = 1, j = 0-3:

A[1][0] B[0][0] A[2][0] m h m

A[1][1] B[0][1] A[2][1] h h m

A[1][2] B[0][2] A[2][2] h h m

A[1][3] B[0][3] A[2][3] h h m

48 accesses20 misses28 hits

Σύνολο για i = 0:

Page 111: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (ii)

αναφορές στη μνήμη αποτέλεσμα

i = 2, j = 0-3:

A[3][0] A[2][0] B[2][0] A[3][0] m m m m

A[3][1] A[2][1] B[2][1] A[3][1] m m m m

A[3][2] A[2][2] B[2][2] A[3][2] m m m m

A[3][3] A[2][3] B[2][3] A[3][3] m m m m

64 accesses64 misses0 hits

Σύνολο για i = 0:

Page 112: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (ii)

αναφορές στη μνήμη αποτέλεσμα

i = 3, j = 0-3:

A[3][0] B[2][0] A[4][0] m h m

A[3][1] B[2][1] A[4][1] h h m

A[3][2] B[2][2] A[4][2] h h m

A[3][3] B[2][3] A[4][3] h h m

48 accesses20 misses28 hits

Σύνολο για i = 0:

Page 113: Άσκηση 1η –Μέρος Α - NTUA...Άσκηση1η–Μέρος Α int array[100]; int *p, N; p = &array[8]; while (*p != 0){if (*p < 100) *p = *p % N; else *p = *p / N; p++;}

28/01/2019 cslab@ntua 2018-2019

Άσκηση 3η – Μέρος B (ii)

Συνολικά

Accesses : 64 + 48 + 64 + 48 = 224Misses : 64 + 20 + 64 + 20 = 168Hits : 0 + 28 + 0 + 28 = 56