Very long instruction word: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
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'[[instructionInstruction level perallelismparallelism]] (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 [[pipleinepipeline 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.
Riga 26:
 
==Storia==
Dalla fine degli [[anni 1960|anni 60]] si erano svolti alcuni studi per demandare la gestione delle unità di calcolo direttamente al compilatore. Melliar-Smith nel 1969 in un articolo pubblicato da AFIPS FJCC proposero un primitivo sistema VLIW. Negli [[anni 1970|anni 70]] altri lavori portarono al perfezionamento di questa idea e portarono alla realizzazione di unità come i [[CDC Advanced Flexible Processor]]. Queste unità comunque non erano processori generici, erano coprocessori dediti all'esecuzione di particolari operazioni e dovevano essere gestiti da un processore centrale. All'inizio degli [[anni 1980|anni 80]] vi furono molti lavori volti allo studio di generici processori 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 presentò il progetto ELI-512 su un sistema VLIS. Fisher sviluppo la sua architettura VLIW mentre era ricercatore presso l'[[Università di Yale]]. Fisher sviluppo le tecniche utilizzate dai compilatori per avvantaggiarsi dell'architettura VLIW. L'idea innovati 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. A tal fine sviluppo la [[region 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.
Il termine ''VLIW''
 
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 sviluppo alcune strutture hardware come self-draining pipeline, ampi registri multiporta e una particolare architettura della memoria al fine di rendere al compilatore il compito più semplice.
 
Il primo compilatore VLIW venne sviluppato da John Ellis durante la sua tesi di dottorato, tesi supervisionata da Fisher.<ref name="acmaward">{{cite web
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 &mdash; 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]]
Riga 39 ⟶ 36:
| 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>
}}</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.
 
Fisher abbandonò Yale nel 1984 per avviare la società [[MultiFlow]] che fondo 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 dato che i continui incrementi dell'elettronica permisero alle società produttrici di microprocessori "classici" di mantenere il passo con le soluzioni VLIS in molti campi ma comunque le società riconobbero il valore tecnologico dell'idea difatti la MultiFlow riuscì a vendere molti brevetti.
 
== Problematiche ==