Architetture dei processori/Pipeline: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Hellisp (discussione | contributi)
Hellisp (discussione | contributi)
Riga 16:
 
*Il primo problema deriva dal lavoro parallelo delle unità.
[[Image:Pipeline-4.png|thumb|right|350px|Notare come l'istruzioe rossa fornisce il risluatato dell'operazione direttamente al ciclo successivo per permettere all'istruzione gialla di essere eseguita senza rallentamenti]]
Supponiamo che la CPU con pipeline debba eseguire il seguente frammento di codice:
# A+B=C (istruzione rossa)
# C-1=D (istruzione gialla)
La prima istruzione deve prelevare i numeri contenuti nelle variabili A e B, sommarli e porli nella variabile C. La seconda istruzione deve prelevare il valore contenuto nella variabile C, sottrarlo di uno e salvare il risultato in D. Ma la seconda istruzione non potrà essere elaborata (EX) fino a quando il dato della prima operazione non sarà disponibile in memoria (MEM) e quindi la seconda operazione dovrà bloccarsi per attendere il completamento della prima e quindi questo ridurrà il throughput complessivo. Questo problema viene affrontata implementando all'interno dei registri a doppia porta. Questi registri sono in grado di riportare i risultati appena elaborati alle istruzioni successive senza dover attendere il loro salvataggio in memoria. Quindi una volta eseguita la fase 3 (fase EX della pipeline) i risultati possono essere utilizzati dalla istruzione successiva. Quindi seguendo l'esempio sopra esposto alla fine del terzo ciclo di clock il risultato dell'operazione A+B=C può essere utilizzato dalla operazione successiva (C-1=D) che essendo solo al suo ciclo di clock è ancora nella fase di decodifica e quindi non viene rallentata. Questa propagazione all'indietro dei risultati permette di eliminare gli stalli di elaborazione o comunque permette di limitarli fortemente.