Very long instruction word: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
mNessun oggetto della modifica
Riga 25:
 
==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 VLISVLIW. 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.
 
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.