Very long instruction word: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Xqbot (discussione | contributi)
m [r2.5.2] Bot: Modifico: zh:超长指令字; modifiche estetiche
Riga 1:
[[ImmagineFile:Itanium2.JPG|thumb|300px|right|L'Itanium 2, una CPU VLIW]]
La '''Very Long Instruction Word''' o '''VLIW''' è un'architettura per microprocessori sviluppata per avvantaggiarsi dell'[[Instruction level parallelism]] (ILP). Un processore che esegue ogni istruzione in modo sequenziale sarebbe un processore molto lento e userebbe le prestazioni in modo inefficiente. Al fine di migliorare le prestazioni dei processori e quindi di utilizzare in modo efficiente le unità funzionali si sono sviluppate tecniche di esecuzione in grado di eseguire più istruzioni in parallelo. I primi metodi prevedevano la realizzazione di unità di elaborazione di tipo [[pipeline dati|pipeline]], in queste unità le istruzioni vengono elaborate come fossero in una catena di montaggio. Un'ulteriore miglioramento è stato portato dall'introduzione di più unità di calcolo in parallelo (più pipeline) al fine di ottenere [[microprocessore superscalare|microprocessori superscalari]]. Un'ulteriore miglioria è stata l'[[esecuzione fuori ordine]] delle istruzioni. Con questa modalità di esecuzione le istruzioni non vengono eseguite secondo l'ordine previsto dal programmatore ma secondo l'ordine che permette al processore di eseguirle in parallelo.
 
Riga 6:
L'approccio VLIW cerca di risolvere il problema utilizzando un'altra strada, invece di eseguire il controllo delle dipendenze e delle istruzioni eseguibili in parallelo durante l'elaborazione questi vengono lasciati al compilatore che le determina in modo statico e include nelle istruzioni dei dati di controllo per il processore. Il compilatore assembla le istruzioni in blocchi di più istruzioni (2 o più), i singoli blocchi vengono ricevuti dal processore che li decodifica e esegue le istruzioni in parallelo senza dover controllare dipendenze o altro, dato che tutto è già stato controllato dal compilatore. Questo permette di semplificare di molto il processore e di ottenere microprocessori molto veloci.
 
== Progetto ==
In un processore superscalare il numero di unità di calcolo non è visibile nel set di istruzioni. Ogni istruzione in formato binario codifica una sola istruzione da eseguire, che normalmente è di 32-64 bit o meno.
 
Invece le istruzioni VLIW vengono raggruppate in bundle, ciascuno dei quali contiene più istruzioni elementari, specificando per ognuna l'appartenenza ad una specifica unità di calcolo. Per esempio un dispositivo VLIW con 5 unità di calcolo sarà dotato di bundles (o istruzioni lunghe) con cinque campi, ciascuno dei quali istruirà una unità di calcolo. Ovviamente le istruzioni VLIW sono molto più lunghe delle classiche istruzioni: almeno 64 bit, ma spesso sono di 128 bit o più.
[[ImmagineFile:CPU VLIW e tradizionale.png|thumb|right|300px|Confronto tra una CPU tradizionale e una CPU VLIW]]
Sin dalle prime architetture ci si è resi conto che aggiungendo unità di calcolo alle macchine si potevano incrementare le prestazioni senza aumentare i costi in maniera eccessiva. Nelle CPU superscalari è la CPU stessa che durante l'esecuzione decide dinamicamente quali istruzioni mandare in esecuzione in parallelo. nelle CPU VLIW è il compilatore che durante la fase di traduzione decide quali istruzioni vadano eseguite in parallelo.
 
Riga 24:
In un'architettura VLIW il compilatore utilizza delle euristiche o dei profili per predeterminare in anticipo il ramo più probabile. Avendo il compilatore molto più tempo della CPU e la possibilità di analizzare tutto il codice e non solo qualche istruzione, le sue previsioni sono molto più precise di quelle effettuate da una CPU in tempo reale. Il compilatore sviluppa il codice inserendo le istruzioni relative al ramo più probabilmente scelto in cascata nel codice, e codifica l'algoritmo necessario per fare l'undo nel caso le previsione non sia quella corretta.
 
== Storia ==
Dalla fine degli [[anni 1960|anni sessanta]] si erano svolti degli studi per realizzare dei sistemi di calcolo che permettessero al programmatore di caricare più istruzioni in parallelo all'interno di un'unità di calcolo. Melliar-Smith nel 1969 in un articolo pubblicato da AFIPS FJCC proposero un primitivo sistema VLIW. Negli [[anni 1970|anni settanta]] altri lavori portarono al perfezionamento di questa idea e portarono alla realizzazione di unità come i [[CDC Advanced Flexible Processor]]. Queste unità comunque richiedevano una programmazione a basso livello delle unità funzionali per poter sfruttare la capacità di eseguire più istruzioni in parallelo del sistema, questo era un grande limite perché una programmazione parallela a livello di istruzioni e estremamente difficile e tediosa quindi solo pochi programmi sfruttavano efficacemente le potenzialità dei sistemi. All'inizio degli [[anni 1980|anni ottanta]] vi furono molti lavori volti allo studio di generici processori con architettura tipo VLIS. Nel 1981 James H. Pomerene per l'[[IBM]] depose un brevetto su un sistema di elaborazione parallelo che eseguisse più istruzioni indipendenti raccolte in gruppi.<ref>[http://www.google.com/patents?id=ga4BAAAAEBAJ&dq=US+4,295,193 US 4,295,193 1981]</ref> Nello stesso anno [[Bob Rau]] pubblicò un lavoro sul ''Polycyclic Architecture project'' sullo sviluppo di un sistema VLIW. Nel 1983 [[Josh Fisher (informatico)|Josh Fisher]] presentò il progetto ELI-512 su un sistema VLIW. Fisher sviluppò la sua architettura VLIW mentre era docente presso l'[[Università Yale]]. Fisher sviluppò le tecniche utilizzate dai compilatori per avvantaggiarsi dell'architettura VLIW. L'idea innovativa di Fisher era quella di cercare di rendere il codice parallelo non limitandosi ad analizzare i blocchi elementari di codice (blocchi di codici sequenziali), ma che bisognava estendere l'analisi a tutto il programma o a buona parte di esso. A tal fine sviluppò la [[trace scheduling]] una tecnica di analisi del codice che estendeva l'analisi anche a zone di codice soggette a salti condizionati. Il compilatore cercava di prevedere i risultati dei salti condizionati e compilava il codice di conseguenza, il compilatore inseriva anche del codice che in caso di errata predizione eliminava le istruzioni errate. Questo permetteva al compilatore di analizzare ampie porzioni di codice alla ricerca di istruzioni da eseguire in parallelo e quindi migliorava le prestazioni dei processori.
 
Riga 64:
* [[Instruction level parallelism]]
 
== Collegamenti esterni ==
* {{en}} [http://www.hpl.hp.com/news/2005/jul-sep/VLIW_retrospective.pdf ISCA "Best Papers" Retrospective On Paper That Introduced VLIWs]
 
{{Portale|Informatica}}
Riga 84:
[[simple:Very long instruction word]]
[[sv:VLIW]]
[[zh:VLIW超长指令字]]