Vai al contenuto

Primario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Secondario: Sky Slate Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Marble
Sfondo: Blank Waves Squares Notes Sharp Wood Rockface Leather Honey Vertical Triangles
Corsi di Laurea










ROX @ Unisa - Forum degli studenti di Ingegneria utilizza i cookie. Se prosegui la navigazione accetti il loro uso.    Accetto l'uso dei cookie
-->
Foto

Esercizio Con HitRate


  • Effettua l'accesso per rispondere
Questa discussione ha avuto 10 risposta/e

#1
dome88

dome88

    Advanced Member

  • Utente
  • StellaStellaStella
  • 113 Messaggi:
Ciao a tutti....

Stavo facendo gli esercizi per il compito di calcolatori
Nel file Prove d'esame ho trovato questo esercizio

Se qualcuno di voi l'ha fatto mi potrebbe dare una dritta su come ragionare per svolgerlo correttamente??

1. Un programma viene compilato da 2 compilatori diversi che producono due codici eseguibili con le seguenti caratteristiche:
 
Codice 1:
18 istruzioni di load
16 istruzioni di store
18 istruzioni di salto
48 istruzioni logico-aritmetiche.
 
Codice 2:
25 istruzioni di load
20 istruzioni di store
12 istruzioni di salto
43 istruzioni logico-aritmetiche.

I due codici vengono eseguiti da un calcolatore costituito dal processore MIPS e da una memoria cache con una hit rate pari a 0.96 per le istruzioni e 0.83 per i dati per il primo programma e di 0.93 e 0.88, rispettivamente per le istruzioni e per i dati, per il secondo programma. In caso di fallimento, l’accesso alla memoria centrale richiede 10 cicli di clock.
Quale dei due programmi viene eseguito più velocemente dal calcolatore considerato?


Poi non mi è molto chiaro quando da i dati...es 0.96 e 0.83 Che cosa sono, percentuali??? :help: :help:



#2
|system88|

|system88|

    Moderatore globale

  • Moderatore
  • 4133 Messaggi:
sono millisecondi, rappresentano il tempo d'accesso. L'esercizio non è complicato, devi considerare ogni istruzione quanti millisecondi impiega e poi moltiplicare il risultato per il n° di volte che viene eseguita l'istruzione stessa. Fai questo per entrambi i codici e confronti i risultati; il codice che impiega il tempo minore rappresenta il programma che viene eseguito più rapidamente
Esistono solo due modi per scrivere un programma senza errori.
Ma e' solo il terzo modo quello che funziona realmente.

#3
dome88

dome88

    Advanced Member

  • Utente
  • StellaStellaStella
  • 113 Messaggi:
Grazie System!
Allora ho capito più o meno quello che dici,
Purtroppo nella traccia non c'è scritto che sono millisecondi...ai voglia di scervellarmi con le percentuali!!



L'istruzione deve per prima cosa essere prelevata dalla memoria tramite l'indirizzo del pc, quindi per tutte le istruzioni cmq devo fare un'accesso alla cache istruzione nella fase di fetch...

per le load e le store invece ho sia un'accesso alla cache istruzioni sia alla cache dati?

Codice 1
load
0.96 + 0.88 * 18 +
store
0,96 + 0,88 *16 +
branch
0,96 * 18 +
Aritmetiche
0,96*48 = 125.92 ms

MM però non è che sono convinto più di tanto!

#4
|system88|

|system88|

    Moderatore globale

  • Moderatore
  • 4133 Messaggi:
Sul libro c'è un capitolo dedicato o cmq dovrebbero esserci delle slide sul sito del prof. Ad ogni modo, se non ricordo male, ci dovrebbe essere una tabella che riporta con precisione i formati delle istruzioni. Di più non so dirti perchè è passato un po' di tempo da quando ho fatto l'esame e, tra le tante cose, questo argomento non era oggetto d'esame per me!

