[Generico] tempo di esecuzione di una istruzione macchina in una pipeline

Gol_D_Roger
Salve, ho un problema su questa domanda:

Si consideri un microprocessore con architettura RISC, 8 stati di pipeline e un clock di 2.5 Ghz e si supponga di lavorare in condizioni ideali.

-Indicare il tempo di esecuzione (in nanosecondi) di una singola istruzione macchina.

Il mio procedimento è questo:

$ 1/(2.5*10^9) =2.5*10^-9 sec=0.0000000025 sec * 10^9 = 25000000000 $

ma sicuramente mi viene un numero troppo alto. Potreste gentilmente aiutarmi?

Grazie in anticipo.

Risposte
vict85
Ricontrolla i calcoli: \(1ns = 10^{-9}s\)...

Comunque stai ignorando gli stati di pipeline. Non conosco bene la teoria relativa ai processori, quindi non posso indicarti come usare questo dato.

insideworld
$1/(2.5 *10^9)=1/(2.5)*10^(-9)s=0.4*10^(-9)s$
sapendo che $10^(-9)$ $s$ $=1$ $ns$
hai $0.4$ $ns$
o se preferisci al posto della $s$ di secondi scrivi:$s=10^9 ns$
il risultato rimane $0.4*10^(-9) *10^9 $ns=$ 0.4$ $ns$
Ciao :D
EDIT formula

probid
Comunque stai ignorando gli stati di pipeline. Non conosco bene la teoria relativa ai processori, quindi non posso indicarti come usare questo dato.

In condizioni ideali si può parallelizzare l'esecuzione delle istruzioni in maniera tale che nello stesso ciclo di clock in cui l'$i$-esima si trova nello stadio $j$-esimo, la $(i+1)$-esima possa essere elaborata nel $(j-1)$-esimo, evitando di attendere il completamento dell'altra per iniziare ad essere eseguita.

Quindi mentre la prima istruzione richiede necessariamente il tempo per attraversare tutti gli 8 stati ($0.4ns \cdot 8 = 3.2ns$), le successive saranno elaborate contemporaneamente tranne che per l'ultimo stadio, con un tempo aggiuntivo per ciascuna ridotto ad un solo ciclo di clock ($0.4ns$).

Ciao!

apatriarca
Il tempo di esecuzione di una singola istruzione sarà comunque sempre 8 cicli e rimane tale anche se fa parte di un grosso numero di istruzioni. Questo valore è infatti totalmente indipendente dallo stato delle altre istruzioni. Quello che cambia è il tempo di esecuzioni di \(n\) istruzioni. Detta in altro modo, il fatto di usare una pipeline non cambia la latenza, cioè il tempo che passa tra l'inizio di una istruzione e la sua fine, ma varia il throughput, cioè il numero di istruzioni che il processore è in grado di eseguire in una certa unità di tempo. In effetti la latenza sarà potenzialmente maggiore perché il tempo delle varie fasi della pipeline è uguale alla fase più lenta. In alcuni casi (in cui le istruzioni presentano grande dipendenza tra di esse e/o il processore non è capace di riordinare le istruzioni) una pipeline può quindi ridurre le performance invece di aumentarle.

insideworld
E' come dice @apatriarca, anche io mi ricordo così, era una di quelle domande trabocchetto...
mediamente ed in condizioni ideali si finisce di eseguire una istruzione ogni colpo di clock, però ciascuna istruzione ha impiegato 8 colpi di clock per essere eseguita

Albesa81
Nessun trucco, nessun trabocchetto.
Semplicemente, la pipeline riserva uno stadio per ogni istruzione e quindi, in condizioni ideali, ne "porta avanti" da 0 a N nello stesso istante (dove N è il numero massimo di istruzioni gestibili in contemporanea).

insideworld
Il trabocchetto c'è quando non si capisce bene il funzionamento... :-D
se si capisce bene la struttura e il funzionamento della pipeline non ci sono problemi.

IMHO vedendo che (sempre in condizioni ideali ) il processore riesce a smaltire 10 istruzioni in 10 colpi di clock potrebbe venire da pensare che ogni istruzione viene eseguita in un tempo di clock, invece non è così, perchè, come hai detto tu
la pipeline riserva uno stadio per ogni istruzione e quindi, in condizioni ideali, ne "porta avanti" da 0 a N nello stesso istante (dove N è il numero massimo di istruzioni gestibili in contemporanea).

:smt023

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.