• Non ci sono risultati.

Soluzione Esercizio1 ArchitetturadegliElaboratori-mod2(1 provaparziale)

N/A
N/A
Protected

Academic year: 2021

Condividi "Soluzione Esercizio1 ArchitetturadegliElaboratori-mod2(1 provaparziale)"

Copied!
4
0
0

Testo completo

(1)

Cognome e Nome: Matricola:

Ho gi`a superato il Modulo 1 con Voto

Architettura degli Elaboratori - mod 2 (1

a

prova parziale)

(17 Aprile 2019)

Esercizio 1

Per l’esecuzione del seguente codice:

1. add $t0, $a0, $s0

2. lw $t1, 0($t0)

3. addi $t1, $t1, 50

4. sw $t1, 0($t0)

5. addi $s0, $s0, 4 6. bne $s0, $t1, loop

si consideri un’architettura pipeline a 5 stadi (con delayed branch e anticipo allo stadio ID del completamento delle branch).

In particolare : (a) un’architettura pipeline senza forwarding e con il register file speciale che scrive un registro nella prima parte del ciclo e legge una coppia di registri nella seconda parte del ciclo: (b) architettura con forwarding e register file speciale.

1. Individuare le dipendenze RAW (Read After Write) nel codice, facendo riferimenti ai numeri che ideantificano le varie istruzioni e al registro che causa ciascuna dipendenza;

2. Disegnare il diagramma temporale per il caso (a);

3. Disegnare il diagramma temporale per il caso (b) evidenzando i forwarding necessari per risolvere le dipen- denze RAW (da quale registro intermedio a quale unit`a funzionale);

4. Modificare l’ordine delle istruzioni per ridurre gli stalli nel caso (b) (opzionale).

Soluzione

1 -> 2 ($t0) 1 -> 4 ($t0) 2 -> 3 ($t1) 3 -> 4 ($t1) 3 -> 6 ($t1) 5 -> 6 ($s0)

Caso a:

--- add $t0, $a0, $s0 | IF | ID | EX | ME | WB |

--- lw $t1, 0($t0) | IF | ID |<ID>|<ID>| EX | ME | WB |

--- addi $t1, $t1, 50 | IF |<IF>|<IF>| ID |<ID>|<ID>| EX | ME | WB |

--- sw $t1, 0($t0) | IF |<IF>|<IF>| ID |<ID>|<ID>| EX | ME | WB |

---

addi $s0, $s0, 4 | IF |<IF>|<IF>| ID | EX | ME | WB |

---

bne $s0, $t1, loop | IF | ID |<ID>|<ID>| EX | ME | WB |

---

nop | IF |<IF>|<IF>| ID | EX | ME | WB |

---

Caso b:

(2)

--- 1. add $t0, $a0, $s0 | IF | ID | EX | ME | WB |

--- 2. lw $t1, 0($t0) | IF | ID | EX | ME | WB |

--- 3. addi $t1, $t1, 50 | IF | ID |<ID>| EX | ME | WB |

--- 4. sw $t1, 0($t0) | IF |<IF>| ID | EX | ME | WB |

---

5. addi $s0, $s0, 4 | IF | ID | EX | ME | WB |

---

6. bne $s0, $t1, loop | IF | ID |<ID>| EX | ME | WB |

---

nop | IF |<IF>| ID | EX | ME | WB |

---

Le dipendenze RAW vengono risolte come segue:

• 1->2 ($t0): forwarding dal registro EX/ME allo stadio EX

• 1->4 ($t0): lo stadio ID di 4 eseguito quando 1 `e gi`a completato

• 2->3 ($t1): forwarding dal registro ME/WB allo stadio EX

• 3->4 ($t1): forwarding dal registro EX/ME allo stadio EX

• 3->6 ($t1): dipendenza risolta dal register file speciale

• 5->6 ($s0): forwarding dal registro EX/ME allo stadio ID (che conclude l’esecuzione di bne)

Infine modifichiamo l’ordine delle istruzioni per ridurre gli stalli. In particolare, poniamo anche un’istruzione indipendente nel delay slot dell’istruzione bne.

--- 1. add $t0, $a0, $s0 | IF | ID | EX | ME | WB |

--- 2. lw $t1, 0($t0) | IF | ID | EX | ME | WB |

--- 5. addi $s0, $s0, 4 | IF | ID | EX | ME | WB |

---

3. addi $t1, $t1, 50 | IF | ID | EX | ME | WB |

--- 6. bne $s0, $t1, loop | IF | ID |<ID>| EX | ME | WB |

---

4. sw $t1, 0($t0) | IF |<IF>| ID | EX | ME | WB |

---

Si noti come l’ordine stabilito dalle dipendenze 1->2, 1->4, 2->3, 3->4, 3->6 e 5->6 continui ad essere rispettato nel codice in cui le istruzioni sono state riordinate.

Esercizio 2

Supporre di avere una memoria indirizzabile al byte, acceduta con un indirizzo fisico di 32 b. Supporre inoltre che la CPU invii una serie di indirizzi come segue: 0x00000419, 0x0000041B, 0x00000423, 0x00000428, 0x0000042B, 0x0000041E, 0x0000041F, 0x00000433.

La cache contiene solo 4 blocchi ed `e inizialmente vuota. Rispondere ai seguenti quesiti:

• Cache direct-mapped, composta da 4 blocchi grandi da 1 word (4 B): determinare se ogni accesso `e un hit o un miss, e mostrare il contenuto finale della cache, con la TAG associata ad ogni blocco.

