2012-08-13 9 views

risposta

11

La previsione del ramo viene eseguita dal processore per cercare di determinare dove l'esecuzione continuerà dopo un salto condizionato, in modo che possa leggere le istruzioni successive dalla memoria.

L'esecuzione speculativa fa un ulteriore passo avanti e determina quale sarebbe il risultato dell'esecuzione delle istruzioni successive. Se la previsione del ramo era corretta, il risultato è usato, altrimenti viene scartato.

Si noti che l'esecuzione speculativa può essere applicata anche se nel codice non è presente un ramo condizionale effettivo. Il processore può determinare il risultato di diverse istruzioni che normalmente verrebbero eseguite in successione, ma l'esecuzione potrebbe essere interrotta ad esempio da un interrupt di aritmetica di overflow.

0

Beh, io sono un noob alla programmazione e all'informatica, ma questa è la mia conclusione. Lo scopo di entrambe queste "tecniche" è quello di mantenere le tubature piene, evitando lo spreco di risorse. Quando un processore esegue un'istruzione di prova condizionale, normalmente ci si aspetterebbe che esso attenda fino a quando la condizione non è stata testata prima di passare all'istruzione successiva.

Nell'esecuzione speculativa si esegue l'istruzione, in ogni caso, "sperando" che il test condizionale fosse VERO invece di arrestare la pipeline e danneggiare le risorse. Altrimenti, basta scartare i risultati.

Nella previsione ramo si fa un passo avanti e si predice se la condizione sarà VERO o meno in base ai risultati passati del test condizionale. (Si predice la direzione in cui si diramerà il programma).

Spero che chiarisca le cose. Ho le informazioni da qui e un corso che sto frequentando in questo semestre. http://www.pcguide.com/ref/cpu/arch/int/featSpeculative-c.html

0

Se si desidera fare qualcosa in modo speculativo, si aumenta la possibilità che sia utile prevedendo con precisione il percorso su cui speculare.

In alcuni casi, la previsione è banale (ad esempio, prevedere che carichi/negozi non segfault). In altri casi, è difficile (previsione dei rami).

In entrambi i casi, è necessario essere in grado di ripristinare/eliminare i calcoli speculativi se si verifica un'eccezione.


E 'possibile ipotizzare, senza la previsione, da speculativamente l'esecuzione di istruzioni da entrambe le direzioni di un ramo, e solo mantenendo il risultato dalla linea che è poi risultato essere stata la strada giusta.

L'hardware corrente non utilizza questo per i rami, ma lo stesso tipo di cosa avviene su una scala locale molto più piccola per cose come la decodifica parallela delle istruzioni x86. I decodificatori iniziano la decodifica ad ogni possibile limite di istruzioni e scoprono solo quale posizione iniziale era corretta quando la decodifica dell'istruzione precedente determina la lunghezza.