Sei sulla pagina 1di 11

ESERCIZIO 1

Sia dato il seguente ciclo di un programma in linguaggio ad alto livello:


do { BASEC[i] = BASEA[i] + BASEB[i] + INC1 + INC2; i++; } while (i != N)

Il programma sia stato compilato nel seguente codice assembly MIPS. Si supponga che i registri $4, e $7 siano stati inizializzati rispettivamente ai valori 0 e 4N. I simboli BASEA, BASEB e BASEC sono costanti a 16 bit, prefissate. Il ciclo di clock del processore vale 2 ns.
L1: lw addi lw addi add sw addi bne $2, $2, $3, $3, $5, $5, $4, $4, BASEA ($4) $2, INC1 BASEB ($4) $3, INC2 $2, $3 BASEC ($4) $4, 4 $7, L1

Si consideri una generica iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5 stadi. Si supponga che non siano presenti ottimizzazioni nella pipeline. Disegnare lo schema della pipeline e individuare i conflitti sui dati (in rosso) di tipo RAW (Read After Write) e i conflitti sul controllo (in blu) presenti nel programma.
Istruzione L1: lw$2,BASEA($4) addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1 C1 C2 C3 IF ID EX IF ID IF C4 M EX ID IF C5 WB M EX ID IF C6 WB M EX ID IF C7 C8 C9 C10 C11 C12 C13 C14

WB M EX ID IF

WB M EX ID IF

WB M WB EX M WB ID EX M WB IF

Inserire gli stalli necessari a risolvere i conflitti presenti nel programma:


Istruzione L1:lw$2,BASEA($4) addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1

C 1 IF

C 2 ID IF

C 3 EX S

C 4 M S

C C 5 6 WB ID S IF

C 7

C 8

C 9

C 10

C 11

C 12

C 13

C 14

C 15

C 16

C 17

C 18

C 19

C 20

C 21

C 22

C 23

C C 24 25

C 26

C 27

EX M WB ID EX M WB ID IF S S S IF

EX S

M S

WB S

ID IF

EX M S S

WB ID S IF

EX M WB ID EX M IF S S

WB ID EX S S S

M S

WB IF

Indicare sinteticamente nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo da risolvere i conflitti presenti nel programma.
Num. Stalli 3 3 3 3 3 3 Istruzione L1:lw$2,BASEA($4) addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1

Scrivere il numero totale di stalli inseriti nel programma: 18 Calcolare il CPI ottenuto: CPI = (CI + stalli + 4) /CI = 30 / 8 = 3,75 Asintoticamente (N cicli) : CPI AS= (CI + stalli) / CI = (8 + 18) / 8 = 3,25 Calcolare il Throughput (espresso in MIPS) del programma corrispondente: MIPS = fCLOCK / CPI * 106 = (500 * 106) / (3,75 * 106) = 133, 3 Asintoticamente (N cicli): MIPSAS = fCLOCK / CPIAS * 106 = (500 * 106) / (3,25 * 106) = 153,8

Si supponga che nella pipeline siano state introdotte le seguenti ottimizzazioni: - nel Register File possibile la lettura e la scrittura allo stesso indirizzo nello stesso ciclo di clock; - introduzione del forwarding - calcolo del PC nelle branch sia stato anticipato nello stadio ID. Disegnare lo schema della pipeline e individuare i conflitti sui dati (in rosso) di tipo RAW (Read After Write) e i conflitti sul controllo (in blu) rimasti nel programma.
L1: Istruzione C1 C2 C3 C4 lw$2,BASEA($4) IF ID EX M addi $2,$2,INC1 IF ID EX lw $3,BASEB($4) IF ID addi $3,$3,INC2 IF add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1 C5 WB M EX ID IF C6 WB M EX ID IF C7 C8 C9 C10 C11 C12 C13 C14

ESERCIZIO 2

WB M EX ID IF

WB M EX ID IF

WB M WB WB EX M WB ID EX M IF

Inserire gli stalli necessari a risolvere i conflitti presenti nel programma e indicare in verde i percorsi di forwarding utilizzati
Istruzione L1: C1 C2 C3 C4 C5 ID EX M IF ID S IF S C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 Percorso di forwarding usato MEM-EX WB M EX ID IF MEM-EX EX-EX MEM-MEM WB EX-ID

lw$2,BASEA($4) IF addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7, L1

WB EX M ID EX IF ID IF

WB M WB S EX M ID EX S IF ID IF

WB M WB WB EX M S ID EX M IF S

