# Architettura TRIPS

TRIPS (The Tera-op, Reliable, Intelligently adaptive Processing System) è un'architettura per microprocessori sviluppata da un gruppo di ricerca dell'University of Texas at Austin con l'IBM. TRIPS utilizza un nuovo instruction set sviluppato per poter essere suddiviso in blocchi di istruzioni indipendenti in modo da poter essere eseguita da unità di esecuzione indipendenti. Il prototipo del processore basato sull'architettura TRIPS contiene 16 elementi, ma il gruppo di ricerca ritiene di poter facilmente accrescere il parallelismo fino a 128 elementi in un processore utilizzabile per applicazioni reali. Sfruttando le innovazioni portate dalla nuova architettura il team di sviluppo ritiene di poter sviluppare processori in grado di eseguire 1 TeraFlops su singolo integrato entro il 2012.

## Premessa

Il continuo miglioramento dei processi di produzione dei transistor ha permesso un costante incremento del numero di transistor integrabili all'interno di un singolo processore. Questo ha permesso di sviluppare processori che integrassero più unità di calcolo indipendenti. Dato che la maggior parte dei programmi è stata sviluppata per essere eseguiti da una singola unità di calcolo gli ingegneri hanno inserito all'interno delle unità che analizzavano il codice alla ricerca delle istruzioni eseguibili in parallelo (instruction level parallelism) in modo da utilizzare le unità di calcolo parallele presenti nei processori. Queste tecniche di estrazione delle istruzioni parallele non sono normalmente in grado di estrarre più di quattro istruzioni in parallelo ma dato che i progettisti sono in grado di integrare decine di unità di calcolo indipendenti si sono cercate anche altre strade per aumentare le prestazioni. Per esempio nei processori very long instruction word è lo stesso compilatore che durante la fase di creazione dei programmi individua le istruzioni eseguibili in parallelo e le segnala al processore. Questa tipologia di processori ha il grave difetto di richiedere programmi compilati appositamente per i singoli processori, una modifica dell'interno del processore spesso richiede anche una ricompilazione dei programmi per poter sfruttare la potenza di calcolo del nuovo processore. Intel sviluppò l'architettura explicitly parallel instruction computing al fine di tamponare i problemi della stretta dipendenza tra programma e processore. Per cercare di risolvere il problema i ricercatori del progetto TRIPS svilupparono il set di istruzioni Explicit Data Graph Execution.

## EDGE

L'architettura TRIPS deriva le sue prestazioni dal set di istruzioni Explicit Data Graph Execution o EDGE. Il set di istruzioni EDGE ribalta il classico concetto di set di istruzioni. In un processore classico il set di istruzioni sono delle istruzioni che devono essere eseguite in modo seriale per svolgere uno specifico compito. Il set di istruzioni EDGE invece vede le istruzioni come del blocchi di istruzioni che lavorano con dei dati isolati al fine di assolvere un compito. EDGE permette di raccogliere questi insiemi di istruzioni in blocchi al fine di poterli inviare a una singola unità funzionale. Il compilatore esamina il codice alla ricerca dei blocchi di codice che condividono lo stesso gruppo di dati comuni da elaborare. Il compilatore garantisce il rispetto delle dipendenze tra i blocchi di dati e assegna i blocchi di istruzioni a un'unità locale di esecuzione con la propria memoria locale.
Nel caso i dati siano comuni a troppe istruzioni (per esempio un singolo programma che utilizza gli stessi dati in tutte le sue parti) non sarebbe conveniente realizzare un singolo blocco contenente il programma, in questo caso il compilatore realizza due o più blocchi di istruzioni e codifica esplicitamente nel codice le dipendenze dei dati al fine codificare esplicitamente il trasferimento dei dati comuni, invece di porli semplicemente in una memoria comune. Dato che i processori sanno esplicitamente quando dovranno trasferire i dati possono organizzare i trasferimenti dei dati al fine id ridurre gli eventuali colli di bottiglia. Nel caso un blocco abbia considerevoli interdipendenze con altri blocchi queste dipendenze vengono sparpagliate al fine di distribuire le comunicazioni tra le unità di esecuzione ed evitare i colli di bottiglia.
Queste ottimizzazioni portate dal compilatore migliorano l'isolamento tra le unità funzionali. I processori basati su EDGE sono limitati nel parallelismo dalla capacità del compilatore di isolare i blocchi non dalle limitazioni hardware dei processori. Come detto in un comune processore il livello di parallelismo normalmente non supera le quattro unità mentre un sistema EDGE può avere molte più unità, il compilatore ha molto più tempo del processore per individuare i blocchi di istruzioni eseguibili in parallelo e la presenza di istruzioni previste esplicitamente per la gestione di dati comuni e di istruzioni in parallelo permette di incrementare ulteriormente i blocchi eseguibili in parallelo.

## TRIPS

