Very long instruction word: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Corretto: "la previsione" |
Nessun oggetto della modifica Etichetta: Annullato |
||
Riga 1:
[[File:Itanium2.JPG|thumb|upright=1.4|Un processore a istruzioni lunghe]]
La '''Very Long Instruction Word''' è un'architettura obsoleta di [[processori
Un miglioramento fu portato dall'introduzione di più unità di calcolo in parallelo (più pipeline) al fine di ottenere un [[microprocessore superscalare]].
== Cenni storici ==▼
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.▼
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>[https://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.▼
La seconda idea innovativa di Fisher fu di sviluppare insieme il compilatore e il processore. Entrambi erano una parte del progetto complessivo e quindi dovevano suddividersi il lavoro perché un microprocessore troppo complesso sarebbe stato molto lento ma avrebbe richiesto un compilatore semplice, invece un microprocessore troppo semplice avrebbe richiesto un compilatore troppo complesso da programmare e quindi si sarebbero avute comunque prestazioni deludenti pur avendo potenzialmente un microprocessore molto veloce. Fisher sviluppò alcune strutture hardware come self-draining pipeline, ampi registri multiporta e una particolare architettura della memoria al fine di semplificare al compilatore il compito.▼
Il primo compilatore VLIW venne sviluppato da John Ellis durante la sua tesi di dottorato, tesi supervisionata da Fisher.<ref name="acmaward">{{Cita web▼
|titolo = ACM 1985 Doctoral Dissertation Award▼
|editore = [[Association for Computing Machinery|ACM]]▼
|accesso = 15 ottobre 2007▼
|url = https://awards.acm.org/citation.cfm?id=9267768&srt=year&year=1985&aw=146&ao=DOCDISRT▼
|citazione = For his dissertation ''Bulldog: A Compiler for VLIW Architecture''.▼
|urlmorto = sì▼
|urlarchivio = https://web.archive.org/web/20080402020350/http://awards.acm.org/citation.cfm?id=9267768&srt=year&year=1985&aw=146&ao=DOCDISRT▼
|dataarchivio = 2 aprile 2008▼
}}</ref>▼
== Descrizione ==
▲Si tratta di tecniche rudimentali per eseguire più istruzioni in parallelo. I primi metodi prevedevano la realizzazione di unità di elaborazione di tipo [[pipeline dati]], in queste unità le istruzioni vengono elaborate come fossero in una catena di montaggio. 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.
Queste tecniche hanno un fondamentale difetto: incrementano molto la complessità del microprocessore. Per poter eseguire le operazioni in parallelo il microprocessore deve costantemente verificare le dipendenze tra le varie istruzioni e i dati al fine di eseguire correttamente i programmi. Esistono più tipologie di dipendenze, per esempio un'istruzione potrebbe dover elaborare un dato ottenuto, come risultato, da un'altra istruzione e quindi questa non potrebbe essere eseguita prima dell'altra istruzione. I moderni microprocessori dedicano molte risorse al controllo delle dipendenze e all'arrangiare le istruzioni in modo da poterne eseguire il maggior numero possibile in parallelo.
Line 12 ⟶ 27:
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.
==
[[File:CPU VLIW e tradizionale.png|thumb|upright=1.4|Confronto tra una CPU tradizionale e una CPU VLIW]]
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.
Line 29 ⟶ 44:
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 in teoria dovrebbero essere più precise di CPU che lavora 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 la previsione non sia quella corretta. È da notare che i microprocessori ad alte prestazioni con unità di predizione delle diramazioni allo stato dell'arte spesso forniscono predizioni delle diramazioni simili se non superiori a quelli forniti statisticamente dai compilatori. Questo perché sebbene l'unità di predizione debba eseguire le sue analisi nel giro di frazioni di nanosecondo è anche vero che l'unità dispone di informazioni in tempo reale sullo stato del processore e queste informazioni indirizzano le predizioni migliorandone la precisione.
▲== Cenni storici ==
▲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>[https://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.
▲La seconda idea innovativa di Fisher fu di sviluppare insieme il compilatore e il processore. Entrambi erano una parte del progetto complessivo e quindi dovevano suddividersi il lavoro perché un microprocessore troppo complesso sarebbe stato molto lento ma avrebbe richiesto un compilatore semplice, invece un microprocessore troppo semplice avrebbe richiesto un compilatore troppo complesso da programmare e quindi si sarebbero avute comunque prestazioni deludenti pur avendo potenzialmente un microprocessore molto veloce. Fisher sviluppò alcune strutture hardware come self-draining pipeline, ampi registri multiporta e una particolare architettura della memoria al fine di semplificare al compilatore il compito.
▲Il primo compilatore VLIW venne sviluppato da John Ellis durante la sua tesi di dottorato, tesi supervisionata da Fisher.<ref name="acmaward">{{Cita web
▲ |titolo = ACM 1985 Doctoral Dissertation Award
▲ |editore = [[Association for Computing Machinery|ACM]]
▲ |accesso = 15 ottobre 2007
▲ |url = https://awards.acm.org/citation.cfm?id=9267768&srt=year&year=1985&aw=146&ao=DOCDISRT
▲ |citazione = For his dissertation ''Bulldog: A Compiler for VLIW Architecture''.
▲ |urlmorto = sì
▲ |urlarchivio = https://web.archive.org/web/20080402020350/http://awards.acm.org/citation.cfm?id=9267768&srt=year&year=1985&aw=146&ao=DOCDISRT
▲ |dataarchivio = 2 aprile 2008
▲}}</ref>
== Implementazioni ==
Nel 1984 Fisher abbandonò Yale per avviare la società [[Multiflow]] che fondò con John O'Donnell e John Ruttenberg. La società produsse la serie di [[minisupercomputer]] TRACE basati sull'architettura VLIW. Il primo sistema venne messo in commercio nel 1988 ed era in grado di eseguire 28 operazioni in parallelo per istruzione. I sistemi TRACE implementavano un mix di componenti MSI/LSI/VLSI su scheda, dato che per ragioni tecnologiche questo era più economico che integrare tutti i componenti in un solo integrato. La società non riuscì a vendere molti sistemi, perché i continui incrementi dell'elettronica permisero alle società produttrici di microprocessori "classici" di mantenere il passo con le soluzioni VLIW in molti campi; comunque le altre società riconobbero il valore tecnologico dell'idea difatti la Multiflow riuscì a vendere molti brevetti.
Nello stesso periodo (anni ottanta) venne fondala la [[Cydrome]], una società nata per sviluppare processori VLIW con tecnologia [[ECL]]. Questa compagnia come la Multiflow abbandonò il mercato dopo alcuni anni, la società era stata fondata da David Yen, Wei Yen e [[Bob Rau]] uno dei pionieri dell'architettura VLIW. Uno dei licenziatari della tecnologia Multiflow fu la [[Hewlett-Packard]], nella quale entrò anche Fisher dopo la fine della Multiflow. Nel 1988 Bob Rau entrò a far parte della società dopo il fallimento della Cydrome, HP acquisì proprietà intellettuali anche dalla Cydrome. I due progettisti lavorarono per la società per tutti gli [[anni 1990|anni novanta]].
Alla HP i due ricercatori studiarono come rendere più efficienti i processori [[PA-RISC]] della società. Questi scoprirono che si poteva semplificare di molto il progetto della CPU eliminando la gestione dell'assegnazione delle istruzioni alle unità logiche dal processore e trasferendo il compito al compilatore. I compilatori degli anni novanta erano molto più complessi di quelli utilizzati durante gli anni ottanta e quindi la complessità aggiuntiva era trascurabile. Le ricerche volte da Rau e Fisher presso l'HP portarono in seguito allo sviluppo dei processori [[Itanium]] in collaborazione con [[Intel]].
I processori VLIW trovarono ampia applicazione nel mercato ''[[Sistema embedded|embedded]]'', le famiglie [[TriMedia]] di [[NXP Semiconductors]], [[SHARC DSP]] di [[Analog Devices]], la famiglia [[C6000]] di [[Texas Instruments]] e la famiglia [[ST200]] di [[STMicroelectronics]] sono soluzioni VLIW.
Line 71 ⟶ 66:
== Voci correlate ==
* [[Processore]]
* [[Instruction level parallelism]]
|