Very long instruction word: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Etichette: Modifica da mobile Modifica da web per mobile
Storia: typo
Etichette: Modifica da mobile Modifica da web per mobile
Riga 31:
 
== Storia ==
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 eè estremamente difficile e tediosa quindi solo pochi programmi sfruttavano efficacemente le potenzialità dei sistemi. All'inizio degli [[anni 1980|anni ottanta]] vi furono molti lavori volti allo studio di generici processori con architettura tipo 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>[https://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 (informatico)|Josh Fisher]] presentò il progetto ELI-512 su un sistema VLIW. Fisher sviluppò la sua architettura VLIW mentre era docente presso l'[[Università Yale]]. Fisher sviluppò le tecniche utilizzate dai compilatori per avvantaggiarsi dell'architettura VLIW. L'idea innovativa 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 o a buona parte di esso. A tal fine sviluppò la [[trace 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 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.