Sei sulla pagina 1di 27

ESERCIZIO 3

Tradurre in un linguaggio ad alto livello a scelta (C, Pascal, Java ecc.) la seguente porzione di codice
assembly del processore MIPS. Si supponga che i registri $t6 e $t7 siano stati inizializzati
rispettivamente ai valori 0 e 4N. I simboli VETA e VETB e K sono costanti a 16 bit, prefissate.
        
  

      
   
    
   
  
   
 
  
   
!"# $   

%&%  &  %''(&  
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
ESERCIZIO 4
Si scriva in linguaggio assembly del processore MIPS la seguente procedura )*+, che modifica
direttamente in memoria la matrice MAT.
Indicare esplicitamente in assembly i parametri che vengono passati alla procedura e le fasi di
allocazione/deallocazione dello stack:

-+)*+,". /0/0""&.
1+*2345&.466
1+*723475&.4766
. /702. /7064


SOLUZIONE:
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
__________________________________________________________________________
ESERCIZIO 5

Sia dato il seguente ciclo di un programma in linguaggio macchina MIPS. Si supponga che i registri
$6, e $7 siano stati inizializzati rispettivamente ai valori 4 e 4N. I simboli VETA, VETB e K sono
costanti a 16 bit, prefissate. Il ciclo di clock del processore vale 1 ns.

Si consideri una singola iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati di tipo RAW (Read After Write) e i conflitti sul controllo presenti
nel programma e indicarli nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo
da risolvere i conflitti presenti nel programma.

Num. I STRUZI ONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 Tipo di


stalli conflitto
 
 IF ID EX ME WB
 

 IF ID EX ME WB
 
 IF ID EX ME WB
  
 IF ID EX ME WB
 

 IF ID EX ME WB
 
 IF ID EX ME WB
 

 IF ID EX ME WB
 

 IF ID EX ME WB
   IF ID EX ME WB

Scrivere il numero totale di stalli inseriti in una singola iterazione del programma:

__________________________________________________________________________

Calcolare il CPI ottenuto asintoticamente N :

__________________________________________________________________________

Calcolare il Throughput (espresso in MIPS) ottenuto asintoticamente (N cicli):

__________________________________________________________________________
Calcolare il costo della copertura minima ottenuta (utilizzando come costo il numero di letterali di
ciascun termine prodotto):

Disegnare lo schema logico della copertura minima trovata:

Se la copertura minima trovata non unica, dire quante altre coperture minime esistono:
1

Se la copertura minima trovata non unica, calcolare le altre coperture minime:

BC D + AB + BD
ESERCIZIO 2
Tradurre in un linguaggio ad alto livello a scelta (C, Pascal, Java ecc.) la seguente porzione di codice
assembly del processore MIPS. (Si supponga che i registri  e  siano stati inizializzati
rispettivamente ai valori 0 e 4N. I simboli 


sono costanti a 16 bit,
prefissate.







  
 















!"
#

$%

#
&'
()

**

#
#
#

#
&'
#

#

+"
#

$%

()
&'
#

!"
,

$%

,
&'
()

**

,
,
,

,
&'
#

,



+"
,

$%

()
&'
,

**

-
#
,

-
&'
#
.
,

+"
-

$%

 ()
&'
-



**


-


&'

.



/












Codice ad alto livello corrispondente:


  

"0!
$
1
%

()

#
2
()3



()

#
2
()3



 ()

()
.
()3

..3

ESERCIZIO 3
Si scriva in linguaggio assembly del processore MIPS la seguente procedura ricorsiva che calcola la
funzione con  secondo la seguente definizione:

$4%

4

$%



$5%


$5'%
2
$5'#%
+
5
6#

Usare i registri
 ecc per il passaggio dei parametri alla procedura, i registri  ecc. come variabili
temporanee mentre il risultato deve essere restituito al chiamante tramite il registro 




     


 
! "
#   
 "$ %"
"$
!
 &   
 
!
    
 

'( )
 *+  $


*+

   )$"  )$" $" "

 ,+-