Indicare sinteticamente nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo da risolvere i conflitti presenti nel programma.
Num. Stalli 1 1 1 0 0 1 Istruzione L1:lw$2,BASEA($4) addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1

Scrivere il numero totale di stalli inseriti nel programma: 4 Calcolare il CPI ottenuto: CPI = (CI + stalli + 4) /CI = 16 / 8 = 2 Asintoticamente (N cicli) : CPI AS= (CI + stalli) / CI = (8 + 4) / 8 = 1,5 Calcolare il Throughput (espresso in MIPS) del programma corrispondente: MIPS = fCLOCK / CPI * 106 = (500 * 106) / (2 * 106) = 250 Asintoticamente (N cicli): MIPSAS = fCLOCK / CPIAS * 106 = (500 * 106) / (1,5 * 106) = 333,33

ESERCIZIO 3

Si supponga che nella pipeline siano state introdotte le ottimizzazioni precedentemente esaminate pi la seguente: - Predizione statica dei salti allindietro (backward) di tipo branch always taken Disegnare lo schema della pipeline e individuare i conflitti sui dati (in rosso) di tipo RAW (Read After Write) e i conflitti sul controllo (in blu) rimasti nel programma.
L1: Istruzione C1 C2 C3 C4 C5 lw$2,BASEA($4) IF ID EX M WB addi $2,$2,INC1 IF ID EX M lw $3,BASEB($4) IF ID EX addi $3,$3,INC2 IF ID add $5,$2,$3 IF sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1 C6 WB M EX ID IF C7 C8 C9 C10 C11 C12 C13 C14

WB M EX ID IF

WB M EX ID IF

WB M WB WB EX M EX M WB ID IF

Inserire gli stalli necessari a risolvere i conflitti presenti nel programma e indicare in verde i percorsi di forwarding utilizzati
Istruzione L1: C1 C2 C3 C4 C5 ID EX M IF ID S IF S C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 Percorso di forwarding usato MEM-EX WB M EX ID IF MEM-EX EX-EX MEM-MEM WB EX-ID

lw$2,BASEA($4) IF addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7, L1

WB EX M ID EX IF ID IF

WB M WB S EX M ID EX S IF ID IF

WB M WB WB EX M S ID EX M IF

Indicare sinteticamente nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo da risolvere i conflitti presenti nel programma.
Num. Stalli 1 1 0 0 1 Istruzione L1:lw$2,BASEA($4) addi $2,$2,INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4, $4, 4 bne $4,$7,L1

Scrivere il numero totale di stalli inseriti nel programma: 3 Calcolare il CPI ottenuto: Asintoticamente (N cicli) : CPI AS= (CI + stalli) / CI = (8 + 3) / 8 = 1,375 Calcolare il Throughput (espresso in MIPS) del programma corrispondente: Asintoticamente (N cicli): MIPSAS = fCLOCK / CPIAS * 106 = (500 * 106) / (1,375 * 106) = 363,6

ESERCIZIO 4
L1:

Si supponga che, oltre alle ottimizzazioni hardware finora introdotte, sia stato ottimizzato anche lo scheduling del programma assembly come segue:
lw lw addi addi addi add bne sw $2, $3, $4, $2, $3, $5, $4, $5, BASEA ($4) BASEB ($4) $4, 4 $2, INC1 $3, INC2 $2, $3 $7, L1 (BASEC-4) ($4)

# branch delay slot

Disegnare lo schema della pipeline e individuare i conflitti sui dati (in rosso) di tipo RAW (Read After Write) e i conflitti sul controllo (in blu) eventualmente rimasti nel programma e indicare in verde i percorsi di forwarding utilizzati

Istruzione C1 C2 C3 C4 C5 L1: lw$2,BASEA($4) IF ID EX M WB lw $3,BASEB($4) IF ID EX M addi $4, $4, 4 IF ID EX addi $2,$2,INC1 IF ID addi $3,$3,INC2 IF add $5,$2,$3 bne $4,$7,L1 sw $5,BASEC-4($4)

C6 WB M EX ID IF

C7

C8

C9

C10 C11 C12 C13 C14

WB M EX ID IF

WB M EX ID IF

WB M WB EX M WB WB ID EX M IF

Non necessario intodurre stalli Calcolare il CPI ottenuto: Asintoticamente (N cicli) : CPI AS= CPI ideale = 1 Calcolare il Throughput (espresso in MIPS) del programma corrispondente: Asintoticamente (N cicli): MIPSAS = MIPS ideale= fCLOCK / CPIideale * 106 = (500 * 106) / (1 * 106) = 500

