Soluzioni del capitolo 6.

 

Exercise N° Result Comments
1 ciclo di clock 4 ns, le prestazioni sono la metà

nella macchina a singolo ciclo ho 8ns, in quella con pipeline ho 4ns quindi 
speed-up = 2.

 
2  
3

Correggo: in questa alla fine $3 è più grande di 4:

	add 	$3,$3,4 
Ciclo: 	lw 	$2,96($3)
	beq 	$3,$4,Ciclo
	add 	$3,$3,4 <- delayed branch slot

in questa  alla fine $2 non va bene:

	lw  	$2,100($3)
Ciclo: 	add	$3,$3,4
	beq	$3,$4,Ciclo
	lw	$2,100($3)

questa è OK:

ciclo:   add 	$3,$3,4
         beq 	$3,$4,ciclo
         lw 	$2, 96($3)

NOTA: cmq la prima sarebbe migliore perchè le altre due 
introducono stalli per la beq 
(quindi non portano a nessun miglioramento delle prestazioni)

 

 
4 le dipendenze sono $2 e $4, tutte risolvibili con la propagazione
 
5    
6    
7    
8    
9    
10    
11    
12    
13    
14
ogni istruzione introduce uno stallo.  CPI = 2

in effetti il CPI è 2 per istruzioni infinite, però avrei 1 ciclo aggiuntivo all'inizio e 3 alla fine, portanto il CPI = [ 1 + 3 + (I - 1) * 2] / 100 = 2,02. Non chiedetemi perchè in quanto l'ho risolto per via "grafica".

 
15 8 cicli in totale. Dipendenze: $6
 
16    
17    
18    
19 Nella prima uso il forwarding.
Nella seconda non ci sono problemi!!  o no?

ciclo (-4): per la store, l'indirizzo dell'operando viene posto in EX/MEM (cioè EX/MEM conterrà 100+r2 e il valore contenuto in r7), la load pone nel registro ID/EX i valori 100, r2 e r8.
ciclo (-3): la store accede alla memoria e memorizza r7 nell'indirizzo MEM[100+r2]hex, ed ha finito. Intanto la load calcola l'offset sommando r2 con 100 (i problemi potrebbero nascere qui se un'altra istruzione, non una sw, avesse contemporaneamente modificato r2). Ma in questo caso non ci sono problemi.
ciclo (-2): infine la load legge dalla memoria il valore contenuto in MEM[100+r2] che è diventato r7, e lo carica nel registro MEM/WB
ciclo (-1): scrittura del dato letto nel registro r8

 
20    
21    
22    
23 Spostare   add  $10  prima di  beq

1 - add $7,$7,$3 dopo lw$3,0($5)

2 - (segue dalla 1) add $8,$8,$4 dopo lw $4, 4($5)

 

 
24    
25    
26    
27    
28    
29    
30    
31    
32    
33    
34    
35