*+    
   $  $

 '$.   )$" */+ $ 


*/+

   )$"  $" "

 ,+-

*/+

 
  

,
   0
1

1 $
    





 
  

,
   0
1

1%    
 2

+- ! "
#   "" "$ %"
"$
!
 &   "" 
!
    "" 

     $


 
 ," "

ESERCIZIO 4:
Si consideri una cache a set associativa a 4 vie da 256 KByte e blocco da 128 bit (16 Byte)
Calcolare il numero di blocchi presenti nella cache:

Dim. Cache/ Dim. Blocco = 256 K Byte / 16 Byte = 16 K blocchi

Calcolare il numero di insiemi presenti nella cache:

Dim. Cache / (Dim. Blocco * 4) = 4 K insiemi

Calcolare il numero di blocchi per insieme:

4 blocchi

Calcolare il numero di comparatori necessari:

Si consideri la struttura dellindirizzo di memoria (32 bit).


Calcolare il numero di bit necessari per lo spiazzamento (offset) del byte nella parola:

2 bit

Calcolare il numero di bit necessari per lo spiazzamento (offset) della parola nel blocco:

2 bit

Calcolare il numero di bit di indice:

12 bit

Calcolare il numero di bit per letichetta (tag):

16 bit
ESERCIZIO 5

Sia dato il seguente ciclo di un programma in linguaggio macchina MIPS. Si supponga che i registri
$6, 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.

Si consideri una singola iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati di tipo RAW (Read After Write) e i conflitti sul controllo presenti
nel programma e indicarli nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo
da risolvere i conflitti presenti nel programma.

Num. ISTRUZIONE C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 Tipo di


stalli conflitto

3'$. 4 5 +678 IF ID EX ME WB
,
!  9:;+: 4 IF ID EX ME WB C
,

    IF ID EX ME WB D
,
!  9:;+: 4 IF ID EX ME WB D

! < 9:;+9 4 IF ID EX ME WB
,

 < < < IF ID EX ME WB D
,
! < 9:;+9 4 IF ID EX ME WB D


 &  < IF ID EX ME WB
,
! & 9:;+ 4 IF ID EX ME WB D


 4 4 & IF ID EX ME WB

=3 IF ID EX ME WB
,
+678 IF ID EX ME WB C

Scrivere il numero totale di stalli inseriti in una singola iterazione del programma:

21

Calcolare il CPI ottenuto asintoticamente (N cicli):

CPIAS = (num. stalli + CI) / CI = 21 + 11 / 11 = 2,9

Calcolare il Throughput (espresso in MIPS) ottenuto asintoticamente (N cicli):

MIPSAS = fCLOCK /(CPIAS* 106) = (500 * 106 ) / (2,9 * 106 ) = 172,41


ESERCIZIO 6
Si consideri lo stesso programma precedente nel quale sia stato effettuato il riordino (scheduling)
delle istruzioni.
Si consideri una singola iterazione del nuovo ciclo eseguita dal processore MIPS in modalit
pipeline a 5 stadi senza ottimizzazioni.
Individuare i conflitti sui dati di tipo RAW (Read After Write) e i conflitti sul controllo presenti
nel programma e indicarli nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo
da risolvere i conflitti presenti nel programma.

Num. ISTRUZIONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 Tipo di


stalli conflitto
 3!  9:;+: 4 IF ID EX ME WB
 ! < 9:;+9 4 IF ID EX ME WB
 
    IF ID EX ME WB D
 
 < < < IF ID EX ME WB
< 
 &  < IF ID EX ME WB D
 !  9:;+: 4 IF ID EX ME WB
 ! < 9:;+9 4 IF ID EX ME WB
 ! & 9:;+ 4 IF ID EX ME WB 1
 
 4 4 & IF ID EX ME WB
< '$ 4 5 3 IF ID EX ME WB D
< +678 IF ID EX ME WB C

Scrivere il numero totale di stalli inseriti in una singola iterazione del programma:

12
______________

Calcolare il CPI ottenuto asintoticamente (N cicli):

CPIAS = (num. stalli + CI) / CI = (12+10) / 10 = 2,2


___________________________________________

Calcolare il Throughput (espresso in MIPS) ottenuto asintoticamente (N cicli):

MIPSAS = fCLOCK /(CPIAS* 106) = (500 * 106 ) / (2,2 * 106 ) = 227,27

_______________________________________________________________

Dire se risulta migliore il programma del precedente Esercizio (5) o il programma modificato e
calcolare lo speed-up ottenuto:

Risulta migliore il programma modificato


Speed up = 227,27 /172,41 = 1,32
ESERCIZIO 2
Tradurre in un linguaggio ad alto livello a scelta (C, Pascal, Java ecc.) la seguente porzione di codice
assembly del processore MIPS. I simboli esono costanti a 16
bit, prefissate.
       



    
    


  !"  
  !"  
  #!"  
  $!"  
  %&'   
  % !"  
  %!"  
  %#!"  
  %$!"  
  (   
  ')
   
* + 

&))

 ,#-./,01
,$-./,01
,-./,01
,2-./,01
,-.,.1
/,0-.,#1
/,0-.,$1
/,0-.,1
/,0-.,21
,-.,3(1
4!,56,"7
1
* +

8)99,9%:))%&

6
 
/.06/01
/.06/01
/.06/01
/.06/01
331
;!56"
ESERCIZIO 3
Si scriva in linguaggio assembly del processore MIPS la seguente procedura che modifica direttamente
in memoria i vettori indicando esplicitamente i parametri che vengono passati alla procedura



 
  
   

  
  


 

  
  





SOLUZIONE:

  
  
<=
 % 
'>  
  #?++!"
  $?++!"
  ?++!"
  2?++!"
@  % #$
  ')  

  %$?++!"
  %2?++!"
  A 

 %#?++!"
  %?++!"
  
  A<=


ESERCIZIO 5

Sia dato il seguente ciclo di un programma in linguaggio macchina MIPS. Si supponga che i registri
$6, e $7 siano stati inizializzati rispettivamente ai valori 4 e 4N+4. I simboli BASEA, BASEB,
BASEC e BASED sono costanti a 16 bit, prefissate. Il ciclo di clock del processore vale 2 ns.

Si consideri una singola iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati di tipo RAW (Read After Write) e i conflitti sul controllo presenti
nel programma e indicarli nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo
da risolvere i conflitti presenti nel programma.

Num. ISTRUZIONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 Tipo di


stalli conflitto
 
!"#$ !% IF ID EX ME WB
 
!"#$ !% IF ID EX ME WB
 
!&"#$ !% IF ID EX ME WB
 
!'"#$ !% IF ID EX ME WB
 ()!%"!%"* IF ID EX ME WB
' !"#$ !% IF ID EX ME WB D
 !"#$ !% IF ID EX ME WB D
 !&"#$ !% IF ID EX ME WB D
 !'"#$ !% IF ID EX ME WB
 !%"!%"+ IF ID EX ME WB
' ) !%"!," IF ID EX ME WB D
' $-./  IF ID EX ME C

Scrivere il numero totale di stalli inseriti in una singola iterazione del programma:

9
______________

Calcolare il CPI ottenuto asintoticamente (N cicli):

CPIAS = (num. stalli + CI) / CI = (9 + 11) /11 = 1,81


___________________________________________

Calcolare il Throughput (espresso in MIPS) ottenuto asintoticamente (N cicli):


MIPSAS = fCLOCK /(CPIAS* 106) = (500 * 106 ) / (1,81 * 106 ) = 276,24

_______________________________________________________________
ESERCIZIO 6 (FACOLTATIVO)
Si consideri lo stesso programma precedente nel quale sia presente il forwarding.
Si consideri una singola iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati di tipo RAW (Read After Write) e i conflitti sul controllo presenti
nel programma e indicarli nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo
da risolvere i conflitti presenti nel programma.

