SISTEMI EMBEDDED, ANNO ACCADEMICO 2008/2009 AMBRIC AM2045 Tesina conclusiva per il corso di Sistemi Embedded. 23/01/2009 Docenti: Ing. Paolo Meloni, Ing. Francesca Palumbo AMBRIC AM2045 SOMMARIO AMBRIC .......................................................................................................................................................... 3 I CHIP “MPPA” DELLA AMBRIC.............................................................................................................. 3 AMBRIC AM2000 FAMILY.......................................................................................................................... 5 AMBRIC AM2045........................................................................................................................................... 6 MODELLO DI PROGRAMMAZIONE ....................................................................................................... 7 LA SINCRONIZZAZIONE DEI PROCESSI .............................................................................................. 9 LIVELLO HARDWARE.............................................................................................................................. 11 SR: Streaming RISC ..................................................................................................................................... 12 SRD: Streaming RISC With DSP Extensions............................................................................................. 13 CLUSTER E BRIC: IL CHIP FINALE ...................................................................................................... 14 RIFERIMENTI............................................................................................................................................ 137 2 AMBRIC AM2045 AMBRIC AMBRIC è un' azienda produttrice di semiconduttori di tipo “fabless”, cioè un’azienda che si occupa del design e della vendita dei dispositivi ma non della manifattura, che viene affidata ad altre aziende. E’ stata la prima società produttrice al mondo che ha rilasciato un chip di classe TeraOPS (trilioni di operazioni al secondo) dedicato alla produzione e sviluppo di software per sistemi embedded. L’azienda è stata fondata nel 2003 con sede a Beaverton (Oregon, USA), e si occupa della produzione di Massively Parallel Processor Array chips (MPPA) per sistemi embedded ad alte performance, acceleratori hardware per desktop computer e per applicazioni di tipo server. Nel Novembre 2008 l’azienda ha cessato l’attività a causa della mancanza di fondi necessari per il proseguimento della produzione. I CHIP “MPPA” DELLA AMBRIC Secondo la AMBRIC il Parallelismo Massiccio attualmente rappresenta l’unico modo per continuare a sviluppare significativi miglioramenti di performance rimanendo entro consumi di potenza accettabili. AMBRIC è l’azienda leader nella produzione di “Massive Parallel Processor Arrays” (MPPA), una particolare classe dei Massive Parallel Chip (Chip a Parallelismo Massiccio). Questi chip si distinguono dai Multi-Core General Purpose, che sono generalmente caratterizzati da pochi processori, da una memoria condivisa e da una struttura d’interconnessione di tipo Shared Bus. Gli MPPA implementano il parallelismo di almeno 100 elementi elaborativi come processori completi, ALU, macchine a stati finiti e memorie distribuite. Sono caratterizzati da una fitta e ricca rete d’interconnessione tra questi elementi, che può essere riconfigurata sia staticamente sia dinamicamente. Questo tipo di processori è solitamente utilizzato nei Sistemi Embedded per ottenere alte prestazioni in applicazioni specifiche. Distinguiamo due classi di MPPA: • SIMD (Single Istruction Multiple Data): Viene eseguito un unico flusso d’istruzioni su diversi processori e diversi dati. Molto efficienti per DSP e Network Processing. • MIMD (Multipla Istruction Multiple Data): Ogni processore può avere il suo flusso d’istruzioni parallelo, che lavora con i propri dati. Sono particolarmente difficili da configurare. 3 AMBRIC AM2045 I chip della AMBRIC sono caratterizzati da un particolare programma di parallelizzazione MIMD che rende la configurazione relativamente semplice, e che permette di programmare evitando complesse macchine a stati da codificare e debuggare. In più vengono introdotti degli innovativi canali Asincroni che rimuovono il globale problema della sincronizzazione, grazie ai quali non sono più necessari degli espliciti Task Scheduling da parte del programmatore. Tipicamente i chip della AMBRIC hanno queste caratteristiche: • Architetture a memoria distribuita • Modello di programmazione “Structural Object”: Ogni processore è programmato in Java o in Assembly convenzionale. • Struttura d’interconnessione di tipo NOC: Ogni processore invia dati e messaggi di controllo attraverso una struttura di interconnessione a canali riconfigurabili, che provvedono alla comunicazione e alla sincronizzazione. Alcuni esempi di utilizzo dei processori della AMBRIC sono: • Processi Video HIGH-DEFINITION • Elaborazione di Immagini Mediche • Network Processing • Applicazioni Militari • Riconoscimento di Immagini Figura 1 4 AMBRIC AM2045 AMBRIC AM2000 FAMILY Nell’Ottobre del 2006, durante il “In-Stat’s Fall Microprocessor Forum” di S.Josè, AMBRIC ha presentato la famiglia di processori MPPA “AM2000”, le cui performance superano la soglia di 1TeraOPS (1 trilione di operazioni al secondo). L’obiettivo dell’azienda nella produzione di questa famiglia era di ottenere un MPPA relativamente semplice da programmare. Questi chip seguono tre tendenze abbastanza diffuse nell’attuale mercato dei semiconduttori: • Design di processori Multicore • Intenso “Parallel Processing” • Programmazione orientata a oggetti. Per creare questa famiglia di processori in un primo momento è stato pensato e sviluppato un modello di programmazione che risultasse semplice al programmatore; successivamente è stata sviluppata l’architettura hardware in modo che fosse ottimizzata per tale modello. I processori in commercio appartenenti a questa famiglia sono: PROCESSORE NUMERO DI PROCESSORI AM2045 AM2029 AM2016 336 @ 333 MHz 216 @ 333 MHz 120 @ 333 MHz PREZZO (In Dollari per 1000 unità) $325 $210 $89 Tabella 1: Caratteristiche dei Chip della famiglia AM2000 5 AMBRIC AM2045 AMBRIC AM2045 Il “Top-Class” della famiglia AM2000 è l’AM2045, che attualmente si trova in commercio con le seguenti caratteristiche: • 117 milioni di transistor fabbricati con processo CMOS a 0.13 micron • 336 processori RISC a 32-bit a memoria distribuita, ciascuno con frequenza massima di 333 MHz • Sistema di interconnessione di tipo Network On Chip (NOC) • Performance massime (teoriche) di oltre 1 trilione di operazioni al secondo • Consumo di potenza compreso tra i 6V e i 12V a seconda delle applicazioni. La figura 2 mostra un panorama dei principali processori Multicore aggiornato al 2006, anno dell’uscita sul mercato dell’AM2045. Figura 2 6 AMBRIC AM2045 MODELLO DI PROGRAMMAZIONE Com’è stato già detto, il punto di partenza nella creazione di questo processore è stato lo sviluppo da parte di AMBRIC di un particolare modello di programmazione. Questo modello, di tipo SOPM (Structural Object Programming Model), prevede che un’applicazione sia organizzata come un diagramma a blocchi generico (o workflow), i cui blocchi, chiamati Oggetti base (in pratica delle porzioni di codice) vengano eseguiti in parallelo, ognuno nel proprio processore. Partendo da questo modello Ambric ha sviluppato le sue architetture in modo che: • Un chip sia composto da talmente tanti processori che un Oggetto possa appartenere a un processore, senza che tale processore venga conteso con altri Oggetti. • Gli Oggetti più complessi possano essere eseguiti da processori multipli in serie. • Alcuni Oggetti di dimensioni elevate possano essere divisi in parti con un elevato grado di autonomia e indipendenza, e distribuiti in diverse memorie locali, di modo che possano essere eseguiti su più processori in parallelo • Gli Oggetti possano comunicare tra di loro tramite strutture di canali dedicati. L’obbiettivo è quello di massimizzare il througput complessivo minimizzando le latenze locali. Il pacchetto software è basato sull’IDE (Ambiente di Sviluppo Integrato) Eclipse, e include un editor, un compilatore, un assembler, un simulatore, un tool per la configurazione, un source-code debugger e alcune librerie. Pur non essendo un chip Java, l’AM2045 ha adottato Java per la sua familiarità e per il fatto che è un linguaggio orientato a Oggetti. Il programmatore scrive il suo codice in Java (o in Assembly), dopodiché il software sviluppato da AMBRIC individua gli Oggetti, converte la sorgente JAVA in un linguaggio proprio della macchina, e mappa automaticamente gli Oggetti compilati nei vari processori che compongono l’array. Nella figura 3 possiamo osservare come viene divisa un’applicazione sui diversi core. Figura 3 • L’applicazione viene divisa in Oggetti, che vengono mappati sui vari core • Gli Oggetti semplici, detti anche “Primitivi”, vengono eseguiti su un unico processore • Gli Oggetti più complessi, detti anche “Compositi”, vengono eseguiti su diversi core. 7 AMBRIC AM2045 Il programmatore, oltre alla mappatura automatica eseguita dal software fornito dalla AMBRIC, ha altre opzioni per connettere gli Oggetti insieme in una struttura parallela. Viene messa a disposizione una interfaccia grafica che permette, attraverso dei semplici diagrammi, di creare una rete di “parallelizzazione” degli Oggetti. In alternativa esiste anche un linguaggio testuale denominato “aStruct” che permette sempre di generare una “mappatura manuale” degli Oggetti nei vari core. La Figura 4 sintetizza il funzionamento dell’SOPM della Ambric: vengono definiti gli oggetti e il flusso di dati e di controllo associato; gli oggetti vengono poi codificati in assembly o Java (sono disponibili diverse funzioni di libereria che semplificano la codifica), e vengono compilati. Viene verificata l’implementazione mediante un simulatore, dopodiché si passa all’implementazione fisica utilizzando il Tool di Map&Routing. Come test finale viene verificato il corretto funzionamento dell’applicazione mediante un sistema per il Debug. Figura 4 8 AMBRIC AM2045 LA SINCRONIZZAZIONE DEI PROCESSI Fisicamente i vari Oggetti, e quindi i processori e i vari blocchi logici, comunicano tra di loro attraverso una semplice rete “On Chip” di canali hardware. Ogni canale è un piccolo fascio di wire delle dimensioni (in bit) di una parola (generalmente 32-bit). I canali sono unidirezionali e implementano un collegamento point-topoint da un Oggetto all’altro. L’AM2045 è un chip a memoria distribuita, quindi la comunicazione tra i processori avviene mediante lo scambio di messaggi (sia di dati sia di controllo), che possono essere semplici o strutturati. Una delle caratteristiche più importanti dell’AM2045 è che i vari core non sono sincronizzati alla stessa frequenza di clock, ma ogni core ha una propria frequenza che può andare dai 1.0 MHz ai 333 MHz. La frequenza di ogni processore è dettata dal carico di lavoro del software. Localmente ogni processore segue però una logica sincrona. Questa organizzazione di clock a frequenze indipendenti viene chiamata GALS (Globally Asynchronous, Locally Synchronous). I canali dati oltre ad essere responsabili della comunicazione tra i core sono anche responsabili della sincronizzazione dei processi. Infatti alle estremità di questi canali sono presenti dei registri “Speciali” che sono i diretti responsabili della sincronizzazione. Questi svolgono funzioni diverse dai normali registri, ma i processori possono accedere a essi con normali operazioni di load-store. Ciò significa che inviare o ricevere messaggi su un canale è semplice come la lettura o la scrittura su un registro. Questa soluzione permette un passaggio di messaggi immediato tra processori vicini, e ciascun messaggio è simultaneamente un evento di comunicazione e di sincronizzazione. I canali “AMBRIC”, e i loro registri, rappresentano il vero e proprio cuore dell’hardware, che implementa il particolare modello di programmazione. La Figura 5 mostra il funzionamento dei registri in un canale. Figura 5 9 AMBRIC AM2045 • Ogni registro ha un ingresso (data_in) e un uscita (data_out) per i dati. • Ogni registro è pilotato da 4 segnali di controllo: un ingresso e un uscita “valid”, e un ingresso e un uscita “accept” Il protocollo di comunicazione tra due registri è molto semplice: • Quando un registro può accettare un input, mette alta l’uscita “accept” • Quando un registro ha un dato pronto in uscita, mette alta l’uscita “valid” • Senza bisogno di trattare o di inviare Acknowledgment, quando i due registri vicino vedono i due segnali di controllo che li lega entrambi alti, sanno che la comunicazione è avvenuta. Questo tipo di sincronizzazione effettuata a livello locale consente di ottenere alte performance senza una complessa sincronizzazione globale. Figura 6 La figura 6 mostra la comunicazione tra due registri vicini X e Y. Il Messaggio viene scambiato solo quando X è pronto per inviare il messaggio (Xp alto) e Y è pronto per riceverlo (Yc alto). La figura 7 mostra come i vari blocchi logici e i processori utilizzino i segnali “valid” e “accept” per ricevere input o per inviare dati su un canale, ed è proprio grazie a questi eventi di trasferimento che i vari blocchi vengono sincronizzati internamente e con il mondo esterno. Figura 7 10 AMBRIC AM2045 LIVELLO HARDWARE A partire dal modello di programmazione che è stato illustrato, l’Ambric definisce l’architettura del chip. Il massively parralel array è implementato tramite l’utilizzo di cluster replicati all’interno di una struttura che viene definita BRIC (nella figura 8 viene evidenziato un BRIC all’interno dall’array). Il nome stesso dell’azienda (AMBRIC) fa riferimento a questi “mattoncini” utilizzati nella creazione dei chip (la prima parte fa riferimento alla caratteristica asincrona dei loro chip, Asynchronous Machine). Questi BRICS sono funzionalmente identici e sono disposti in maniera speculare l’uno rispetto all’altro. I componenti all’interno di ciascun Bric possono tuttavia variare a seconda delle funzionalità rischieste. In generale ciascun Bric nell’Am2045 contiene almeno un processore RISC a 32-bit con una ALU intera. I processori RISC a 32-bit disegnati dall’Ambric per la propria architettura sono 2: • SR: Streaming RISC • SRD: Streaming RISC with DSP extensions. Analizziamo ora la struttura dei due processori, e vediamo come, partendo da questi, si sviluppa l’architettura dell’AM2045. Figura 8 11 AMBRIC AM2045 SR: Streaming RISC I processori SR sono destinati a eseguire codici relativi a piccoli oggetti, in particolare il loro compito è quello di elaborare dati ai fini di controllo o eseguire trasformazioni su dati che serviranno poi ai processori di tipo SRD. La figura 9 ci permette di osservare meglio l’architettura relativa agli SR: Figura 9 Questa architettura è costituita da una sola ALU in grado di eseguire un'unica operazione a 32 bit o due operazioni da 16-bit ad ogni ciclo di clock. Per i codici ad alta densità le istruzioni sono solitamente lunghe 16 bit. Le istruzioni utilizzate sono quelle “classiche” per un processore RISC, cioè caratterizzate da due operandi da 32 bit ciascuno per produrre un risultato anch’esso da 32 bit. Il processore SR inoltre contiene otto registri da 32 bit e 256 byte di memoria locale per il caching di dati o istruzioni(64 word da 4 byte ciascuna). Sempre dalla figura 7 si può evidenziare come questi registri siano separati dai registri di canale che collegano insieme i vari core. Tuttavia il processore può accedere ai registri del canale con la stessa facilità con cui accede ai registri general porpuse. 12 AMBRIC AM2045 SRD: Streaming RISC With DSP Extensions. I processori SRD sono invece caratterizzati dalla seguente architettura (Figura 10): Figura 10 Questo processore è più potente rispetto al processore SR. E’ caratterizzato da 3 ALU, di cui due in serie (ALUS e ALUM) e una in parallelo (ALUE). Ciascuna delle due ALU in serie può eseguire un operazione da 32 bit,oppure due operazioni da 16 bit o quattro operazioni da 8 bit per ciclo di clock. La terza ALU è pipelined e può eseguire operazioni Multiply-accumulate (MAC) o somme di differenze assolute. Il processore SRD inoltre contiene 18 registri general purpose a 32 bit e un accumulatore a 64 bit, più una memoria da 1kB per il caching di dati o istruzioni. 13 AMBRIC AM2045 CLUSTER E BRIC: IL CHIP FINALE Passando ad un livello superiore dell’architettura possiamo notare come ciascun BRIC viene definito a partire da un cluster costituito da un SR e un SRD a cui si aggiungono una memoria locale e tutte le interconnessioni e le strutture di controllo necessarie per una rapida comunicazione tra le varie parti. Lo schema seguente (Figura 11) rappresenta la struttura base di un cluster: Figura 11 Ogni cluser contiene quattro processori, due SR e due SRD, interconnessi da una rete di canali. Ciascuno di questi processori è connesso con una memoria locale da 1 KB. Queste memorie sono un supplemento alle memorie “private” di ciascun processore (memorie da 256 bytes per ogni SR e memorie da 1 kB per i processori SDR). I quattro processori interni al cluster possono condividere le memorie da 1 Kb in vari modi a seconda delle rischieste del software (memorizzazione dati, memorizzazione istruzioni, buffering dei risultati...) Questa struttura viene poi ribaltata in maniera speculare. In definitiva quindi ciascun BRIC è costituito da due cluster disposti in maniera speculare. Questa disposizione risulta essere molto importante perché grazie a 14 AMBRIC AM2045 questa configurazione, i raggruppamenti di core sono vicini il più possibile alle memorie locali. In questo modo, se il compito richiesto dal software è troppo complesso per poter essere svolto da un solo BRIC, diversi BRICS vicini si possono “accorpare” per svolgere la sessa operazione, condividendo le loro memorie locali. Questo raccordo consente quindi a ciascun processore di accedere fino a un massimo di 16 kB di memoria locale, che condivide con i quattro BRICS vicini. Il passo finale nella creazione del Chip è quello di unire i vari BRICS in un array e avvolgere il tutto con una serie di interfacce I/O. La figura 12 mostra un BRIC inserito in una porzione dell’array. Figura 12 L’Am2045, nella sua prima implementazione, era costituito da un array di 5x9 BRICS, ciascun con otto core (quattro SR e quattro SRD) e 8 KB di memoria locale, per un totale di 360 processori e 360 KB di memoria RAM. Aggiungendo poi le memorie contenute in ciascun processore si arrivava quindi a 585 KB di memoria totale. Nell’implementazione definitiva non tutti i BRICS contengono 8 cores, infatti, a livello commerciale l’AM2045 è un Array formato da 336 processori (e non 360). 15 AMBRIC AM2045 Per quanto riguarda le periferiche di I/O l’Ambric si rifà all’utilizzo di standard industriali definiti da altri fornitori. Il layout fisico finale del’ Am2045 è il seguente (Figura 13): Figura 13 Sono presenti due DDR2-400 DRAM controller,quattro linee PCI Express controller,128 general-purpose porte di I/O(100 MHz),una porta JTAG per il debug. Attualmente è presente in commercio il chip AM2045 B, che rispetto alla prima (AM2045 A)versione presenta notevoli miglioramenti: • 336 Processori RISC a 32-bit, con una frequenza di 350 MHz • 1.2 Tera OPS (Teoriche) • Incremento del 60% della memoria On Chip • Notevole miglioramento delle prestazioni dei canali di interconnessione. Am2045 45-bric Chip TI C641x DSP Xilinx Virtex-4 LX100 - LX200 Process 130nm 90nm 90nm MHz 350 MHz 1,000 MHz 500 MHz Nominal Published DSP Benchmarks 10-25X throughput, 1/3 the code 1X n/a 4 GMACS 48 GMACS Multiply-Accum./Sec. 60 GMACS (16x16 to 32-bit) Tabella 2: Prestazioni a Confronto 16 AMBRIC AM2045 RIFERIMENTI • http://www.ambric.com/pdf/MPR_Ambric_Article_10-06_204101.pdf • http://www.ambric.com/documentation/Documentation/MPPAs/EmbeddedProductsOverview_102808 .pdf • http://www.ambric.com/about/ • http://www.macitynet.it/aggiornamac/aA30671/acceleratori_hardware_ambric_per_applicazioni_adob e_pyro_sorenson.shtm • http://en.wikipedia.org/wiki/Ambric • http://en.wikipedia.org/wiki/MPPA 17