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