# Explicitly parallel instruction computing

Explicitly parallel instruction computing (EPIC) è un paradigma di architettura per microprocessori sviluppata verso la fine degli novanta. Questo paradigma è stato sviluppato da Intel e HP e ha portato allo sviluppo dell'architettura dell'Intel IA-64 utilizzata nei processori Itanium e Itanium 2. L'obiettivo di EPIC è lo sviluppo di processori in grado di eseguire in modo nativo ed efficiente codice parallelo senza dover utilizzare complesse strutture hardware all'interno del processore ma demandando la maggior parte dei problemi di parallelizzazione al compilatore. Questo permette di ottenere un aumento regolare e costante delle prestazioni senza innalzare eccessivamente la frequenza di funzionamento dei processori evitando consumi eccessivi e problemi di dissipazione.

## Storia

L'architettura EPIC è un derivato dell'architettura VLIW e difatti lo sviluppo di questa architettura è inscindibilmente legato con lo sviluppo dell'architettura VLIW. Le principali innovazioni sono state:
* 1981 - Bob Rau sviluppa il Polycyclic Architecture project at TRW/ESL
* 1983 - Josh Fisher descrive il progetto ELI-512 una macchina VLIW con compilatore che implementa il trace scheduling
* 1983-1988 - Rau alla Cydrome sviluppa il sistema Cydra-5, la compagnia chiude nel 1998
* 1984-1990 - Fisher alla Multiflow sviluppa i sistemi Trace, la compagnia chiude nel 1990
* 1988 - Dick Lampman presso la Hewlett Packard assume Bob Rau e Mike Schlansker dalla Cydrome e acquisisce i brevetti della Cydrome
* 1989 - Rau e Schlansker avviano il progetto di ricerca FAST (Fine-grained Architecture and Software Technologies), in seguito svilupperanno l'architettura HP PlayDoh
* 1990-1993 - Bill Worley sviluppa l'architettura PA-WW (Precision Architecture Wide-Word) presso i laboratori Hewlett Packard come architettura successore di quella utilizzata dai processori PA-RISC, in seguito questa prenderà il nome SP-PA (Super-Parallel Processor Architecture) e produrrà il SWS (Super WorkStation)
* Hewlett Packard assume Josh Fisher e lo inserisce nel progetto PA-WW
* Hitachi collabora al progetto PA-WW, il capoprogetto Hitachi è Yasuyuki Okada
* Novembre 1991 - Hans Mulder si unisce all'Intel per sviluppare un'architettura a 64 bit
* Luglio 1992 - Worley consiglia i vertici di Hewlett Packard di cercare un partner per la produzione dei semiconduttori.
* 1993 - Hewlett Packard inizia a sviluppare prodotti basati su PA-WW
* Dicembre 1993 - Hewlett Packard avvia contatti con Intel per una collaborazione
* Giugno 1994 - Hewlett Packard e Intel annunciano una collaborazione; il progetto PA-WW verrà usato come punto di partenza per lo sviluppo di prodotti comuni; John Crawford da Intel diventa direttore del progetto
* 1997 - viene coniato il termine EPIC
* Ottobre 1997 - Presentazione di Interl e Hewlett Packard al Microprocessor Forum
* Giugno 1998 - Carole Dulong da parte Intel pubblica "The IA-64 Architecture at Work," IEEE Computer, pp. 24–32.
* Febbraio 1999 - pubblicazione dei dettagli sull'ISA IA-64
* 2001 - Intel rinomina per questioni di marketing l'IA-64 come Itanium Processor Family
* Maggio 2001 - Itanium (Merced)
* Giugno 2002 - Itanium 2 (McKinley)

## VLIW

L'esecuzione fuori ordine e l'esecuzione speculativa ha permesso negli anni passati di incrementare significativamente le prestazioni dei processori. Tuttavia queste tecniche hanno presto mostrato i loro limiti, richiedono unità funzionali sempre più costose e complesse per ottenere aumenti prestazionali sempre più ridotti. Nella metà degli anni 1990 si svilupparono diverse ricerche per arginare o eliminare il problema e le ricerche portarono allo sviluppo di set di istruzioni ove il parallelismo delle singole istruzioni fosse dichiarato in modo esplicito in modo da eliminare le unità di esecuzione fuori ordine e di analisi speculativa del codice. Questi set di istruzioni portarono alle architetture VLIW.
Nelle architetture VLIW le istruzioni sono impacchettate in gruppi che vengono eseguiti in parallelo. In ogni gruppo la dipendenza tra le varie istruzioni è già stata analizzata e risolta dal compilatore e quindi il processore deve solo prendere il gruppo di istruzioni, separare le singole operazioni ed eseguile in parallelo senza dover utilizzare complesse unità di analisi del codice. Tutta l'analisi del codice per ottenerne una versione parallela è stata effettuata dal compilatore che avendo molto più tempo del microprocessore effettua analisi molto più approfondite e performanti.
Le architetture VLIW però hanno diversi difetti che attualmente ne limitano la diffusione, le principali sono:
* I programmi VLIW non sono totalmente retrocompatibili. Codice scritto per un processore non risulta compatibile con le generazioni precedenti del processore dato che le generazioni precedenti hanno meno unità funzionali della generazione attuale. Il processore è invece in grado di eseguire codice compilato per generazioni precedenti sebbene con una riduzione delle prestazioni.
* Le moderne architetture basate su DRAM e cache rendono il tempo di accesso alla memoria non predicibile e quindi molte delle ottimizzazioni applicate dal compilatore vengono vanificate.

