>
> Se stiamo parlando di tempo di elaborazione di una singola istruzione
> aggiungo che dipende anche da dove si trovano le istruzioni e dalla
> lunghezza del pipeline.
supponiamo un'istruzione di addizione tra due interi che si trova in RAM
(sia l'istruzione che gli operandi). quindi fetch dell'iustruzione (e
degli operandi), eventuale decodifica dell'istruzione e sua esecuzione.
Non so esattamente come funziona la pipeline ma immagino che se anche il
fetch dei due operandi potesse essere contemporaneo e anche ammettendo
che i tempi di decodifica ed esecuzione dell'istruzione
siano trascurabili
(magari ammettendo che il risultato possa restare nei registri senza
dover essere scritto in RAM) si dovrebbe avere che almeno un paio di
accessi in RAM sono necessari (almeno uno per il fetch dell'istruzione e
uno per il fetch degli operandi, [ammesso che sia possible prenderli
entrambi con un solo fetch]).
Ora nel documento che avevo linkato io, il tempo per un fetch in RAM
veniva dato pari a 10 nanosecondi, come ordine di grandezza. Quindi il
tempo per due fetch dovrebbe essere ancora dell'ordine dei 10
nanosecondi, come ordine di grandezza.
Pero' non so se questi tempi di accesso (10 nanosecondi) siano
attendibili per le CPU/RAM attuali.
> Il tempo di servizio di un'istruzione (che e' il parametro target sulle
> cpu moderne) si misura in frazioni di cicli ci clock :)
posso anche capirlo, ma mi sa che e' vero se si hanno 10 milioni di
istruzioni da eseguire;
se le parallelizzi, magari mediamente in un unico ciclo di clock esegui
piu' di una istruzione, pero' se hai una sola istruzione da eseguire,
mi sa che in meno di un ciclo di clock non esegui niente (*).
Poi mi sa che se devi fare un accesso in RAM per prendere un parametro
un ciclo di clock non basta.
In ogni caso se devo prendere un dato in RAM per eseguirci
sopra delle elaborazioni devo sapere quale e' il tempo di accesso alla RAM.
Poi puo' darsi che non sia molto significativo per valutare
l'architettura della macchina, come dice enoquick ma magari puo' esserlo
per valutare la bonta' della RAM, almeno immagino che sia ancora cosi'.
E credo che anche la velocita' della pura esecuzione
dell'operazione (senza considerare il fetch e la decodifica) abbia un
peso, perche' se la/le CPU sono in grado di eseguire l'operazione
a 10 picosecondi magari i 10 milioni di operazioni parallele
riesco a terminarli prima che non nel caso in cui l'esecuzione avvenga
in 100 picosecondi (va beh, si puo' sempre dire che e' piu' facile
aumentare di 10 volte il grado di parallelismo che non diminuire
di 10 volte il tempo di esecuzione della singola istruzione, non lo
so.).
Ciao,
Marco.
(*)anzi, ai miei tempi si diceva che se il tempo di propagazione
del segnale di clock a tutte le componenti dell'architettura non e'
trascurabile rispetto al periodo di clock, praticamente non funziona
niente, perche' operazioni che teoricamente dovrebbero essere
contemporanee in corrispondenza dell'arrivo del segnale di clock
sarebbero in realta' "sfasate" nel tempo. E per dimensioni
caratteristiche dei transistor dell'ordine dei micron [che erano
le dimensioni della base dei transistor dell'epoca] si diceva che
gia' frequenze di 1 Ghz potevano dar luogo a problemi di questo
tipo. Se oggi esistono clock a 3-4 Ghz, probabilmente significa che
sono anche diminuite le dimensioni caratteristiche dei transistor
[immagino che oggi la lunghezza della base di un transistor non
sia piu' di 1 micron ma che sia di decine o al massimo centinaia di
nanometri, ma anche su questo non sono aggiornato. Tra l'altro per
dimensioni cosi ridotte potrebbero non essere trascurabili effetti
quantistici come l'effetto tunnel.