Introduzione a BeRTOS, sistema operativo embedded open source. Il sistema 竪 gratuito anche per progetti embedded commerciali grazie alla sua speciale licenza.
This is a basic implementation of the famous game Arkanoid running on a FPGA that I've developed for the final project of Electronic II FPGA course at the University of Trieste.
The development board I've used is TERASIC DE1 with Cyclone II FPGA by Altera.
Features:
- 6 different angles of impact for the sphere.
- The ball striking a brick causes the brick to disappear.
- When all the bricks are gone, the player has won.
- Some bricks are indestructible.
- The Player has 3 lives to win the game.
- Start/Pause and restart game button.
For More Informations and for the english version look at this: http://www.vuolsavest.net/t3o/arkanoidFpga/
Introduzione al framework OpenCL
Anatomia OpenCL
Architettura OpenCL
Esempio OpenCL
HelloWorld in OpenCL
Funzioni in OpenCL
OpenCL in C
Lingua Italiano
Presentazione/Seminario di Francesco Garofalo per il corso di Metodi Numerici per l'Informatica, Computer Scince (Informatica Magistrale), presso Universit degli Studi di Salerno.
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1caioturtle
油
Goodlier ecco il sistema operativo.
Ti spiego cos'竪 e quali sono le problematiche relative alle strutture a 32 e 64 bit dello stesso, dei programmi e dei drivers delle periferiche.
Buona Formazione. Stay Tuned... Till death do us part! Ciao.
This document discusses energy aware networking approaches. It outlines link level approaches like sleeping mode, Energy Efficient Ethernet, and rate adaptation. It also discusses proxying approaches, infrastructure level approaches like energy aware routing, and energy aware applications such as Green TCP/IP and Green BitTorrent. The document provides details on an on-off algorithm for link sleeping that puts interfaces to sleep when buffer occupancy is low and ensures enough time for remaining packets with high probability.
This document discusses green computing and proposes a simulator for evaluating green scheduling algorithms. It begins with background on green computing and why it is important. It then outlines the key components of the simulator, including: a computation model using DAGs, an energy consumption model based on CPU throttling levels, and an abstraction for energy-aware schedulers. The document describes classes for modeling cores, throttling levels, and the overall simulation framework, which is designed to be extensible to different scheduling algorithms, core types, and energy models. The goal is to simulate and evaluate scheduling heuristics to minimize energy consumption while meeting performance targets.
Introduzione a BeRTOS, sistema operativo embedded open source. Il sistema 竪 gratuito anche per progetti embedded commerciali grazie alla sua speciale licenza.
This is a basic implementation of the famous game Arkanoid running on a FPGA that I've developed for the final project of Electronic II FPGA course at the University of Trieste.
The development board I've used is TERASIC DE1 with Cyclone II FPGA by Altera.
Features:
- 6 different angles of impact for the sphere.
- The ball striking a brick causes the brick to disappear.
- When all the bricks are gone, the player has won.
- Some bricks are indestructible.
- The Player has 3 lives to win the game.
- Start/Pause and restart game button.
For More Informations and for the english version look at this: http://www.vuolsavest.net/t3o/arkanoidFpga/
Introduzione al framework OpenCL
Anatomia OpenCL
Architettura OpenCL
Esempio OpenCL
HelloWorld in OpenCL
Funzioni in OpenCL
OpenCL in C
Lingua Italiano
Presentazione/Seminario di Francesco Garofalo per il corso di Metodi Numerici per l'Informatica, Computer Scince (Informatica Magistrale), presso Universit degli Studi di Salerno.
Guida al Computer - Lezione 51 - Il Sistema Operativo Parte 1caioturtle
油
Goodlier ecco il sistema operativo.
Ti spiego cos'竪 e quali sono le problematiche relative alle strutture a 32 e 64 bit dello stesso, dei programmi e dei drivers delle periferiche.
Buona Formazione. Stay Tuned... Till death do us part! Ciao.
This document discusses energy aware networking approaches. It outlines link level approaches like sleeping mode, Energy Efficient Ethernet, and rate adaptation. It also discusses proxying approaches, infrastructure level approaches like energy aware routing, and energy aware applications such as Green TCP/IP and Green BitTorrent. The document provides details on an on-off algorithm for link sleeping that puts interfaces to sleep when buffer occupancy is low and ensures enough time for remaining packets with high probability.
This document discusses green computing and proposes a simulator for evaluating green scheduling algorithms. It begins with background on green computing and why it is important. It then outlines the key components of the simulator, including: a computation model using DAGs, an energy consumption model based on CPU throttling levels, and an abstraction for energy-aware schedulers. The document describes classes for modeling cores, throttling levels, and the overall simulation framework, which is designed to be extensible to different scheduling algorithms, core types, and energy models. The goal is to simulate and evaluate scheduling heuristics to minimize energy consumption while meeting performance targets.
Secondo seminario per il corso di calcolo delle probabilita` e statistica matematica del professor fedullo (conoscere Latex all\'epoca mi avrebbe fatto comodo)
Breve guida per assemblare il nostro nuovo
pc. Divisa in fasi l'intera procedura e presentata in solo documento, cos狸 da rendere pi湛 facile la lettura, e la
comprensione.
Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)Gabriele Guizzardi
油
際際滷 delle 8h di workshop su Raspberry Pi presso Warehouse Coworking Pesaro, 13/12/2014
際際滷s of 8h workshop about Raspberry Pi at Warehouse Coworking Pesaro, 13/12/2014
Linux Capabilities: Un miglior root di SUID root.
Traduzione in lingua italiana delle diapositive presentate alla conferenza organizzata dalla Linux Foundation LinuxCon2014, D端sseldorf, 15 ottobre 2014.
Angelo Impedovo, Linux Day 2016, Programmazione Parallela in openCLAngelo Impedovo
油
Intro to heterogeneous parallel computing on GPU using OpenCL, the entire presentation has been presented during the Linux Day 2016 @ Polytechnic University of Bari (and therefore it is completely written in italian).
Arduino 竪 orientato all'applicazione,
- Permette di provare, partendo dal piccolo e
crescendo pezzo per pezzo (sviluppo modulare);
- Lo sviluppo 竪 aiutato da una enorme community
online con esempi e consigli.
- Economico
- Connessione USB
Un ambiente di sviluppo integrato ovvero IDE
Integrated Development Environment for
programming arduino-1.0.1 (scaricabile dal sito
e installato sul tuo PC)
Pu嘆 essere programmato attraverso un
linguaggio del tutto simile al C basato sul
www.processing.org language.
www.processing.org language.
Una volta creato il codice lo si scarica sul 袖C
della scheda che viene vista come una
periferica dalla quale acquisire informazioni
sulla porta seriale virtuale che il driver della
scheda installa automaticamente
Scritto il programma Arduino potr operare
anche autonomamente eseguendo le istruzioni
inserite al suo interno.
Come Abilitare La Connettivit Usb Con La Famiglia Di Js16 8 A 8 Bit Della Fr...Ionela
油
I dispositivi JS16 sono compatibili con il software della famiglia JM, che fornisce un percorso di migrazione (migration path) diretto verso sistemi a prestazioni pi湛 alte, inclusi gli USB OTG e prestazione a 32-bit con ColdFire.
Teaching within the course "The frontier of the Internet of Things", organized by "Ordine degli Ingegneri della Provincia di Salerno". Lecturing on the subject held "IoT and the Arduino platform" on October 29, 2016
3. PS3: Cluster o console?
Specifiche:
CPU: Processore CELL
GPU: RSX
Memoria: 256Mb XDR Ram principale, 256Mb
GDDR3 VRAM
Hard disk: SATA 2.5'' (dimensioni variabili a
seconda del modello)
Svariate altre periferiche, a seconda del modello
4. PS3: Cluster o console?
Dal sito della IBM: Cell combines a general-purpose Power
Architecture core of modest performance with streamlined
coprocessing elements which greatly accelerate multimedia and
vector processing applications, as well as many other forms of
dedicated computation.
Though sold as a game console, what will in fact enter the
home is a Cell-based computer. - Ken Kutaragi, padre della
console playstation
5. PS3: Cluster o console?
RISPOSTA: CLUSTER E CONSOLE!
Accontenta i videogiocatori, fornendo loro
una notevole esperienza videoludica...
Fornisce un cluster di tutto rispetto per
un prezzo relativamente economico
6. Alcune informazioni
Cell: abbreviazione di Cell Broadband
Engine Architecture (talvolta si trova anche la
sigla CBEA)
Progettato in cooperazione da IBM, Sony e
Toshiba espressamente per la PS3
9. Architettura CELL
1 Power Processor Element (PPE)
8 Synergistic Processor Element (SPE)
Accesso alla memoria
10. PPE: Power Processor Element
A core to rule them all...
Architettura PowerPC a 64 bit 4GHZ (3.2 per la PS3)
Cache L1: 32KB per le istruzioni, 32KB per i dati
Cache L2: 512 KB
Si occupa di mappare i tasks alle SPE
Su di essa viene eseguito il sistema operativo...
... il maggior carico computazionale viene sopportato
dalle SPE
Dual-threaded
in-order
11. PPE: Power Processor Element
Perch竪 in-order?
Per poter fornire le capacit di esecuzione out-
of-order, c'竪 bisogno ovviamente di una
maggiore complessit architetturale
Lo scheduling delle istruzioni 竪 totale
responsabilit del compilatore...
12. Architettura CELL
1 Power Processor Element (PPE)
8 Synergistic Processor Element (SPE)
Accesso alla memoria
14. SPE:Synergistic Processor
Element
Le SPE rappresentano il braccio armato
della PPE...
Architettura SIMD
Si prendono sulle loro spalle il maggior
carico computazionale
128 registri a 128 bit
4 floating point unit capaci di 32GFLOPS e 4
integer unit capaci di 32 GOPS
Local store di 256KB... Manca qualcosa?
15. SPE:Synergistic Processor
Element
Eh? manca la cache!
Motivazioni di questa scelta:
Aggiunge complicazioni, dovute alla natura
stessa della cache
Possiamo usare il Local Store...
16. SPE:Synergistic Processor
Element
LOCAL STORE
Tramite questo la SPE accede alla memoria
(non pu嘆 farlo direttamente)
Possiamo spostare 16byte(128 bit) per ciclo da e
verso la local store... esattamente il carico di
ogni registro!
A differenza della cache, la local store pu嘆
sostenere questo carico per oltre 10000 cicli
17. SPE:Synergistic Processor
Element
Un possibile problema: contesa
Dobbiamo contemporaneamente caricare dati
dalla memoria, scrivere dati in memoria e
scrivere/caricare dati nei/dai registri...
Soluzione:
La local store accede alla memoria in blocchi di
almeno 1024bit per ciclo (circa 0.5 tera al
secondo!)
18. SPE:Synergistic Processor
Element
Local Store vs CACHE
Un tipico esempio: audio processing
Se riesco a caricare all'interno del Local Store l'intero
blocco di audio su cui devo lavorare, annullo gli
accessi alla memoria durante l'esecuzione del
programma...
Impossibile (o comunque estremamente difficile) farlo
con la cache
20. Pensandoci su...
Perch竪 tutto questo funzioni, c'竪 bisogno che
le SPU siano sempre riempite di dati...
Necessit di un sistema di accesso alla
memoria e alle periferiche di I/O altamente
performante...
21. Architettura CELL
1 Power Processor Element (PPE)
8 Synergistic Processor Element (SPE)
Accesso alla memoria
EIB e MMU
Memorie e dispositivi di I/O
22. Element Interconnect Bus
Unisce tutte le componenti sul chip
Composto di 4 anelli da 16byte ciascuno e
permettono di effettuare fino a 3 trasferimenti
simultanei.
Cosa fa?
Si occupa di spostare dati dalla memoria
principale alle SPE e viceversa
Smista le istruzioni della PPE alle varie SPE
23. Element Interconnect Bus
Prestazioni:
96 bytes per ciclo di clock, anche se secondo
l'IBM ne sarebbero disponibili solo 64 nella
pratica
E la protezione della memoria?
Gestita dalle MMU contenute nelle SPE
24. Memory Management Unit
Utilizzate dalle SPE per l'accesso alla
memoria o per accedere agli altri Local Store
Forniscono i meccanismi di coerenza e
protezione della memoria
25. Importanza di EIB e MMU
Entrambi devono essere performanti...
Ma sufficientemente complessi da riuscire a
gestire un enorme flusso di dati da distribuire
in diverse destinazioni e una coda di almeno
128 richieste di memoria
26. Architettura CELL
1 Power Processor Element (PPE)
8 Synergistic Processor Element (SPE)
Accesso alla memoria
EIB e MMU
Memorie e dispositivi di I/O
27. Memorie e dispositivi di I/O
Dati tecnici:
XDR Rambus 256MB
Controller FlexIO
Ampiezza di banda della memoria: 25.6 GB/sec
Ampiezza di banda dei dispositivi di I/O: 76.8
GB/sec
28. Intervallo
Dolorosi incidenti di percorso... (vedi
anche: la zappa sui piedi)
come ho distrutto la playstation (1)
come ho distrutto la playstation (2)
29. Come ho distrutto la playstation
(1)
Configurazione del sistema: Yellow Dog Linux 5.0
Necessario installare il cellsdk, ma a ogni tentativo
ricevo un errore can't update glibc because of
unresolved dependencies
IDEA: rimuovo le dipendenze, tanto se tolgo
qualcosa di importante il sistema mi avviser...
DON
30. Come ho distrutto la playstation
(1)
A fianco vedete il
risultato...
Soluzione:
formattazione e
installazione di
Fedora 5
31. Come ho distrutto la playstation
(2)
Installata fedora 5, ma il cellsdk3.0 richiede fedora
7!
Piano piano, aggiorno glibc dalla versione della 5
alla versione della 7...
installo il cellsdk...
applico varie patch al kernel...
compilo ed eseguo con successo vari programmi...
il tutto senza MAI riavviare la playstation 3!
DON
32. Come ho distrutto la playstation
(2)
La mia espressione
al successivo riavvio
della playstation
Soluzione: installata
fedora 7 e il cellsdk
seguendo le
procedure
standard
34. Una citazione doverosa...
To put it quite bluntly: as long as there were no
machines, programming was no problem at all;
when we had a few weak computers,
programming became a mild problem, and now
we have gigantic computers, programming has
become an equally gigantic problem."
-- E. Dijkstra, 1972 Turing Award Lecture
Sar vero??
35. Programmare con il Cell
Ingredienti:
Conoscerne l'architettura
Tanta pazienza
Linux (Fedora 7.0 o Red Hat Enterprise 5.0)
IBM CellSDK 3.0
36. CellSDK
Scaricabile dal sito della IBM (www.ibm.com)
Fornisce un ambiente di sviluppo per la
programmazione con il Cell, compatibile con
qualsiasi architettura (purch竪 abbia FC 7 o
RHE 5 installato)
37. CellSDK
STRUMENTI DI SVILUPPO
libspe.h, libspe2.h
ppu-gcc
spu-gcc
ppu-embedspu
STRUMENTI DI DEBUGGING
ppu-gdb
spu-gdb
ALTRO
systemsim-cell
38. Altri tools utili non inclusi
nell'sdk
Eclipse + plugin per il cellsdk (richiede la
JVM della IBM)
Anjuta o Kdevelop
39. Hello, Cell!
Obiettivo: scrivere il classico Hello, world
utilizzando tutti le SPE del cell.
1) Isolare il task che ogni SPE dovr eseguire (in
questo caso stampare la stringa Hello, world da
spe_id (dove spe_id 竪 l'id della SPE in
esadecimale)
2) Fare in modo che il PPE mappi il task giusto ad
ogni SPE
40. Hello, Cell!
Il primo passo 竪 abbastanza banale...
#include <stdio.h>
int main(unsigned long long spe_id, unsigned long long argp,
unsigned long long envp){
printf(Hello, world! da 0x%xn,(unsigned int) spe_id);
return 0;
}
#include <stdio.h>
int main(unsigned long long spe_id, unsigned long long argp,
unsigned long long envp){
printf(Hello, world! da 0x%xn,(unsigned int) spe_id);
return 0;
}
41. Hello, Cell!
Passo 2: iniziano i guai...
come indichiamo alla PPE il programma da
includere?
come effettuiamo il mapping ai vari SPE?
42. Hello, Cell!
I programmi che vanno eseguiti dalle SPE
sono scritti per lavorare insieme alla PPE,
ma hanno vengono compilati
indipendentemente
1 compilatore per i programmi della PPE e 1
per i programmi della SPE, rispettivamente
ppu-gcc e spu-gcc
43. Hello, Cell!
spu-gcc produce delle immagini ELF
(Extensible Linking Format) che possono
essere incluse nei programmi della PPE
Ogni immagine ha la propria sezione di dati
e di codice
Le funzioni di Input/Output vengono eseguite
richiedendo il servizio alla PPE
44. Hello, Cell!
extern spe_program_handle
spe_program;
extern spe_program_handle
spe_program;
Ecco come dichiareremo il programma esterno da
inserire nelle SPE all'interno della PPE
Ora... bisogna dire alle SPE di caricare questo
programma!
45. Hello, Cell!
Soluzione: potremmo dire a ogni PPE di
eseguire un thread corrispondente al
programma sopra descritto
In libspe.h, esistono funzioni apposite...
spe_create_thread() - crea un thread che
esegue al suo interno il programma
spe_wait() - aspetta la terminazione di un thread
46. Hello, Cell!
#include <stdio.h>
#include <libspe2.h>
#define NUM_THREAD 6
extern spe_program_handle spe_program;
int main(void){
spe_id_t[NUM_THREAD] spe_id;
int i;
//creiamo i thread...
for(i=0;i<NUM_THREAD;i++){
id[i] = spe_create_thread(0,&spe_program,NULL,NULL,-1,0);
}
//attendiamo la loro terminazione
for(i=0;i<NUM_THREAD;i++){
spe_wait(id[i],NULL,0);
}
}
#include <stdio.h>
#include <libspe2.h>
#define NUM_THREAD 6
extern spe_program_handle spe_program;
int main(void){
spe_id_t[NUM_THREAD] spe_id;
int i;
//creiamo i thread...
for(i=0;i<NUM_THREAD;i++){
id[i] = spe_create_thread(0,&spe_program,NULL,NULL,-1,0);
}
//attendiamo la loro terminazione
for(i=0;i<NUM_THREAD;i++){
spe_wait(id[i],NULL,0);
}
}
49. Hello, Cell!
Riscriviamo il programma usando la
libspe2...
A livello concettuale, vale tutto quello che
abbiamo detto finora...
semplicemente, siamo costretti a usare la
pthread per la gestione dei threads
50. Hello, Cell!
Creazione/distruzione dei thread
pthread_create(id,thread_attr,thread_func,func_arg);
pthread_join(id,value);
Pi湛 alcuni amici da libspe2...
spe_context_create(flags,gang_context)
spe_program_load(spe_context_ptr,program_handle
)
spe_context_run(spe_context_ptr,entry_point,runflag
s,argp,envp,stopinfo)
spe_context_destroy(spe_context_ptr)
51. Amici da libspe2
spe_context_create(flags,gang_context)
flags:
SPE_EVENTS_ENABLE: abilita la gestione degli
eventi
gang_context:
equivalente al thread group, viene creato usando
spe_gang_context_create
Crea il context in cui viene eseguito il programma esterno
52. Amici da libspe2
spe_program_load(spe_context_ptr,progr
am_handle)
spe_context_ptr: puntatore al context spe
program_handle: puntatore al programma da
eseguire all'interno del context specificato
Carica il programma all'interno del context specificato
53. Amici da libspe2
spe_context_run(spe_context_ptr,entry_p
oint,runflags,argp,envp,stopinfo)
spe_context_ptr: puntatore allo spe_context da
eseguire
entry_point: parametro inout
in: il valore dell'instruction pointer da cui il programma
inizier la sua esecuzione
out: il valore dell'instruction pointer al momento della
terminazione del programma
54. Amici da libspe2
spe_context_run(spe_context_ptr,entry_p
oint,runflags,argp,envp,stopinfo)
runflags: or bitwise di pi湛 costanti
0: comportamento di default
SPE_NO_CALLBACKS: vieta l'esecuzione
automatica di callbacks
SPE_RUN_USER_REGS: inizializza i 3 registri della
SPU con i 48bytes puntati da argp
argp: (OPZIONALE) puntatore a dati del
programma passati come secondo argomento
55. Amici da libspe2
spe_context_run(spe_context_ptr,entry_p
oint,runflags,argp,envp,stopinfo)
envp: (OPZIONALE) puntatore a dati specifici
dell'ambiente di esecuzione, passati come terzo
parametro al programma
stopinfo: (OPZIONALE) puntatore a una struttura
spe_stop_info_t in cui scriveremo i dati relativi
alla terminazione del programma
56. Amici da libspe2
spe_context_destroy(spe_context_ptr)
libera le risorse associate a uno spe_context
57. Allora, programmiamo?
typedef struct{
spe_context_ptr_t spe_id;
unsigned long *args;
} thread_arg_t; //wrapping degli argomenti della funzione
void *run_program(void* thread_arg){
unsigned int entry;
entry = SPE_DEFAULT_ENTRY;
spe_stop_info_t stop_info;
ret = spe_context_run(arg->spe,&entry,0,NULL,NULL,&stop_info);
if(ret<0){
perror("Errore di context_run");
return NULL;
}
printf("status %dn",spe_stop_info_read(arg->spe,&stop_info));
return NULL;
}
typedef struct{
spe_context_ptr_t spe_id;
unsigned long *args;
} thread_arg_t; //wrapping degli argomenti della funzione
void *run_program(void* thread_arg){
unsigned int entry;
entry = SPE_DEFAULT_ENTRY;
spe_stop_info_t stop_info;
ret = spe_context_run(arg->spe,&entry,0,NULL,NULL,&stop_info);
if(ret<0){
perror("Errore di context_run");
return NULL;
}
printf("status %dn",spe_stop_info_read(arg->spe,&stop_info));
return NULL;
}
58. Allora, programmiamo?
int main(int argc,char **argv){
int i,ret_value;
spe_context_ptr_t spe[NUM_THREADS];
pthread_t thread[NUM_THREADS];
thread_arg_t arg[NUM_THREADS];
for(i=0;i<NUM_THREADS;i++){
spe[i] = spe_context_create(SPE_EVENTS_ENABLE,NULL);
if(!spe[i]){
perror("spe_context_create error n");
exit(1);
}
ret = spe_program_load(spe[i],&hello_spu);
if(ret){
perror("errore di spe_program_loadn");
exit(1);
}//... CONTINUA
int main(int argc,char **argv){
int i,ret_value;
spe_context_ptr_t spe[NUM_THREADS];
pthread_t thread[NUM_THREADS];
thread_arg_t arg[NUM_THREADS];
for(i=0;i<NUM_THREADS;i++){
spe[i] = spe_context_create(SPE_EVENTS_ENABLE,NULL);
if(!spe[i]){
perror("spe_context_create error n");
exit(1);
}
ret = spe_program_load(spe[i],&hello_spu);
if(ret){
perror("errore di spe_program_loadn");
exit(1);
}//... CONTINUA
59. Allora, programmiamo?
arg[i].spe = spe[i];
arg[i].args = NULL;
ret = pthread_create(&thread[i],NULL,run_spu_program,&arg[i]);
if(ret){
perror("errore di pthread_createn");
exit(1);
}
}
for(i=0;i<NUM_THREADS;i++){
pthread_join(thread[i],NULL);
ret = spe_context_destroy(spe[i]);
if(ret){
perror("errore di spe_context_destroy!n");
exit(1);
}
}
return 0;
}
arg[i].spe = spe[i];
arg[i].args = NULL;
ret = pthread_create(&thread[i],NULL,run_spu_program,&arg[i]);
if(ret){
perror("errore di pthread_createn");
exit(1);
}
}
for(i=0;i<NUM_THREADS;i++){
pthread_join(thread[i],NULL);
ret = spe_context_destroy(spe[i]);
if(ret){
perror("errore di spe_context_destroy!n");
exit(1);
}
}
return 0;
}
60. Compilazione
The old way
spu-gcc -o hello_spu hello_spu.c -g
ppu-embedspu hello_spu hello_spu hello_spu-
embed.o
ar qcs hello_spu.a hello_spu-embed.o
ppu-gcc -o hello hello_ppu.c -lspe2 hello_spu.a
./hello
Makefile
compreso nel cellsdk
61. Funzioni di accesso alla
memoria
int spe_mfcio_put (spe_context_ptr_t spe,
unsigned int lsa, void *ea, unsigned int size,
unsigned int tag, unsigned int tid, unsigned
int rid)
int spe_mfcio_get (spe_context_ptr_t spe,
unsigned int lsa, void *ea, unsigned int size,
unsigned int tag, unsigned int tid, unsigned
int rid)
62. Comunicazione tra 2 SPE
int spe_out_mbox_read (spe_context_ptr_t
spe, unsigned int *mbox_data, int count)
int spe_in_mbox_write (spe_context_ptr_t
spe, unsigned int *mbox_data, int count,
unsigned int behavior)