Num. ISTRUZIONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 Tipo di


stalli conflitto
 
!"#$ !% IF ID EX ME WB
 
!"#$ !% IF ID EX ME WB
 
!&"#$ !% IF ID EX ME WB
 
!'"#$ !% IF ID EX ME WB
 ()!%"!%"* IF ID EX ME WB
 !"#$ !% IF ID EX ME WB D
 !"#$ !% IF ID EX ME WB D
 !&"#$ !% IF ID EX ME WB D
 !'"#$ !% IF ID EX ME WB
 !%"!%"+ IF ID EX ME WB
 ) !%"!," IF ID EX ME WB D
' $-./  IF ID EX ME C

Scrivere il numero totale di stalli inseriti in una singola iterazione del programma:

3
______________

Calcolare il CPI ottenuto asintoticamente (N cicli):

CPIAS = (num. stalli + CI) / CI = (3 + 11) /11 = 1,27


___________________________________________

Calcolare il Throughput (espresso in MIPS) ottenuto asintoticamente (N cicli):

MIPSAS = fCLOCK /(CPIAS* 106) = (500 * 106 ) / (1,27* 106 ) = 393,7

_______________________________________________________________
Universit degli Studi di Milano
Corso Architettura degli elaboratori e delle reti - Turno 1
Prof. Cristina Silvano
A.A. 2004/2005 Terza prova in itinere 13 giugno 2005

Cognome: Nome: ____________________

Matricola: Anno di corso:____________


Istruzioni
 Scrivere solo sui fogli distribuiti negli spazi indicati - utilizzando il retro delle pagine in caso di
necessit. Non separare questi fogli.
 vietato portare allesame libri, eserciziari, appunti e calcolatrici. Chiunque venga trovato in possesso
di documentazione relativa al corso anche se non strettamente attinente alle domande proposte
vedr annullata la propria prova.
 Non possibile lasciare laula conservando il tema della prova in corso.

ESERCIZIO 1 (10 punti)


Si consideri un calcolatore in grado di eseguire le istruzioni riportate in tabella:
Istruzione Frequenza Cicli di clock
ALU 50 1
LOAD 20 4
STORE 10 4
BRANCH 10 2
JUMP 10 2

1. Calcolare il CPI medio nel caso (1) supponendo di usare un periodo di clock pari a 5 ns
CPI1 = CPImedio = 0.5 * 1 + 0.2 * 4 + 0.1 * 4 + 0.1* 2 + 0.1 * 2 = 2.1

Quanto vale il Throughput (o frequenza di operazione), misurato in MIPS, nel caso (1)?
MIPS1 = fCLOCK /(CPI1 * 106) = (200 * 106 ) / (2.1 * 106 ) = 95.24

2. Si supponga ora che, grazie a una qualche tecnica di ottimizzazione, la frequenza di clock sia
aumentata del 25% e ci comporti un incremento di CPI delle istruzioni di ALU del 50% e
delle istruzioni di LOAD del 25% e che la frazione di istruzioni rimanente venga eseguita con
CPI invariato rispetto alla precedente tabella.
Quanto vale il CPI medio nel caso (2)?
CPI1 = CPImedio = 0.5 * 1.5 + 0.2 * 5 + 0.1 * 4 + 0.1* 2 + 0.1 * 2 = 2.55

Quanto vale il Throughput, misurato in MIPS, nel caso (2)?


MIPS2 = fCLOCK /(CPI1 * 106) = (250 * 106 ) / (2.55 * 106 ) = 98.04

3. Quanto vale lo Speedup (accelerazione) passando dal caso (1) al caso (2)?
Speedup = MIPS2 / MIPS1 = 98,04 / 95,24 = 1,03

E meglio il caso (1) o il caso (2)?


E meglio il caso (2)
ESERCIZIO 2 (10 punti)