P.s. cancella quello che t'ho detto.. ho riletto meglio la traccia e mi sono confuso con un altro tipo di esercizio. I numeri che ti sono indicati sono espressi in percentuale (avevi intuito bene) e non sono millisecondi! Per risolvere l'esercizio devi procedere così:

1) hai le percentuali di successo e il numero di volte che viene ripetuta l'istruzione, in base a ciò, quindi, ti calcoli quante volte c'è un fallimento.
2) Quando si verifica il fallimento aggiungi ai cicli di clock che avevi fino ad ora contato quelli necessari per l'accesso alla memoria centrale, cioè 10, e fai questo per tutte le istruzioni
Esistono solo due modi per scrivere un programma senza errori.
Ma e' solo il terzo modo quello che funziona realmente.

#5
dome88

dome88

    Advanced Member

  • Utente
  • StellaStellaStella
  • 113 Messaggi:
Si grazie, credo di aver capito abbastanza...

c'è solo un piccolo dubbio,
Per i dati...cioè devo calcolarmi i cicli di stallo solo sulla percentuale delle load e store???

#6
|system88|

|system88|

    Moderatore globale

  • Moderatore
  • 4133 Messaggi:
direi di si, xkè il resto delle operazioni lo fai solo sulle istruzioni, le uniche due operazioni coinvolte con i dati sono la load e la store, effettivamente! Ma se mandi un'e-mail a Marcelli chiedendogli chiarimenti son sicuro che ti risponda!
Esistono solo due modi per scrivere un programma senza errori.
Ma e' solo il terzo modo quello che funziona realmente.

#7
dome88

dome88

    Advanced Member

  • Utente
  • StellaStellaStella
  • 113 Messaggi:
ciao,

Ho risfogliato il capitolo del libro sulla memoria e in un paragrafo faceva un esercizio del genere....

la miss rate per le istruzioni la calcola su tutto l'insieme delle istruzione, mentre poi per calcolare i cicli di miss per i dati ipotizza che il 36% dell'insieme di Istruzioni del programma sia costituita da load e store e quindi fa

cicli di miss per i dati = I x 36% x 4% x 100

dove I è l insieme di istruzioni
36% di load e store
4% di miss rate per cache dati
100 cicli di clock di miss penality

Quindi credo che sia così, cioè le miss per i dati si calcolano solo sulla percentuale di load e store che costituiscono il programma..

Cmq provo a mandare una email al prof per sicurezza!
Grazie Mille!! :ciao:

#8
|system88|

|system88|

    Moderatore globale

  • Moderatore
  • 4133 Messaggi:
Ne sono quasi certo anche io, il ragionamento non fa una piega... La conferma del prof chiarirà gli ultimi dubbi! ;)
Esistono solo due modi per scrivere un programma senza errori.
Ma e' solo il terzo modo quello che funziona realmente.

#9
Emma

Emma

    Advanced Member

  • Utente
  • StellaStellaStella
  • 407 Messaggi:
allora l'esercizio ti fornisce hit rate per dati e istruzioni diversi per i due codici:
codice1
hit rate per le istruzioni 0.96
miss rate 0.04

hit rate per i dati 0.83
miss 0.17

andiamo a calcolare il CPI per ogni istruzione:

load:
fetch : 1*0.96+10*0.04= 1.96
decode: 1
calcolo in.mem: 1
accesso al dato: 1*0.83+10*0.17 =2.53
scrittura reg.: 1
CPI= 6.89

Store
fetch : 1*0.96+10*0.04= 1.96
decode: 1
calcolo in.mem: 1
accesso al dato: 1*0.83+10*0.17 =2.53
CPI= 5.89

Salto
fetch : 1*0.96+10*0.04= 1.96
decode: 1
calcolo dell'indrizzo: 1
CPI = 3.36

aritmetico logiche:
fetch : 1*0.96+10*0.04= 1.96
decode: 1
esecuzione: 1
scrittura risultato: 1
CPI = 4.36

partendo da queste premesse possiamo calcolare il tempo di esecuzione del codice1:

 
Codice 1:
18 istruzioni di load
16 istruzioni di store
18 istruzioni di salto
48 istruzioni logico-aritmetiche.


