Very long instruction word: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: Aggiorno template {{informatica}} |
mNessun oggetto della modifica |
||
Riga 1:
{{WIP|hellis}}
[[Immagine:Itanium2.JPG|thumb|right|L'Itanium 2 una CPU VLIW]]
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 [[pipleine dati|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 [[microprocessore superscalare|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.
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==
Riga 19 ⟶ 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==
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 pipeline]]s, wide multi-port [[register file]]s, and [[memory architecture]]s. 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.<ref name="acmaward">{{cite web
| title = ACM 1985 Doctoral Dissertation Award
| publisher = [[Association for Computing Machinery|ACM]]
| accessdate = 2007-10-15
| url = http://awards.acm.org/citation.cfm?id=9267768&srt=year&year=1985&aw=146&ao=DOCDISRT
| quote = For his dissertation ''Bulldog: A Compiler for VLIW Architecture''.
}}</ref> John Ruttenberg also developed certain important algorithms for scheduling.{{Fact|date=February 2007}}
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 [[minisupercomputer]]s, 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 ==
|