L'attuale implementazione del set di istruzioni EDGE è il processore TRIPS. Un processore TRIPS è formato da una unità funzionale ripetuta quante volte il progettista ritiene necessario. Dato che i problemi di gestione delle unità funzionali e di estrazione del parallelismo tipici di un classico processore non sono presenti in questo processore il processore può essere dotato di molte unità funzionali facilmente. L'attuale implementazione di TRIPS per esempio può essere dotata di 16 unità funzionali, ma potrebbe facilmente essere adattata a una singola unità funzionale se fosse ritenuto necessario. Un progetto tradizionale è limitato a quattro unità funzionali e si ritiene improbabile che possa crescere significativamente nel futuro, l'approccio VLIW invece è limitato al momento della costruzione del processore dato che un nuovo processore richiede una nuova compilazione dei programmi mentre il progetto TRIPS non soffre di questi problemi.
Il progetto TRIPS con il caricamento dei blocchi di dati permette di ottenere un'alta esecuzione parallela. Un classico processore può analizzare poche centinaia di istruzioni alla ricerca di codice parallelo e non può effettuare radicali modifiche del flusso dati mentre il progetto TRIPS potendo analizzare con calma il codice permette di analizzare l'intero programma e se necessario può alterare in modo drastico il flusso dei dati per migliorare le prestazioni di esecuzione. Un processore TRIPS con quattro unità funzionali mediamente esegue il triplo delle operazioni per ciclo di clock rispetto a un classico processore superscalare con quattro unità di calcolo.
Nel progetto TRIPS le unità funzionali sono generiche al fine di poter eseguire ogni tipologia di istruzione e quindi di non porre limitazioni. In un progetto tradizionale invece esistono delle unità specializzate in grado di eseguire solo alcune istruzioni, questo permette di eseguire più di quattro flussi paralleli ma per avere il massimo utilizzo delle unità parallele i programmi dovrebbero far uso di tutte le tipologie di istruzioni in contemporanea, questo nei programmi reali accede solo raramente. Dato che il progetto TRIPS supera il limite dei quattro flussi paralleli i progettisti possono porre molte unità di calcolo in parallelo e quindi la necessità di avere unità specializzate viene meno.
Il progetto TRIPS è talmente flessibile che secondo gli sviluppatori potrebbe sostituire processori dedicati come i DSP. I DSP sono molto veloci dato che la dipendenza tra i dati processati normalmente è ridotta, ma il progetto TRIPS sarebbe in grado di avvantaggiarsi anch'esso della limitata interdipendenza dei dati con il vantaggio di poter eseguire anche codice generico rapidamente. Il progetto TRPS comunque difficilmente potrà sostituire processori estremamente specializzati come le GPU, queste sono sviluppate tenendo conto del flusso dati delle pipeline grafica e forniscono prestazioni superiori la progetto TRIPS.
L'eliminazione di registri globali nel processore porta dei vantaggi non immediatamente visibili. I processori mano a mano che utilizzano transistor più piccoli possono aumentare la frequenza di funzionamento, ma a volte questa è limitata dal tempo necessario al processore per comunicare con le sue unità funzionali, in un processore TRIPS le singole unità sono piccole e sostanzialmente indipendenti e quindi possono funzionare a frequenza più elevate di una grande processore dato che le linee di trasmissione dei dati sono più corte.
La combinazione di molte unità in parallelo e di alte frequenze secondo i progettisti potrebbe portare a ottenere processori ad altissime prestazioni, i progettisti puntano ad ottenere un processore in grado di sviluppare 1 TeraFlops entro il 2012, per confronto il computer Mac Pro dotato di due processori Intel Xeon dual core è in grado di sviluppare circa 5 GigaFlops con un singolo programma.
Nel 2003 il team di sviluppo TRIPS ha iniziato a sviluppare un processore di test. Il processore è un chip ASIC da 170 milioni di transistor a 130 nm. Questo processore è dotato di due core di calcolo, ogni core è dotato di 16 unità funzionali disposte a forma di matrice 4 × 4. L'attuale compilatore costruisce blocchi di istruzioni formati da 128 istruzioni, in modo da fornire 8 blocchi contemporaneamente per core e quindi ogni core gestisce 1024 istruzioni. Le unità funzionali eseguono le istruzioni fuori ordine al fine di sfruttare al meglio il parallelismo del codice. Ogni core può essere configurato in modo da lavorare in modalità singolo thread o multithread. (fino a 4 thread). Il processore è dotato di una cache di secondo livello non-uniform cache access (NUCA). La cache è divisa in blocchi da 64 KB, ogni blocco è connesso direttamente alla sua unità funzionale. Ogni blocco di cache può essere configurato come cache dell'unità funzionale o come parte della memoria mappata. Il progetto prevede fino a 32 processori e può sviluppare fino a 500 GigaFlops di picco a 500 MHz.