## Superare i limiti del VLIW

L'architettura EPIC al fine di risolvere i principali problemi segue sei principi base:
* Caricamenti anticipati delle istruzioni
* Esecuzione predicativa al fine di eliminare molte condizioni di salto
* Ampio numero di registri
* Indipendenza dall'architettura
* Predizione dei salti
* Rotazione dei registri
Al fine di seguire i principi base l'architettura EPIC utilizza le seguenti tecniche:
* Caricamento anticipato:
    L'architettura introduce il caricamento speculativo delle istruzioni, prima di un salto cerca di prevedere l'esito dell'istruzione e carica le istruzioni conseguenti in cache. Esegue i caricamenti anche prima di aver terminato l'analisi degli alias.
* Esecuzione predicativa:
    Il processore dispone di 64 registri utilizzati per gestire l'esecuzione predicativa delle istruzioni, questo permette di eliminare molti dei più comuni salti e quindi permette di incrementare sensibilmente le istruzioni eseguite in parallelo. Ogni istruzione può essere eseguita in modo predicativo.
* Ampio numero di registri
    Al fine di non dover includere strutture di ridenominazione dei registri l'architettura include 128 registri per gli interi e 128 registri per i numeri in virgola mobile.
* Indipendenza dall'architettura:
    Al fine di eliminare uno dei maggiori vincoli delle architetture VLIW, EPIC è un'architettura pienamente VLIW senza cicli di ritardo. Ogni gruppo di istruzioni viene chiamato bundle. Ogni bundle contiene al suo interno oltre alle istruzioni anche delle informazioni aggiuntive che specificano se i risultati del bundle servono a un bundle successivo. Queste informazioni sono utilizzate del processore per gestire in parallelo i vari bundle. Le dipendenze dei bundle sono calcolate dal compilatore in modo da non occupare transistor del processore. I bundle sono di 128 bit mentre ogni istruzione è di 41 bit e i bit di gestione dei bundle sono 5.
* Predizione dei salti
    Otto registri per la predizione delle diramazioni, i registri permettono all'unità di prevedere salti multipli e salti annidati
* Rotazione dei registri
    L'architettura IA-64 utilizza la register window, una tecnica utilizzata nei DSP che permette di utilizzare subroutine senza dover effettuare continui salvataggi dello stack ma appoggiandosi a una serie di registri che vengono fatti vedere alle subroutine tramite una specie di finestra scorrevole che mostra alla subroutine solo i registri di sua competenza. Il processore inoltre provvede al salvataggio in memoria dei registri impegnati da subroutine lontane da quella in esecuzione, in modo da aver sempre registri pronti per le subroutine. L'architettura prevede che i 48 registri inferiori utilizzati per la predicazione e i 96 registri interi inferiori possano ruotare.

## Ricerca e sviluppo continuo

Il progetto EPIC si basa su ricerche prodotte da molti gruppi, tra le più influenti si segnalano:
* IMPAC, un progetto dalla Università dell'Illinois a Urbana-Champaign gestito da Wen-mei Hwu che ha prodotto molte idee e tecniche utilizzate da EPIC.
* L'architettura PlayDoh prodotta da HP nei suoi laboratori.
* Gelato.org un progetto open source che mira a sviluppare una comunità di aziende e università per creare compilatori ad alte prestazioni per i processori Itanium su piattaforma Linux

## EPIC nel mercato

L'architettura EPIC dopo un avvio molto stentato ha raggiunto un certo successo in alcuni segmenti di mercato, dove i server ad alte prestazioni la fanno da padrona. Secondo un'analisi di IDC del 2007 i server basati su Itanium generavano un giro d'affari di 2,2 miliardi di dollari statunitensi e si stimava che il giro d'affari avrebbe raggiunto i 7 miliardi di dollari nel 2010.