Very long instruction word: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Gac (discussione | contributi) m Annullate le modifiche di Domenique43 (discussione), riportata alla versione precedente di Napy6565 Etichetta: Rollback |
m Fix sezione == Cenni [...] == come da richiesta |
||
Riga 30:
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 in teoria dovrebbero essere più precise di CPU che lavora 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 la previsione non sia quella corretta. È da notare che i microprocessori ad alte prestazioni con unità di predizione delle diramazioni allo stato dell'arte spesso forniscono predizioni delle diramazioni simili se non superiori a quelli forniti statisticamente dai compilatori. Questo perché sebbene l'unità di predizione debba eseguire le sue analisi nel giro di frazioni di nanosecondo è anche vero che l'unità dispone di informazioni in tempo reale sullo stato del processore e queste informazioni indirizzano le predizioni migliorandone la precisione.
==
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.
|