T1= (18*6.89)+(16*5.89)+(18*3.36)+(48*4.36)= 124.02+94.24+60.48+209.28=488

si fa la stessa cosa col codice 2 calcoliamo la CPI di ogni tipo di istruzione,tenendo in considerazione il relativo hit rate e miss rate, infine andiamo a calcolare il tempo T2.
Secondo i miei calcoli T1 viene eseguito più velocemente di T2
  • A grausof piace questo post
" L'immaginazione è la derivata dell'intelligenza"

#10
grausof

grausof

    Member

  • Utente
  • StellaStella
  • 15 Messaggi:

allora l'esercizio ti fornisce hit rate per dati e istruzioni diversi per i due codici:
codice1
hit rate per le istruzioni 0.96
miss rate 0.04

hit rate per i dati 0.83
miss 0.17

andiamo a calcolare il CPI per ogni istruzione:

load:
fetch : 1*0.96+10*0.04= 1.96
decode: 1
calcolo in.mem: 1
accesso al dato: 1*0.83+10*0.17 =2.53
scrittura reg.: 1
CPI= 6.89

Store
fetch : 1*0.96+10*0.04= 1.96
decode: 1
calcolo in.mem: 1
accesso al dato: 1*0.83+10*0.17 =2.53
CPI= 5.89

Salto
fetch : 1*0.96+10*0.04= 1.96
decode: 1
calcolo dell'indrizzo: 1
CPI = 3.36

aritmetico logiche:
fetch : 1*0.96+10*0.04= 1.96
decode: 1
esecuzione: 1
scrittura risultato: 1
CPI = 4.36

partendo da queste premesse possiamo calcolare il tempo di esecuzione del codice1:


T1= (18*6.89)+(16*5.89)+(18*3.36)+(48*4.36)= 124.02+94.24+60.48+209.28=488

si fa la stessa cosa col codice 2 calcoliamo la CPI di ogni tipo di istruzione,tenendo in considerazione il relativo hit rate e miss rate, infine andiamo a calcolare il tempo T2.
Secondo i miei calcoli T1 viene eseguito più velocemente di T2

 

Scusate se riapro dopo 2 anni. 

Nel caso in cui non viene specificata la HR per le istruzioni e quella per i dati, ma solo la HR della cache di primo e secondo livello, si procede allo stesso modo? Ovviamente prendendo sempre in considerazione la stessa HR sia per le istruzioni che per i dati?

 

Esempio per le istruzioni di load:

Cache L1: HitRate=0.83 MissRate=0.17

Cache L2: HitRate=0.9  MissRate=0.1  Tempo di accesso=3 volte L1

Mem Centrale: tempo di accesso=15 volte L1

 

load:

fetch : 1*0.83+3*0.17*0.9+15*0.17*0.1= 1.544
decode: 1
calcolo in.mem: 1
accesso al dato:  1*0.83+3*0.17*0.9+15*0.17*0.1= 1.544
scrittura reg.: 1
CPI= 6.088

 

Giusto? Inoltre per quale motivo la load ha un CPI in più rispetto la store? Vedendo i risultati delle slide load e store così come Al e salto hanno gli stessi CPI! Poi perchè calcolare i colpi di clock di ogni fase se il processore è in pipeline?



#11
Ryuji

Ryuji

    Advanced Member

  • Utente
  • StellaStellaStella
  • 523 Messaggi:

Non è specificato che il processore è pipeline, penso che ci si riferisca alla versione multiciclo del MIPS.

 

Se non viene specificata una hit rate diversa per istruzioni e dati sì, si fa per forza come hai scritto tu!

 

 

La load ha un CPI maggiore rispetto alla store perché deve fare anche la fase di WriteBack, che la store non ha (fa solo fetch, decode, execute e memory).

 

Per il resto non saprei dirti XD






Leggono questa discussione 0 utenti

0 utenti, 0 ospiti, 0 utenti anonimi