Newsgroup: it.comp.hardware.cpu
Titolo: Domanda sull'architettura dei processori.

Cosa e' un branch prediction?
--
Ciao
Tomalak
www.alientech.it
"Victory is life"

 --
branch prediction = previsione di salto
Ha particolare importanza in relazione agli stadi di pipeline della cpu ,
vedi il P4 prescott.
Ciao
Renato

E' una tecnica di ottimizzazione adottata sulle istruzioni di salto
condizionato a basso livello di un processore che implementa un'architettura
multiciclo.
Il processore cerca di "prevedere" calcolando in un particolare modo
l'indirizzo di salto utilizzando l'operazione di Branch (ovvero di salto)
calcolando lo spiazzamento in modo più efficiente.
Ogni istruzione in un processore è una sequenza di 5 microistruzioni.
1. Fetch : fase di prelevamento dell'istruzione dal registro istruzioni.
2. Dec/Load: fase di decodifica del tipo di istruzione e Load: caricamento
operandi nei registri della ALU (coprocessore matematico)
3. Exe: esecuzione dell'istruzione (ovvero calcolo nella ALU)
4. Store: scrittura del risultato (solo per istruzioni di tipo R)
5. WriteBack
In sintesi si basa sul fatto che in ogni caso anche se nella fase di
esecuzione (dell'istruzione) il salto non si dovesse fare, l'indirizzo di
salto viene cmq calcolato poiché le istruzioni di salto non prevedono l'uso
della ALU(ovvero dell'unita di calcolo del processore....il coprocessore
matematico se volete) in questo modo viene sfruttata una parte della
sequenza istruzioni altrimenti "sprecata".
Ovvero poiché la struttura pipeline permette di non sprecare neanche un
singolo ciclo di processore in questo modo nello stesso ciclo di clock viene
effettuato un calcolo che "potrebbe" servire oppure no.
Scusami ma non so spiegarlo più facilmente.  :-P
In generale la struttura dei processori moderni segue l'implementazione
MIPS32 e ti consiglio di dare un'okkiata a questi siti:
http://dcl.isti.cnr.it/Documentation/ateach/arch1/materialeArch1/parte5/paragrafo_54.html
http://www.pmar.it
"Tomalak" <toma...@NONlibero.it> ha scritto nel messaggio
news:AA9dc.114960$Kc3.3...@twister2.libero.it...


 --
Allora, prima di tutto le macchine con pipeline acquisiscono (fetch)
l'istruzione successiva prima di aver completato l'esecuzione di quella
corrente. Se quella corrente prevede una derivazione (salto), allora è
possibile che l'istruzione successiva sia stata recuperata dall'area di
memoria sbagliata. La branch prediction è una tecnica che cerca d'indovinare
quale sarà l'indirizzo appropriato per la prossima istruzione, sapendo
unicamente l'indirizzo di quella corrente. A questo scopo si utilizza una
memoria associativa chiamata BTB (Branch Target Buffer). La maggior parte
dei processori recuperano ed eseguono le istruzioni una dopo l'altra.
Talvolta, però, queste non vengono eseguite nello stesso ordine con cui sono
registrate in memoria. Quando il flusso sequenziale viene interrotto per
eseguire una porzione di codice diversa si verifica il cosiddetto "branch" o
salto la cui presenza può introdurre ritardi nell'esecuzione e ridurre le
prestazioni. Se il processore conosce in anticipo il verificarsi di un salto
e l'indirizzo a cui saltare, può recuperare in prestazioni. Questo è
difficile da realizzare perché la decisione di salto viene presa nel momento
in cui si arriva a quel particolare punto del programma. Tuttavia tenendo
una storia di quanto è avvenuto nel passato si può predire il futuro e la
funzione di branch prediction interna a processori (anche i primi Pentium
erano dotati di una unità del genere) serve a questo scopo. Una branch
prediction ben progettata può azzeccare le previsioni di salto 9 volte su 10
e in tal modo determinare un miglioramento di prestazioni del 25%.
Ciao