ESERCIZIO 5

Si supponga che, nel programma precedentemente ottimizzato, ogni accesso in lettura nella fase MEM alla cache dati generi un MISS che richieda 2 stalli:
L1: lw lw addi addi addi add bne sw $2, $3, $4, $2, $3, $5, $4, $5, BASEA ($4) BASEB ($4) $4, 4 $2, INC1 $3, INC2 $2, $3 $7, L1 (BASEC-4) ($4)

# branch delay slot

Disegnare lo schema della pipeline corrispondente e indicare in verde i percorsi di forwarding utilizzati
Istruzione L1:lw $2,BASEA($4) lw $3,BASEB($4) addi $4, $4, 4 addi $2,$2,INC1 addi $3,$3,INC2 add $5,$2,$3 bne $4,$7,L1 sw $5,BASEC-4($4)

C 1 IF

C 2 ID IF

C 3 EX ID IF

C 4 M EX ID IF

C 5 S S S S

C 6 S S S S

C 7 WB M EX ID IF

C 8 S S S S

C 9 S S S S

C 10 WB M EX ID IF

C 11

C 12

C 13

C 14

C 15

C 16

C 17

C 18

C 19

C 20

C 21

WB M EX ID IF

WB M EX ID IF

WB M WB EX M ID EX IF

WB M

WB

E necessario introdurre 4 stalli Calcolare il CPI ottenuto: Asintoticamente (N cicli) : CPI AS= (CI + stalli) / CI = (8 + 4) / 8 = 1,5 Calcolare il Throughput (espresso in MIPS) del programma corrispondente: Asintoticamente (N cicli): MIPSAS = fCLOCK / CPIAS * 106 = (500 * 106) / (1,5 * 106) = 333,33

ESERCIZIO 6
Si supponga che il programma iniziale sia eseguito su una CPU dotata di scheduling dinamico basato su SCOREBOARD con: 2 LOAD/STORE Functional Unit con latenza 2 2 ALU/BR Functional Unit con latenza 1 Check structural hazards in ISSUE phase Check RAW hazads in READ OPERANDS phase Check WAR e WAW in WRITE BACK phase No forwarding Completare la tabella di scoreboard indicando i cicli e i conflitti (hazards):
ISTRUZIONE L1:lw $2,BASEA($4) addi $2, $2, INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4,$4,4 bne $4,$7, L1 EXIT: ISSUE 1 2 3 4 9 10 11 14 READ EXEC OPERANDS COMPLETE 2 4 6 7 4 6 8 9 11 12 14 16 12 13 16 17 WRITE BACK 5 8 7 10 13 17 15 18 Hazards

RAW in $2 (WAW in $2) RAW in $3 (WAW in $3) Struct ALU/BR FU+ RAW $3 RAW $5 WAR $4 Struct ALU/BR FU + RAW $4

ESERCIZIO 7
Si supponga che il programma iniziale sia eseguito su una CPU dotata di scheduling dinamico basato su algoritmo di TOMASULO con: 2 RESERVATION STATION (RS1, RS2) + 1 LOAD/STORE FU con latenza 2 2 RESERVATION STATION (RS3, RS4) + 1 ALU/BR FU con latenza 1 Check structural hazards for RS in ISSUE phase Check RAW hazads and Check structural hazards for FUs in START EXECUTE phase WRITE RESULT in RS and RF

Completare la tabella di Tomasulo indicando i cicli e i conflitti (hazards):


ISTRUZIONE L1:lw $2,BASEA($4) addi $2, $2, INC1 lw $3,BASEB($4) addi $3,$3,INC2 add $5,$2,$3 sw $5,BASEC($4) addi $4,$4,4 bne $4,$7, L1 EXIT: ISSUE 1 2 3 4 7 8 10 12 START EXEC 2 5 5 8 10 12 12 14 WRITE RESULT 4 6 7 9 11 14 13 15 Hazards

RAW in $2 STRUCT LD/ST FU RAW in $3 Struct RS3+ RAW $3+ STRUCT ALU/BR FU RAW $5 Struct RS4+ STRUCT ALU/BR FU STRUCT RS3+RAW $4

Calcolare lo Speedup ottenuto con lalgoritmo di Tomasulo rispetto allo Scoreboard: Speedup = (Exec. Time Scoreboard) / (Exec. Time Tomasulo) = 18/15 = 1,2

Potrebbero piacerti anche