Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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)
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
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)
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
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