• Cache 2-way set associative, composta da 2 insiemi con blocchi da 2 word (8 B): determinare se ogni accesso

`

e un hit o un miss, e mostrare il contenuto finale della cache, con la TAG associata ad ogni blocco.

• Cache fully associative, composta da 4 blocchi da 2 word (8 B): determinare se ogni accesso `e un hit o un miss, e mostrare il contenuto finale della cache, con la TAG associata ad ogni blocco.

(3)

Soluzione

• se la cache ha 4 blocchi ed `e diretta, allora INDEX = log 4 = 2 b. Anche l’OFFSET `e di 2 bit, poich´e il blocco `e di 4 B. Infine TAG = 32 - 2 -2 = 28 b. Per la sequenza di accesso della cache abbiamo:

0x419: TAG=41 INDEX+OFFSET = 10+01 → miss 0x41B: TAG=41 INDEX+OFFSET = 10+11 → hit 0x423: TAG=42 INDEX+OFFSET = 00+11 → miss

0x428: TAG=42 INDEX+OFFSET = 10+00 → miss + conflict 0x42B: TAG=42 INDEX+OFFSET = 10+11 → hit

0x41E: TAG=41 INDEX+OFFSET = 11+10 → miss 0x41F: TAG=41 INDEX+OFFSET = 11+11 → hit

0x433: TAG=43 INDEX+OFFSET = 00+11 → miss + conflict ---

Set no. 00: | TAG = 43 |

Set no. 01: | |

Set no. 10: | TAG = 42 | Set no. 11: | TAG = 41 | ---

• se la cache ha 2 insiemi, allora INDEX = log 2 = 1 b. L’OFFSET `e di log 8=3 bit (blocco da 8 B), mentre TAG = 32 - 1 - 3 = 28 b. Per la sequenza di accesso della cache abbiamo:

0x419: TAG=41 INDEX+OFFSET = 1+001 → miss 0x41B: TAG=41 INDEX+OFFSET = 1+011 → hit 0x423: TAG=42 INDEX+OFFSET = 0+011 → miss 0x428: TAG=42 INDEX+OFFSET = 1+000 → miss 0x42B: TAG=41 INDEX+OFFSET = 1+011 → hit 0x41E: TAG=41 INDEX+OFFSET = 1+110 → hit 0x41F: TAG=41 INDEX+OFFSET = 1+111 → hit 0x433: TAG=43 INDEX+OFFSET = 0+011 → miss

via 0 via 1

--- Set no. 0: | TAG = 42 | TAG = 43 | Set no. 1: | TAG = 41 | TAG = 42 | ---

• per la cache completamente associativa, abbiamo un solo insieme, con INDEX = log 1 = 0 b. L’OFFSET `e sempre di log 8 = 3 bit (blocco da 8 B), mentre TAG = 32 - 3 = 29 b. Per la sequenza di accesso della cache abbiamo:

0x419: TAG=0x41+1 OFFSET = 001 → miss 0x41B: TAG=0x41+1 OFFSET = 011 → hit 0x423: TAG=0x42+0 OFFSET = 011 → miss 0x428: TAG=0x42+1 OFFSET = 000 → miss 0x42B: TAG=0x41+1 OFFSET = 011 → hit 0x41E: TAG=0x41+1 OFFSET = 110 → hit 0x41F: TAG=0x41+1 OFFSET = 111 → hit 0x433: TAG=0x43+0 OFFSET = 011 → miss

---

| TAG = 41+1 | TAG = 42+0 | TAG = 42+1 | TAG = 43+0 | ---

Domanda 1

Discutere funzionamento e vantaggi di cache a pi`u livelli.

(4)

Domanda 2

Discutere la predizione dei branch nelle moderne architetture pipeline. In cosa consiste? Perch´e `e importante?

Domanda 3

Quali sono gli effetti dell’aumento della dimensione del blocco e/o della modifica del grado di associativit`a di una cache, rispetto all’hit rate della cache stessa? La risposta dipende da che localit`a esiste nel software di benchmark?

Riferimenti

Documenti correlati

il risultato non avrà molto senso.. I programmi però non sono quasi mai il grosso dell’occupazione di memoria. I dati lo sono.) Il semplice Register File come lo abbiamo visto non

il risultato non avrà molto senso.. I programmi però non sono quasi mai il grosso dell’occupazione di memoria. I dati lo sono.) Il semplice Register File come lo abbiamo visto non

[r]

Data l’architettura a pipeline a 5 stadi vista a lezione con hazard control unit, forwarding, register file speciale, disegnare il diagramma temporale di esecuzione..

pipeline senza forwarding e con register file speciale (che nella prima parte del ciclo scrive e nella seconda parte del ciclo legge i registri).. La CPU non ha hazard detection

Il valore di F deve essere affermato quando gli ingressi, interpretati come numero naturale senza segno (con A cifra pi` u significativa e D cifra meno significativa), rappresentano

• Calcolare il CPI nel caso in cui vengano introdotte tecniche di forwarding assieme al register file speciale (che scrive e legge nello stesso ciclo di clock).. Si consideri

Usare un foglio separato per rispondere alle domande e risolvere gli esercizi, specificando nell’intestazione: Titolo del corso (Architettura degli Elaboratori – Modulo I ), Data