Very long instruction word

architettura obsoleta di processori

La Very Long Instruction Word o VLIW è un'architettura per microprocessori sviluppata per avvantaggiarsi dell'instruction level perallelism (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, in queste unità le istruzioni vengono elaborate come fossero in una catena di montaggio. Un'ulteriore miglioramento è stato portato dal'introduzione di più unità di calcolo in parallelo (più pipeline) al fine di ottenere microprocessori superscalari. Un'ulteriore migliori è 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.

L'Itanium 2 una CPU VLIW

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.

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ù.

 
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.

In un'istruzione VLIW spetta al compilatore rilevare le dipendenze tra istruzioni e assemblarle in gruppi ottimizzati. Una dipendenza tipica si ha, ad esempio, quando un'istruzione assembly X deve elaborare il risultato di un'altra istruzione Y. In questa circostanza le due non possono venir eseguite in parallelo. Il compilatore VLIW rileva questa dipendenza ed attua politiche di risoluzione dei conflitti. Una politica attuabile potrebbe essere quella di anticipare alcune istruzioni indipendenti. Quando questo non risulta fattibile il compilatore introduce una NOP che stalla l'unità di calcolo. L'assenza della logica che attua lo scheduling dinamico riduce significativamente la complessità, il costo e l'assorbimento energetico della CPU.

Un altro problema si presenta se il risultato di un'istruzione viene utilizzato per definire se uscire da un ciclo o no. Molte CPU moderne scelgono in anticipo un percorso in modo da poter caricare i dati corrispondenti. Alcune CPU sono dotate di una unità di predizione delle diramazioni che effettua una analisi del codice per prevedere la diramazione più probabile. Questi metodi incrementano la complessità del progetto e corrompono la filosofia originaria delle architetture RISC anche perché la CPU deve contenere anche l'elettronica che in caso di errore della predizione elimina le istruzioni in esecuzione e elimina le eventuali modifiche già eseguite (undo).

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

Il termine VLIW


The term VLIW, and the concept of VLIW architecture itself, were invented by Josh Fisher in his research group at Yale University in the early 1980s. His original development of trace scheduling as a compilation technique for VLIW was developed when he was a graduate student at New York University. Prior to VLIW, the notion of prescheduling functional units and instruction-level parallelism in software was well established in the practice of developing horizontal microcode. Fisher's innovations were around developing a compiler that could target horizontal microcode from programs written in an ordinary programming language. He realized that in order to get good performance, and to target a wide-issue machine, it would be necessary to find parallelism beyond that which one generally finds within a basic block. He developed region scheduling techniques to identify parallelism beyond basic blocks. Trace scheduling is such a technique, and involves scheduling the most likely path of basic blocks first, inserting compensation code to deal with speculative motions, scheduling the second most likely trace, and so on, until the schedule is complete.

Fisher's second innovation was the notion that the target CPU architecture should be designed to be a reasonable target for a compiler — the compiler and the architecture for VLIW must be co-designed. This was partly inspired by the difficulty Fisher observed at Yale of compiling for architectures like Floating Point Systems' FPS164, which had a complex instruction set architecture that separated instruction initiation from the instructions that saved the result, requiring very complicated scheduling algorithms. Fisher developed a set of principles characterizing a proper VLIW design, such as self-draining pipelines, wide multi-port register files, and memory architectures. These principles made it easier for compilers to write fast code.

The first VLIW compiler was described in a Ph.D. thesis by John Ellis, supervised by Fisher.[1] John Ruttenberg also developed certain important algorithms for scheduling.[senza fonte]

Fisher left Yale in 1984 to found a startup company, Multiflow, along with co-founders John O'Donnell and John Ruttenberg. Multiflow produced the TRACE series of VLIW minisupercomputers, shipping their first machines around 1988. Multiflow's VLIW could issue 28 operations in parallel per instruction. The TRACE system was implemented in an MSI/LSI/VLSI mix packaged in cabinets, a technology that fell out of favor when it became more cost-effective to integrate all of the components of a processor (excluding memory) on a single chip. Multiflow was too early to catch the following wave, when chip architectures began to allow multiple issue CPUs. The major semiconductor companies recognized the value of Multiflow technology in this context, so the compiler and architecture were subsequently licensed to most of these companies.


Problematiche

Il principale problema di questa architettura è l'estrema dipendenza dei programmi dal compilatore. Un programma ottimizzato per un processore VLIW per lavorare in modo efficiente sulla generazione successiva di microprocessori va quasi sempre ricompilato. Questo rende problematico per un utente cambiare il computer dato che anche il suo parco software andrebbe adattato al nuovo processore a meno che i programmi non siano scritti con un linguaggio come Java che, appoggiandosi ad un ulteriore strato software (Virtual Machine) per l'esecuzione del byte code generato dal compilatore, possa essere adattato alla macchina durante l'esecuzione. Un'altra strategia è utilizzare uno strato software che interpreti il vecchio codice e lo adatti al nuovo processore ma in questo caso si ha un deperimento delle prestazioni che può essere anche molto marcato. Questa strategia viene utilizzata per esempio dal processore Efficeon della Transmeta che interpreta codice Intel X86 standard e internamente lo traduce in codice VLIW per la CPU.

Evoluzioni

L'architettura VLIW ha indubbiamente molti vantaggi ma i suoi problemi ne rendono problematico l'utilizzo in processori per computer. La necessita di ricompilare il codice per ogni generazione di processori in particolare si scontra con la necessita 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 EPIC sviluppata da Intel e HP congiuntamente. L'architettura EPIC (Explicitly Parallel Instruction Computing) raggruppa le istruzioni elementari in parole come una classica architettura VLIW e inserisce inoltre delle informazioni sul parallelismo tra le varie parole. In questo modo le varie generazioni del processore possono variare internamente la loro architettura senza troppi problemi. Le informazioni sul parallelismo permettono di realizzare unità di decodifica che sfruttano il parallelismo efficientemente ma sono nel contempo semplici dato che l'analisi del codice parallelo e la sua suddivisione è stata effettuata dal compilatore.

Voci correlate

  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica
  1. ^ ACM 1985 Doctoral Dissertation Award, su awards.acm.org, ACM. URL consultato il 15 ottobre 2007.
    «For his dissertation Bulldog: A Compiler for VLIW Architecture