Introduzione Corso - Esercizi CPI

Esame 16 giugno 2022

Primo appello - 14 giugno 2022_sol.pdf

Traccia:

[5 pt] Si consideri di eseguire il seguente stralcio di codice su una pipeline RISC-V con logica di forwarding e con dynamic branch predictor a singolo bit inizialmente settato a BRANCH TAKEN.

li t2,3 // UB, sto caricando il valore 3 all'interno del registro t2

li t0,0 // i = 0, carico il valore 0 all'interno del registro t0

loop_i // definisco il primo ciclo

li t1,0 // j = 0, carico il valore 0 all'interno del registro t1

loop_j // definisco il secondo ciclo

addi t1,t1,1 // incremento di una unità t1

blt t1,t2,loop_j // controllo che t1 sia minore di t2 e se si avvera tale condizione
								 // continuo a iterare nel secondo ciclo

addi t0,t0,1     // incremento di una unità t0

blt t0,t2,loop_i // controllo che t0 sia minore di t2 e se si avvera tale condizione
								 // continuo a iterare nel secondo ciclo

jr ra            // return

Integrazione Codice Assembly

Il codice assembly visualizzato all’interno dello blocco precedente definisce due cicli for che sono innestati l’uno nell’altro come nel seguente codice C:

for (i = 0; i < 3; i++)
	for (j = 0; j < 3; j++)

Riporto in calce una versione estesa di ciò che avviene in assembly come approdondimento e anticipazione di alcuni argomenti che verranno trattati in seguito nel corso del tutorato.

a) Si calcoli la misprediction rate [2,5 pt].

b) Sapendo che:

mentre in caso di misprediction ne impiega 8

Si calcoli il CPI medio per l’esecuzione del programma [2,5 pt]

Dati a disposizione:

Su 30 istruzioni totali 12 sono branch, 17 aritmetiche (CPI=2) e 1 salto incondizionato (CPI=2).