Very long instruction word: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Gac (discussione | contributi) m Annullate le modifiche di Domenique43 (discussione), riportata alla versione precedente di Napy6565 Etichetta: Rollback |
fix /migliorata leggibilità wikitesto |
||
(9 versioni intermedie di 7 utenti non mostrate) | |||
Riga 1:
{{F|informatica|dicembre 2023}}
[[File:Itanium2.JPG|thumb|upright=1.4|Un processore a istruzioni lunghe]]
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. ▼
▲La '''Very Long Instruction Word''' è un'architettura obsoleta di processori. Fu sviluppata basandosi sul [[Instruction level parallelism|parallelismo di istruzione]]. Si tratta di tecniche rudimentali per eseguire più istruzioni in parallelo. I primi metodi prevedevano la realizzazione di unità di elaborazione di tipo [[pipeline (CPU)|pipeline dati]], in queste unità le istruzioni vengono elaborate come fossero in una catena di montaggio.
Un miglioramento fu portato dall'introduzione di più unità di calcolo in parallelo (più pipeline) al fine di ottenere un [[microprocessore superscalare]]. 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 14 ⟶ 12:
== Progetto ==
[[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.
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à un'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ù.
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
In un'istruzione VLIW spetta al compilatore rilevare le dipendenze tra istruzioni e assemblarle in gruppi ottimizzati.
Line 30 ⟶ 29:
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.
==
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
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.
Line 49 ⟶ 48:
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
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]].
Line 63 ⟶ 62:
== Evoluzioni ==
L'architettura VLIW ha indubbiamente molti vantaggi ma i suoi problemi ne rendono problematico l'utilizzo in processori per computer. La necessità di ricompilare il codice per ogni generazione di processori in particolare si scontra con la necessità degli utenti di poter mantenere il parco software. Per eliminare questi problemi diverse società hanno sviluppato delle evoluzioni dell'architettura VLIW, tra le varie evoluzioni la più famosa è l'architettura [[Explicitly parallel instruction computing|EPIC]] sviluppata da [[Intel]] e [[Hewlett
Un'altra architettura che può essere considerata un'evoluzione dell'architettura VLIW è l'[[architettura TRIPS]]. Questa architettura a differenza delle precedenti architetture richiede anche una radicale modifica del [[set di istruzioni]], difatti questa architettura utilizza un nuovo set di istruzioni chiamato [[Explicit Data Graph Execution]] (EDGE). Questo set di istruzioni considera le istruzioni come degli elementi che ricevono dati, li elaborano e li inviano ad altre istruzioni. Quindi le varie istruzioni sono legate dai dati che elaborano. EDGE in sostanza raccoglie le istruzioni che elaborano gli stessi dati in blocchi e le invia al processore. Ogni blocco di istruzioni è collegato agli altri blocchi da un grafo delle dipendenze che viene generato dal compilatore. Questo set di istruzioni permette di sviluppare il processore come tante unità di calcolo che ricevono blocchi di dati e li elaborano in parallelo, le singole unità di calcolo alla fine dell'elaborazione di un blocco possono scambiarsi delle informazioni se necessario. Questo permette di incrementare notevolmente il numero di operazioni eseguite in parallelo dal singolo processore. Quest'architettura tuttavia è attualmente (2009) un progetto di ricerca e non è detto che diventerà un prodotto commerciale.
== Note ==
<references
== Voci correlate ==
* [[Pipeline (CPU)|Pipeline]]
* [[Instruction level parallelism]]
== Altri progetti ==
{{Interprogetto|preposizione=sulla}}
== Collegamenti esterni ==
* {{FOLDOC||Very Long Instruction Word}}
* {{cita web|1=http://www.hpl.hp.com/news/2005/jul-sep/VLIW_retrospective.pdf|2=ISCA "Best Papers" Retrospective On Paper That Introduced VLIWs|lingua=en|accesso=24 ottobre 2007|dataarchivio=10 marzo 2012|urlarchivio=https://web.archive.org/web/20120310074119/http://www.hpl.hp.com/news/2005/jul-sep/VLIW_retrospective.pdf|urlmorto=sì}}
{{Portale|informatica}}
|