Estratto del documento

Pipeline

La pipeline è una tecnica di implementazione nella quale multiple strutture sono sovrapposte durante l'esecuzione. Tutti gli step della pipeline sono detti stages. Approcciare questa tecnica fa risparmiare più tempo nell'esecuzione di più istruzioni nel linguaggio MIPS (per esempio). Questo è dovuto grazie al lavoro in parallelo. Generalmente, il pipelining funziona se i lavori da eseguire sono molto simili tra di loro ed impiegano in media lo stesso tempo. L'accelerazione dell'esecuzione è data dal numero di stages nella pipeline.

In MIPS abbiamo solitamente 5 stages:

  • Prendere istruzioni dalla memoria (IF);
  • Leggere i registri e decodificare l'istruzione (ID);
  • Eseguire l'operazione (EX);
  • Accedere ad un operando nella memoria dati (MEM);
  • Scrivere il risultato nel registro destinazione (WB).

Quindi il pipelining incrementa le prestazioni, aumentando il numero d'istruzioni in un singolo clock cycle e decrementando il tempo di esecuzione di una singola istruzione.

Pipeline hazard

Ci sono situazioni in cui avvengono errori nella pipeline, a causa dei quali non possiamo eseguire l'istruzione successiva nel successivo colpo di clock. Questi errori vengono chiamati hazards. Esistono 3 tipi di hazards:

  • Structural hazards;
  • Data hazards;
  • Control | Branch hazards.

Structural hazard

Il structural hazard avviene quando cerchiamo di eseguire più istruzioni nello stesso ciclo di clock, e per questo motivo il nostro programma per la pipeline verrebbe sventato. Fortunatamente questo hazard non capiterà mai poiché proprio la stessa architettura MIPS è progettata per eseguire pipelining.

Data hazard

Il data hazard avviene quando uno step deve aspettare il compimento di un altro step. Si supponga di avere due add (operazioni MIPS) da eseguire.

add $s0, $t0, $t1
add $s1, $s0, $t2

Nel primo add, $s0 è il registro di destinazione (rd) a cui viene dato accesso solo all'ultimo stadio della pipeline (stadio WB). Nella seconda, invece, $s0 è utilizzato come registro sorgente (rs) e gli viene dato accesso nel secondo stadio. Il problema è che durante il secondo stadio, la prima add ancora non ha scritto il risultato nel registro destinazione e quindi quando lo andiamo a richiamare nel secondo add si viene a creare una situazione di stallo / blocco.

Soluzione 1

Possiamo immaginare l'output dell'ALU come input per la seconda istruzione. Per fare ciò dobbiamo modificare la circuiteria dell'hardware. Tale metodo viene detto forwarding. Il forwarding funziona solo se la prima istruzione non è una load.

Soluzione 2

Abbiamo due istruzioni.

Anteprima
Vedrai una selezione di 3 pagine su 8
Pipeline - Architettura elaboratori Pag. 1 Pipeline - Architettura elaboratori Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Pipeline - Architettura elaboratori Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher ABsintio di informazioni apprese con la frequenza delle lezioni di Architettura degli elaboratori e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma La Sapienza o del prof Mei Alessandro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community