Sia dato il seguente ciclo di un programma in linguaggio macchina MIPS. Si supponga che i registri
$6, e $7 siano stati inizializzati rispettivamente ai valori 0 e 4N. I simboli BASEA e BASEB sono
costanti a 16 bit, prefissate. Il ciclo di clock del processore vale 5 ns.
Si consideri una generica iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati e i conflitti sul controllo presenti nel programma e indicarli
nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire in modo da risolvere i conflitti presenti
nel programma.
Num. I STRUZI ONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 Tipo di
stalli conflitto
 
 I F I D EX ME WB
    I F I D EX ME WB D
    IF ID EX ME WB D
 

 IF ID EX ME WB
    IF ID EX ME WB D
    IF ID EX ME WB D
    IF ID EX ME WB
 
 IF ID EX ME WB D
 

 IF ID EX ME WB D
    IF ID EX ME WB D
  IF ID EX ME WB C

Scrivere il numero totale di stalli inseriti nel programma: 18

Calcolare il CPI asintotico ottenuto:

CPIAS = (num. stalli + CI) / CI = (18 + 10 ) / 10 = 2,8

Calcolare il Throughput (espresso in MIPS) asintotico del programma corrispondente:

MIPSAS = fCLOCK /(CPIAS* 106) = (200 * 106 ) / (2,8* 106 ) = 71,43


ESERCIZIO 3 (FACOLTATIVO) 5 punti

Si consideri una generica iterazione del ciclo precedente eseguita dal processore MIPS nel quale
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.
Individuare i conflitti sui dati e i conflitti sul controllo rimasti nel programma e indicarli
nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire in modo da risolvere i conflitti presenti
nel programma.
Num. I STRUZI ONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 Tipo di
stalli conflitto
 
 I F I D EX ME WB
    I F I D EX ME WB D
    IF ID EX ME WB
 

 IF ID EX ME WB
    IF ID EX ME WB D
    IF ID EX ME WB
    IF ID EX ME WB
 
 IF ID EX ME WB
 

 IF ID EX ME WB
    IF ID EX ME WB
  IF ID EX ME WB C

Scrivere il numero totale di stalli rimasti nel programma: 3

Calcolare il CPI asintotico ottenuto:

CPIAS = (num. stalli + CI) / CI = (3 + 10 ) / 10 = 1,3

Calcolare il Throughput (espresso in MIPS) asintotico del programma corrispondente:

MIPSAS = fCLOCK /(CPIAS* 106) = (200 * 106 ) / (1,3 * 106 ) = 153,85


Universit degli Studi di Milano
Corso Architettura degli elaboratori e delle reti
Prof. Cristina Silvano
A.A. 2005/2006 Seconda prova in itinere 23 maggio 2006

Cognome: Nome: ____________________


Matricola:

Istruzioni
 Scrivere solo sui fogli distribuiti negli spazi indicati - utilizzando il retro delle pagine in caso di
necessit. Non separare questi fogli.
 vietato portare allesame libri, eserciziari, appunti e calcolatrici. Chiunque venga trovato in
possesso di documentazione relativa al corso anche se non strettamente attinente alle
domande proposte vedr annullata la propria prova.
 Non possibile lasciare laula conservando il tema della prova in corso.
ESERCIZIO 1 (10 PUNTI)
Tradurre in un linguaggio ad alto livello a scelta (C, Pascal, Java ecc.) la seguente porzione di codice
assembly del processore MIPS. I simboli sono costanti a 16 bit,
prefissate.
SOLUZIONE BANALE:


    
 
   
         
 !"#$%%&   '
#$%%&( )
 !"*$%%+   '
*$%%+( )
# ,!#*   , '
#'
*
 - *     .  *
 ,/##*   '
