Predicazione (architettura del computer) - Predication (computer architecture)
In informatica , predicazione è una architettura caratteristica che fornisce un'alternativa al trasferimento condizionale di controllo , attuato da istruzioni macchina come la condizionale ramo , condizionale chiamata , condizionale di ritorno , e le tabelle di filiale . Predication funziona eseguendo istruzioni da entrambi i percorsi del ramo e solo ammettendo le istruzioni del percorso intrapreso per modificare lo stato architettonico. Le istruzioni del percorso intrapreso sono autorizzati a modificare lo stato di architettura perché sono stati associati ( predicano ) con un predicato , unValore booleano utilizzato dall'istruzione di controllare se l'istruzione è autorizzato a modificare lo stato architettonico o meno.
Panoramica
La maggior parte dei programmi per computer contengono condizionale codice, che sarà eseguito solo in condizioni specifiche che dipendono da fattori che non è possibile determinare in anticipo, per esempio in base all'input dell'utente. Poiché la maggior parte dei processori semplicemente eseguire la successiva istruzione in una sequenza, la soluzione tradizionale è quella di inserire ramo istruzioni che permettono ad un programma di ramo condizionale ad una sezione differente di codice, modificando così il passo successivo nella sequenza. Questo è stato sufficiente fino progettisti hanno cominciato il miglioramento delle prestazioni mediante l'attuazione di pipelining di istruzioni , un metodo che viene rallentato da rami. Per una descrizione più approfondita dei problemi sorti, e una soluzione popolare, vedi ramo predittore .
Per fortuna, uno dei modelli più comuni di codice che si basa normalmente su ramificazione ha una soluzione più elegante. Si consideri il seguente pseudocodice :
if condition
{dosomething}
else
{dosomethingelse};
In un sistema che utilizza ramificazione condizionale, questo potrebbe tradursi in istruzioni macchina cercando simile a:
branch-if-condition to label1
dosomethingelse
branch-to label2
label1:
dosomething
label2:
...
Con predicazione, tutti i possibili percorsi di filiale sono codificati in linea, ma alcune istruzioni vengono eseguite, mentre altri non lo fanno. L'idea di base è che ogni istruzione è associato con un predicato (il termine qui utilizzato in modo simile al suo utilizzo nella logica dei predicati ) e che l'istruzione viene eseguita solo se il predicato è vero. Il codice macchina per l'esempio precedente utilizzando predicazione potrebbe essere simile a questa:
(condition) dosomething
(not condition) dosomethingelse
Oltre ad eliminare rami, meno codice è necessaria in totale, purché l'architettura fornisce istruzioni predicate. Anche se questo non garantisce l'esecuzione più veloce, in generale, sarà se il dosomething e dosomethingelse blocchi di codice sono abbastanza breve.
Forma più semplice di predicazione è predicazione parziale , dove l'architettura ha mossa condizionale o selezionare condizionali istruzioni. Istruzioni di movimento condizionali scrivere il contenuto di un registro rispetto ad un altro solo se il valore del predicato è vero, mentre condizionali selezionare istruzioni scegliere quale dei due registri è il suo contenuto scritto ad un terzo in base al valore del predicato. Una forma più generalizzata e capace è piena predicazione . Predication completa ha un insieme di registri predicato per predicati stoccaggio (che consente a più rami nidificati o sequenziali da eliminare contemporaneamente) e la maggior parte istruzioni nell'architettura avere un campo registro specificatore secondo cui predicato forniture registro predicato.
vantaggi
Lo scopo principale della predicazione è per evitare sbalzi sopra molto piccole sezioni di codice di programma, aumentando l'efficacia della pipeline esecuzione ed evitare problemi con la cache di . Essa ha anche una serie di vantaggi più sottili:
- Funzioni che vengono tradizionalmente calcolate utilizzando semplici aritmetiche e operazioni bit per bit può essere più veloce per calcolare utilizzando le istruzioni predicate.
- Istruzioni predicata con diversi predicati può essere miscelato con l'altro e con il codice di incondizionata, consentendo una migliore pianificazione delle istruzioni e così prestazioni ancora migliori.
- Eliminazione delle istruzioni di salto inutili può rendere l'esecuzione di rami necessari, come quelli che compongono cicli, più veloce diminuendo il carico sul ramo predizione meccanismi.
- Eliminazione del costo di un misprediction ramo che può essere alto sulle architetture profondamente pipeline.
svantaggi
Inconveniente principale di predicazione è maggiore spazio codifica. Nelle implementazioni tipiche, ogni istruzione riserve un campo di bit per il predicato specificare in quali condizioni che l'insegnamento dovrebbe avere un effetto. Quando la memoria disponibile è limitata, come su dispositivi embedded , questo costo spazio può essere proibitivo. Tuttavia, alcune architetture come Thumb-2 sono in grado di evitare questo problema (vedi sotto). Altri svantaggi sono i seguenti:
- Predication complica l'hardware aggiungendo livelli di logica di critici percorsi e potenzialmente degrada velocità di clock.
- Un blocco predicato include cicli per le operazioni, così brevi percorsi possono richiedere più tempo ed essere penalizzati.
Predication è più efficace quando i percorsi sono bilanciate o quando il percorso più lungo è il più frequentemente eseguita, ma determinare tale percorso è molto difficile in fase di compilazione, anche in presenza di informazioni di profiling .
Storia
Istruzioni predicato erano popolari nei disegni di computer europei del 1950, tra cui il Mailüfterl (1955), lo Zuse Z22 (1955), lo ZEBRA (1958), e l'Electrologica X1 (1958). L' IBM ACS-1 disegno del 1967 attribuito un bit "saltare" nei suoi formati delle istruzioni, e il processore CDC flessibile nel 1976 assegnato tre bit esecuzione condizionali nei suoi formati microistruzione.
Hewlett-Packard s' PA-RISC architettura (1986) ha avuto una funzione chiamata nullità , che ha permesso la maggior parte delle istruzioni per essere basata dall'istruzione precedente. IBM 's architettura POWER (1990) caratterizzato da istruzioni di movimento condizionali. Il successore di POWER, PowerPC (1993), è sceso queste istruzioni. Digital Equipment Corporation 's Alpha architettura (1992) inoltre ha caratterizzato istruzioni di movimento condizionali. MIPS guadagnato istruzioni di movimento condizionali nel 1994 con la versione MIPS IV; e SPARC è stato esteso in versione 9 (1994) con istruzioni di movimento condizionali sia interi e registri a virgola mobile.
Nel Hewlett-Packard / Intel IA-64 l'architettura, la maggior parte delle istruzioni si predicano. I predicati sono memorizzati in 64 predicato scopi speciali registri ; e uno dei registri predicato è sempre vero in modo che i unpredicated istruzioni sono semplicemente le istruzioni predicate con il valore true. L'uso di predicazione è essenziale nella realizzazione di IA-64 di pipelining software in quanto evita la necessità di scrivere codice separato per prologs e epilogs.
Nel x86 architettura, una famiglia di istruzioni di movimento condizionali ( CMOVe FCMOV) sono stati aggiunti all'architettura da parte del processore Intel Pentium Pro (1995) del processore. Le CMOVistruzioni copiato il contenuto del registro sorgente al registro di destinazione a seconda di un predicato fornito dal valore del registro navale.
Nel ARM architettura, l'originale set di istruzioni a 32 bit fornisce una funzione chiamata esecuzione condizionale che consente maggior parte delle istruzioni essere basata da uno dei 13 predicati basati su una combinazione dei quattro codici di condizione fissati dal precedente istruzione. ARM Thumb set di istruzioni (1994) è sceso esecuzione condizionale per ridurre le dimensioni delle istruzioni in modo che potessero andare bene in 16 bit, ma il suo successore, Thumb-2 (2003) ha superato questo problema utilizzando un'istruzione speciale, che non ha alcun effetto diverso da quello per la fornitura predicati per i seguenti quattro istruzioni. Il set di istruzioni a 64 bit introdotta nel ARMv8-A (2011) ha sostituito l'esecuzione condizionale con le istruzioni di selezione condizionali.
Predicazione è utilizzato in CUDA "orditi", in cui una data nucleo CUDA esegue il codice di un ramo con condizione non soddisfatta ma non impegna i risultati calcolati in tale percorso di esecuzione.
Guarda anche
Riferimenti
ulteriore lettura
- Clements, Alan (2013). Organizzazione Computer & Architettura: Temi e Variazioni . Cengage Learning. pp. 532-539. ISBN 1-285-41542-6.