#'
#0'
*
,"#$%%&   $%%&( )'
#
1        
* ,/**#   '
*'
*0'
#
,"*$%%+   $%%+( )'
*
 1        
 ,"
$%%2   $%%2( )
 ,"
$%%   $%%( )
       33
 1        

Codice ad alto livello corrispondente:
SOLUZIONE:




 
  
 
   
 
   
 
   

 
 
 
 
 

ESERCIZIO 2 (10 PUNTI)
Si scriva in linguaggio assembly del processore MIPS una procedura che calcola ricorsivamente il
Massimo Comun Divisore di due numeri interi positivi come:

425642
, 566, 5767
42565, 6
42566, 5

Si assuma che i parametri di ingresso 56 siano stati caricati dal chiamante nei registri   e
che il valore calcolato sia restituito dalla procedura nel registro $v0.
!"#$%&" '
42  ,8,8#  !! 9,9:
 ,"
;,8   ,!' 
/
-
,,
 ,",8  ,!' !<
= - 5
 ,",8   ,!' !<
= - 6
  >?@A   , 57,!>?@A
  BC   , 5 67,!BC
 '


 1
 

>?@A
  
B>  , 57 6,!B>
 ,!
  
AD&?

B4
=
 1!42

 1

AD&?= ' 
 = ' 
 = ' 
 1B4

B> 
 '

 1

BC
 '

 1


 !"
;,8  
8
, - 
/
-
,,
 !",8   
8
, - 5
 !",8   
8
, - 6
  ,8,8#   !! 9,9:
 1

    

- !9E =- 
Universit degli Studi di Milano
Corso Architettura degli elaboratori e delle reti - Turno 1
Prof. Cristina Silvano
A.A. 2005/2006 Terza prova in itinere 13 giugno 2006

Cognome: Nome: ____________________

Matricola: Anno di corso:____________


Istruzioni
 Scrivere solo sui fogli distribuiti negli spazi indicati - utilizzando il retro delle pagine in caso di
necessit. Non separare questi fogli.
 vietato portare allesame libri, eserciziari, appunti e calcolatrici. Chiunque venga trovato in possesso
di documentazione relativa al corso anche se non strettamente attinente alle domande proposte
vedr annullata la propria prova.
 Non possibile lasciare laula conservando il tema della prova in corso.

ESERCIZIO 1 (10 punti)


Si consideri un calcolatore in grado di eseguire le istruzioni riportate in tabella:
Istruzione Frequenza Cicli di clock
ALU 50 2
LOAD 20 6
STORE 10 6
BRANCH 10 4
JUMP 10 4

1. Calcolare il CPI medio nel caso (1) supponendo di usare una frequenza di clock pari a 1 GHz

CPI1 = CPImedio = 0.5 * 2 + 0.2 * 6 + 0.1 * 6 + 0.1* 4 + 0.1 * 4 = 3.6

Quanto vale il Throughput (o frequenza di operazione), misurato in MIPS, nel caso (1)?

MIPS1 = fCLOCK /(CPI1 * 106) = (109 ) / (3.6 * 106 ) = 103 / 3.6 = 277.77

Quanto vale il tempo di esecuzione di un programma composto di 100 istruzioni?

TCPU1 = CI1 CPI1 Tclock1 = 100 * 3.6 * 1 ns = 360 ns


2. Si supponga ora che (caso 2) , la frequenza di clock sia aumentata del 20% e che siano state
introdotte le seguenti ottimizzazioni architetturali: 2 ALU che lavorino in parallelo, una cache
dati ottimizzata che comporti una riduzione di CPI delle istruzioni di LOAD/STORE del 50%
e una unit di gestione dei salti ottimizzata che comporti una riduzione di CPI delle istruzioni di
BRANCH/JUMP del 25%. Si completi la seguente tabella:

Istruzione Frequenza Cicli di clock


ALU 50 1
LOAD 20 3
STORE 10 3
BRANCH 10 3
JUMP 10 3

3. Quanto vale il CPI medio nel caso (2)?

CPI2 = CPImedio = 0.5 * 1 + 0.2 * 3 + 0.1 * 3 + 0.1* 3 + 0.1 * 3 = 2

Quanto vale il Throughput, misurato in MIPS, nel caso (2)?

MIPS2 = fCLOCK /(CPI1 * 106) = (1.2 * 109 ) / (2 * 106 ) = 600

4. Quanto vale lo Speedup (accelerazione) passando dal caso (1) al caso (2)?

Speedup = MIPS2 / MIPS1 = 600 / 277,77 = 2,16

E meglio il caso (1) o il caso (2)?

E meglio il caso (2)

5. Si supponga infine che (caso 3), rispetto al caso 2, la frequenza di clock sia ulteriormente
aumentata del 10% senza ulteriori modifiche sul CPI delle diverse istruzioni.

Quanto vale lo Speedup (accelerazione) passando dal caso 2 al caso 3?

Speedup = 1.1
ESERCIZIO 2 (10 punti)

Sia dato il seguente ciclo di un programma in linguaggio macchina MIPS. Si supponga che i registri
$6, 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 1 ns.
Si consideri una generica iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati e i conflitti sul controllo presenti nel programma e indicarli
nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire in modo da risolvere i conflitti presenti
nel programma.
Num. I STRUZI ONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 Tipo di
stalli conflitto
 
 I F I D EX ME WB
    I F I D EX ME WB D
 

 IF ID EX ME WB
    IF ID EX ME WB D
    IF ID EX ME WB D
    IF ID EX ME WB D
    IF ID EX ME WB
 
 IF ID EX ME WB D
 

 IF ID EX ME WB D
 
 IF ID EX ME WB D
    IF ID EX ME WB
  IF C

Scrivere il numero totale di stalli inseriti nel programma: 18

Calcolare il CPI asintotico ottenuto:

CPIAS = (num. stalli + CI) / CI = (18 + 11 ) / 11 = 2,64

Calcolare il Throughput (espresso in MIPS) asintotico del programma corrispondente:

MIPSAS = fCLOCK /(CPIAS* 106) = (109 ) / (2,64* 106 ) = 378,79


ESERCIZIO 3 (FACOLTATIVO) 5 punti

Si consideri una generica iterazione del ciclo precedente eseguita dal processore MIPS nel quale
siano state introdotte le seguenti ottimizzazioni:
- Scheduling delle istruzioni
- 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.
Individuare i conflitti sui dati e i conflitti sul controllo rimasti nel programma e indicarli
nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire in modo da risolvere i conflitti presenti
nel programma.

Num. I STRUZI ONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 C16 C17 Tipo di
stalli conflitto
 
 I F I D EX ME WB
 

 I F I D EX ME WB
    IF ID EX ME WB
    IF ID EX ME WB
    IF ID EX ME WB
    IF ID EX ME WB
    IF ID EX ME WB
 
 IF ID EX ME WB
 

 IF ID EX ME WB
 
 IF ID EX ME WB
    IF ID EX ME WB
  IF C

Scrivere il numero totale di stalli rimasti nel programma: 1

Calcolare il CPI asintotico ottenuto:

CPIAS = (num. stalli + CI) / CI = (1 + 11 ) / 11 = 1,09

Calcolare il Throughput (espresso in MIPS) asintotico del programma corrispondente:

MIPSAS = fCLOCK /(CPIAS* 106) = ( 109 ) / (1,09 * 106 ) = 917,43

Calcolare lo SpeedUp rispetto al caso precedente (Esercizio 2)

SpeedUp = MIPS AS ES3 / MIPS AS ES2 = 917,43 / 378,79 = 2,42


ESERCIZIO 3
Tradurre in un linguaggio ad alto livello a scelta (C, Pascal, Java ecc.) la seguente porzione di codice
assembly del processore MIPS. I simboli e sono costanti a 16
bit, prefissate.
      
  

   
 
     
 
   
 
        
   !""#   $%
!""#&' 
   (!"")   $%(
!"")&' 
  *(   *$% $%(
+

  ,(   *-
+( 
  * (!""#   !""#&'
$%( 
  * !"".   !"".&'
 
  /0     0 
(  * !"")   !"")&'
$% 
  * !""   !""&'
 
0  0   11 
  /       

       
  

 
 
2-
3$#&'+$)&'

$#&'$)&' 
$.&' 

*

$)&'$#&' 
$&' 

11 

ESERCIZIO 4
Si scriva in linguaggio assembly del processore MIPS la seguente procedura  che
modifica direttamente in memoria i vettori VETTA; VETTB e VETTC indicando esplicitamente in
assembly i parametri che vengono passati alla procedura:

 !" !" !" # 
$%
&'()* $)++%
  
!+,"'!"+#)
  !+,"'!"+-#)
  !+,"'!"+.#)


SOLUZIONE:



$$ /0/01,- 2334345
6/7/0%  238 
6/(./0%  23#
6/,(/0%  23 $

   /9/(/(
:   ;</9/,=
   36/-
/9%
   36/>
/9%
   36/.
/9%
   /-/-# 
   />/># 
   />/>#
/./.# 
   /./.# 
/./.# 
/./.# 
/9/9. 
   6/-
/9%
   6/>
/9%
   6/.
/9%
   ?:  

   36/7/0%  20 8 
36/(./0%  20 #
36/,(/0%  20  $
/0/0,- 2334345
   ?/

=
ESERCIZIO 5

Sia dato il seguente ciclo di un programma in linguaggio macchina MIPS. Si supponga che i registri
$6, e $7 siano stati inizializzati rispettivamente ai valori 4 e 4N+4. I simboli BASEA, BASEB,
BASEC e BASED sono costanti a 16 bit, prefissate. Il ciclo di clock del processore vale 2 ns.

Si consideri una singola iterazione del ciclo eseguita dal processore MIPS in modalit pipeline a 5
stadi senza ottimizzazioni.
Individuare i conflitti sui dati di tipo RAW (Read After Write) e i conflitti sul controllo presenti
nel programma e indicarli nellultima colonna.
Inserire nella prima colonna il numero di stalli da inserire prima di ciascuna istruzione in modo
da risolvere i conflitti presenti nel programma.

Num. I STRUZI ONE C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 C12 C13 C14 C15 Tipo di
stalli conflitto
   )#4# I F I D EX ME WB
(  I F I D EX ME WB D
(  0 IF ID EX ME WB D
 5 IF ID EX ME WB
 (. IF ID EX ME WB
 * )#4# IF ID EX ME WB
 *  )#4) IF ID EX ME WB
 * )#4. IF ID EX ME WB
 * ()#4 IF ID EX ME WB
 0 IF I D EX ME WB
( ,   IF ID EX ME WB D
( 67" IF ID EX ME C

Scrivere il numero totale di stalli inseriti in una singola iterazione del programma:

12

Calcolare il CPI ottenuto asintoticamente (N cicli):

CPIAS = (num. stalli + CI) / CI = (12 + 11) / 11 = 2,09

Calcolare il Throughput (espresso in MIPS) ottenuto asintoticamente (N cicli):

MIPSAS = fCLOCK /(CPIAS* 106) = (500 * 106 ) / (2,09 * 106 ) = 239,23


ESERCIZIO 6 (FACOLTATIVO)
Si consideri una cache a set associativa a 4 vie da 128 KByte e blocco da 128 bit (16 Byte)
Calcolare il numero di blocchi presenti nella cache:

Dim. Cache/ Dim. Blocco = 128 K Byte / 16 Byte = 8 K blocchi


Calcolare il numero di insiemi presenti nella cache:

Dim. Cache / (Dim. Blocco * 4) = 2 K insiemi


Calcolare il numero di blocchi per insieme:

4 blocchi
Calcolare il numero di comparatori necessari:

4
Si consideri la struttura dellindirizzo di memoria (32 bit).
Calcolare il numero di bit necessari per lo spiazzamento (offset) del byte nella parola:

2 bit
Calcolare il numero di bit necessari per lo spiazzamento (offset) della parola nel blocco:

2 bit
Calcolare il numero di bit di indice:

11 bit
Calcolare il numero di bit per letichetta (tag):

17 bit