1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image...

53
1 di Messina di Messina Facoltà di Ingegneria Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Visilab – Computer Vision and Image Processing Lab Lab Nanodesktop Software development kit per sistemi embedded Uno sguardo agli internals Corso di Sistemi Operativi II Messina, 11/12/2009 Seminario tenuto dall’ing. Filippo Battaglia

Transcript of 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image...

Page 1: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

11

Università degli Studi di MessinaUniversità degli Studi di MessinaFacoltà di IngegneriaFacoltà di Ingegneria

Visilab – Computer Vision and Image Processing LabVisilab – Computer Vision and Image Processing Lab

NanodesktopSoftware development kit per sistemi embedded

Uno sguardo agli internals

Corso di Sistemi Operativi IIMessina, 11/12/2009Seminario tenuto dall’ing. Filippo Battaglia

Page 2: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

22

Nella scorsa lezione abbiamo iniziato a vedere le caratteristicheNella scorsa lezione abbiamo iniziato a vedere le caratteristiche

di Nanodesktop, un SDK per piattaforme embedded di Nanodesktop, un SDK per piattaforme embedded

sviluppato presso il laboratorio Visilab di questa sviluppato presso il laboratorio Visilab di questa

Università.Università.

In questa lezione, analizzeremo alcuni aspetti relativi agliIn questa lezione, analizzeremo alcuni aspetti relativi agli

internals di Nanodesktop.internals di Nanodesktop.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 3: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

33

Ricordiamo che l’ultima volta avevamo analizzato la Ricordiamo che l’ultima volta avevamo analizzato la

Nanodesktop System Architecture. Nanodesktop System Architecture.

Avevamo detto che il nucleo del sistema nd è diviso in due Avevamo detto che il nucleo del sistema nd è diviso in due

parti: l’HAL, parti: l’HAL, Hardware Abstraction Layer, Hardware Abstraction Layer, che ha la funzioneche ha la funzione

di nascondere agli strati superiori del software le caratteristichedi nascondere agli strati superiori del software le caratteristiche

specifiche della piattaforma, ed il livello CODE, che contienespecifiche della piattaforma, ed il livello CODE, che contiene

le parti che non sono specifiche per l’hardwarele parti che non sono specifiche per l’hardware

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 4: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

44Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 5: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

55

Nanodesktop tecnology

Page 6: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

66

Problema: Problema:

Come possiamo realizzare un window manager che sia veloceCome possiamo realizzare un window manager che sia veloce

ed efficiente ?ed efficiente ?

Ci poniamo dei requisiti.Ci poniamo dei requisiti.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 7: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

77

Il nostro window manager:Il nostro window manager:

- deve rinunciare alla compatibilità con X-Window e con Window GDI.- deve rinunciare alla compatibilità con X-Window e con Window GDI.

Eventuali estensioni (SDL) verranno aggiunte solo in seguito e Eventuali estensioni (SDL) verranno aggiunte solo in seguito e

gireranno gireranno sul sul codice nativo attraverso codice nativo attraverso un layer di traduzione;un layer di traduzione;

- deve gestire un numero di finestre limitato a n (e non infinito);deve gestire un numero di finestre limitato a n (e non infinito);

- deve gestire un limitato numero di effetti (trasparenze, wallpapers ok, ma niente supporto per finestre 3d, temi del deve gestire un limitato numero di effetti (trasparenze, wallpapers ok, ma niente supporto per finestre 3d, temi del desktop odesktop o

tab ad esempio);tab ad esempio);

- deve supportare i font TrueType tramite la libreria FreeType;deve supportare i font TrueType tramite la libreria FreeType;

- deve supportare il puntatore del mouse;deve supportare il puntatore del mouse;

- deve supportare gli sprite;deve supportare gli sprite;

- deve fornire delle dialog box già a disposizione degli sviluppatorideve fornire delle dialog box già a disposizione degli sviluppatori

per compiti specifici (per esempio, per la selezione di un file)per compiti specifici (per esempio, per la selezione di un file)

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 8: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

88

- deve gestire i menudeve gestire i menu- deve essere accelerato in hardwaredeve essere accelerato in hardware- deve avere il supporto per il char overscreen;deve avere il supporto per il char overscreen;- deve gestire una finestra di default per l’output StdOut/StdErrdeve gestire una finestra di default per l’output StdOut/StdErr

Molti window manager (specie sotto Unix) sono lenti a causa diMolti window manager (specie sotto Unix) sono lenti a causa discelte architetturali particolari (comunicazione tramite socket scelte architetturali particolari (comunicazione tramite socket Unix tra X-client ed X-server).Unix tra X-client ed X-server).

Una libreria C, piccola, compatta ed efficiente permette di Una libreria C, piccola, compatta ed efficiente permette di ottenere prestazioni superiori: il prezzo che si paga è un ottenere prestazioni superiori: il prezzo che si paga è un aspetto spartano e la perdita di compatibilità con il softwareaspetto spartano e la perdita di compatibilità con il softwarepreesistentepreesistente

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 9: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

99

Cerchiamo di capire come funziona, a grandi linee, il sistemaCerchiamo di capire come funziona, a grandi linee, il sistema

grafico di Nanodesktopgrafico di Nanodesktop

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 10: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1010

I dati relativi ad ogni singola finestra sono memorizzati inI dati relativi ad ogni singola finestra sono memorizzati inuna struct chiamata una struct chiamata WindowData. WindowData.

Questa struct contiene dei puntatori a delle aree di memoriaQuesta struct contiene dei puntatori a delle aree di memoriache contengono il contenuto della finestra. che contengono il contenuto della finestra.

Queste aree si chiamano:Queste aree si chiamano:

- charmap;charmap;- color char map;color char map;- window space (WS)window space (WS)- service space (SS)service space (SS)- winsprite screen (WSPR)winsprite screen (WSPR)- logical page (LP)logical page (LP)

Queste aree vengono allocate/deallocate dinamicamente dalla libreriaQueste aree vengono allocate/deallocate dinamicamente dalla libreriasulla base delle richieste dei programmi e delle esigenze effettive.sulla base delle richieste dei programmi e delle esigenze effettive.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 11: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1111

Anche ciò che è presente sullo sfondo delle finestre èAnche ciò che è presente sullo sfondo delle finestre è

memorizzato in apposite aree di memoria gestitememorizzato in apposite aree di memoria gestite

dinamicamente. dinamicamente.

Esse sono:Esse sono:

- il base screen (BS)il base screen (BS)

- lo sprite screen (SPR)lo sprite screen (SPR)

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 12: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1212

Analizziamo il sorgente di un programma NanodesktopAnalizziamo il sorgente di un programma Nanodesktop

#include <nanodesktop.h>#include <nanodesktop.h>

int ndMain()int ndMain()

{{

int CounterX, CounterY, WndHandle;int CounterX, CounterY, WndHandle;

ndInitSystem();ndInitSystem();

WndHandle=ndLP_CreateWindow (5, 5, 400, 250, "Prova", COLOR_WHITE, COLOR_LBLUE,WndHandle=ndLP_CreateWindow (5, 5, 400, 250, "Prova", COLOR_WHITE, COLOR_LBLUE,

COLOR_BLACK, COLOR_WHITE, 0);COLOR_BLACK, COLOR_WHITE, 0);

if (WndHandle>=0)if (WndHandle>=0)

{{

ndLP_MaximizeWindow (WndHandle);ndLP_MaximizeWindow (WndHandle);

for (CounterY=0; CounterY<4; CounterY++)for (CounterY=0; CounterY<4; CounterY++)

{{

for (CounterX=0; CounterX<4; CounterX++)for (CounterX=0; CounterX<4; CounterX++)

{{

ndWS_DrawRtRectangle (40+60*CounterX, 30+50*CounterY, 30, 30,ndWS_DrawRtRectangle (40+60*CounterX, 30+50*CounterY, 30, 30,

ndWndColorVector [4*CounterY+CounterX], COLOR_YELLOW,ndWndColorVector [4*CounterY+CounterX], COLOR_YELLOW,

NDKEY_BORDER_SIZE (5) | ND_ROUNDED | NDKEY_ROTATE (45),NDKEY_BORDER_SIZE (5) | ND_ROUNDED | NDKEY_ROTATE (45),

WndHandle, NORENDER);WndHandle, NORENDER);

}}

}}

XWindowRender (WndHandle);XWindowRender (WndHandle);

}}

}}

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 13: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1313

che dà il seguente risultato:che dà il seguente risultato:

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 14: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1414

Il sistema grafico di Nanodesktop si basa su un sistema diIl sistema grafico di Nanodesktop si basa su un sistema di

renderer. renderer. Questi si distinguono in renderer di primo e di Questi si distinguono in renderer di primo e di

secondo livello. I renderer di secondo livello vengono richiamati secondo livello. I renderer di secondo livello vengono richiamati

dal programma applicativo in C tramite apposite routine:dal programma applicativo in C tramite apposite routine:

XWindowRender (WndHandle);XWindowRender (WndHandle);

WinSpritesRender (WndHandle);WinSpritesRender (WndHandle);

BaseScreenRender ();BaseScreenRender ();

SpritesRender ();SpritesRender ();

I renderer di secondo livello richiamano internamente il rendererI renderer di secondo livello richiamano internamente il renderer

di primo livello:di primo livello:

WindowsRender ();WindowsRender ();

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 15: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1515

In Nanodesktop, l’aspetto globale di una finestra (titolo,In Nanodesktop, l’aspetto globale di una finestra (titolo,

contenuto, pulsanti di chiusura e di ridimensionamentocontenuto, pulsanti di chiusura e di ridimensionamento

ecc. ecc.) è contenuto dentro un array chiamato ecc. ecc.) è contenuto dentro un array chiamato

pagina logica pagina logica (LP, logical page). (LP, logical page).

Ogni finestra ha assegnata una propria logical page.Ogni finestra ha assegnata una propria logical page.

WindowsRender()WindowsRender() analizza i dati presenti nelle varie analizza i dati presenti nelle varie

pagine logiche e ricostruisce il frame video finale in una pagine logiche e ricostruisce il frame video finale in una

pagina nascosta del framebuffer della PSP.pagina nascosta del framebuffer della PSP.

Al termine, una commutazione della pagina video attiva faAl termine, una commutazione della pagina video attiva fa

apparire il frame istantaneamente (tecnica del apparire il frame istantaneamente (tecnica del double bufferingdouble buffering))

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 16: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1616

Per capire l'attività del renderer di livello LP, è sufficiente guardare questa figura:Per capire l'attività del renderer di livello LP, è sufficiente guardare questa figura:

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 17: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1717

L’algoritmo usato da WindowsRender è molto sofisticato.L’algoritmo usato da WindowsRender è molto sofisticato.

Infatti, Nanodesktop deve gestire Infatti, Nanodesktop deve gestire ad ogni frame: ad ogni frame:

- sovrapposizione di finestresovrapposizione di finestre

- spritessprites

- trasparenzetrasparenze

- wallpaperswallpapers

Per incrementare la velocità di rendering, Nanodesktop usa unoPer incrementare la velocità di rendering, Nanodesktop usa uno

speciale algoritmo chiamato speciale algoritmo chiamato accelerazione NanoTile. accelerazione NanoTile.

Tale algoritmo fa uso del chip grafico della PSP per incrementareTale algoritmo fa uso del chip grafico della PSP per incrementare

la velocità di renderingla velocità di rendering

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 18: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1818

Nanodesktop divide ogni frame in diverse tessere (Nanodesktop divide ogni frame in diverse tessere (tilestiles). ).

Quando si esegue WindowsRender(), Nanodesktop esegue unaQuando si esegue WindowsRender(), Nanodesktop esegue una

serie di chiamate al chip grafico della PSP, visualizzando adserie di chiamate al chip grafico della PSP, visualizzando ad

una ad una le varie tileuna ad una le varie tile

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 19: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

1919

Il chip grafico della PSP è estremamente veloce. La copia di datiIl chip grafico della PSP è estremamente veloce. La copia di dati

è molto più rapida quando eseguita con è molto più rapida quando eseguita con sceGuCopyImage() sceGuCopyImage()

piuttosto che quando viene eseguita via software. piuttosto che quando viene eseguita via software.

Quindi, grazie a NanoTile, noi possiamo ridurre il problema delQuindi, grazie a NanoTile, noi possiamo ridurre il problema del

rendering del frame ad una successione di chiamate all’acceleratorerendering del frame ad una successione di chiamate all’acceleratore

grafico. (Sotto PSPE, l’unità hardware blitter non è presente,grafico. (Sotto PSPE, l’unità hardware blitter non è presente,

quindi l’HAL la emula via software). quindi l’HAL la emula via software).

L’algoritmo NanoTile è progettato in modo che, se solo una parteL’algoritmo NanoTile è progettato in modo che, se solo una parte

dello schermo viene modificata, Nanodesktop renderizzerà solo quella.dello schermo viene modificata, Nanodesktop renderizzerà solo quella.

Le altre parti dello schermo non vengono renderizzate se non Le altre parti dello schermo non vengono renderizzate se non

sono cambiate. Questo approccio migliora le prestazioni. sono cambiate. Questo approccio migliora le prestazioni.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 20: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2020

E’ necessario comprendere che WindowsRender() è solo unaE’ necessario comprendere che WindowsRender() è solo una

routine a basso livello. Raramente i software applicativi laroutine a basso livello. Raramente i software applicativi la

richiamano direttamente. richiamano direttamente.

Le applicazioni di solito richiamano dei render di secondo livello,Le applicazioni di solito richiamano dei render di secondo livello,

come come XWindowRender() XWindowRender() che agiscono su una singola finestrache agiscono su una singola finestra

e che, al termine del lavoro, richiamano internamentee che, al termine del lavoro, richiamano internamente

WindowsRender() riunendo il contenuto delle varie finestre inWindowsRender() riunendo il contenuto delle varie finestre in

un singolo frame.un singolo frame.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 21: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2121

La chiamataLa chiamata

XWindowRender (WndHandle)XWindowRender (WndHandle)

avvia il rendering nella finestra con handle WinHandle.avvia il rendering nella finestra con handle WinHandle.

Il compito di XWindowRender() è quello di eseguire il mergingIl compito di XWindowRender() è quello di eseguire il merging

dei contenuti, relativi ad una sola finestra, dei seguenti spazi: dei contenuti, relativi ad una sola finestra, dei seguenti spazi:

- char mapchar map

- color char mapcolor char map

- window spacewindow space

- service spaceservice space

- winsprite spacewinsprite space

Alla fine, viene ottenuto l’aggiornamento della pagina logica Alla fine, viene ottenuto l’aggiornamento della pagina logica

assegnata alla finestra. E’ a questo punto che XWindowRender()assegnata alla finestra. E’ a questo punto che XWindowRender()

richiama internamente WindowsRender() e tutto il frame vienerichiama internamente WindowsRender() e tutto il frame viene

renderizzato sullo schermo.renderizzato sullo schermo.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 22: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2222

Questo schema spiega meglio l’attività di XWindowRender().Questo schema spiega meglio l’attività di XWindowRender().

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

XWindowRender

WindowsRender

Page 23: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2323

Problema: che cosa accade se siamo in una applicazioneProblema: che cosa accade se siamo in una applicazione

multithreading ?multithreading ?

Come possiamo rendere il sistema grafico di NanodesktopCome possiamo rendere il sistema grafico di Nanodesktop

thread-safe ?thread-safe ?

La risposta è La risposta è Phoenix Graphic Subsystem.Phoenix Graphic Subsystem.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 24: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2424

Supponiamo che due thread eseguano XWindowRender() Supponiamo che due thread eseguano XWindowRender()

contemporaneamente o, meglio, che il thread 1 inizi uncontemporaneamente o, meglio, che il thread 1 inizi un

XWindowRender mentre il thread 2 non ha ancora terminatoXWindowRender mentre il thread 2 non ha ancora terminato

la sua chiamata alla medesima routine. la sua chiamata alla medesima routine.

Poichè XWindowRender e WindowsRender usano un unicoPoichè XWindowRender e WindowsRender usano un unico

set di variabili ed un unico acceleratore grafico, il tentativo diset di variabili ed un unico acceleratore grafico, il tentativo di

eseguire le 2 operazioni di rendering senza un meccanismoeseguire le 2 operazioni di rendering senza un meccanismo

di accodamento porterebbe ad un crash del sistema.di accodamento porterebbe ad un crash del sistema.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 25: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2525

Potreste pensare allora ad un Potreste pensare allora ad un mutex (semaforo) mutex (semaforo) che risolva ilche risolva il

problema:problema:

il thread 1 viene sospeso, finchè il thread 2 non ha terminatoil thread 1 viene sospeso, finchè il thread 2 non ha terminato

la sua richiesta di rendering. la sua richiesta di rendering.

Questo approccio è detto di tipo Questo approccio è detto di tipo bloccante bloccante (blocking).(blocking).

Il problema è che porta a delle perdite di prestazioni: in alcuniIl problema è che porta a delle perdite di prestazioni: in alcuni

casi, potrebbe essere conveniente che sia il thread 1 che ilcasi, potrebbe essere conveniente che sia il thread 1 che il

thread 2 possano eseguire l’aggiornamento dello schermothread 2 possano eseguire l’aggiornamento dello schermo

nell’ambito della nell’ambito della stessastessa chiamata al renderer di primo livello. chiamata al renderer di primo livello.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 26: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2626

Il sistema di rendering Phoenix di Nanodesktop risolve ilIl sistema di rendering Phoenix di Nanodesktop risolve il

problema in modo elegante.problema in modo elegante.

La routine WindowsRender() viene divisa in 2 parti:La routine WindowsRender() viene divisa in 2 parti:

- un componente client;un componente client;

- un componente server;un componente server;

All’avvio, Nanodesktop fa partire un thread ad alta prioritàAll’avvio, Nanodesktop fa partire un thread ad alta priorità

((PhoenixGraph threadPhoenixGraph thread) che esegue un ciclo continuo, ponendosi) che esegue un ciclo continuo, ponendosi

in attesa di richieste di rendering da parte dei thread deiin attesa di richieste di rendering da parte dei thread dei

programmi applicativi. programmi applicativi.

La componente server di XWindowRender sarà fisicamente La componente server di XWindowRender sarà fisicamente

eseguita eseguita solosolo da questo thread di sistema. da questo thread di sistema.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 27: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2727

I thread applicativi si limitano ad eseguire la componente clientI thread applicativi si limitano ad eseguire la componente client

di WindowsRender(). Quando un thread esegue tale routine,di WindowsRender(). Quando un thread esegue tale routine,

viene posto in attesa ed il controllo viene passato ai threadviene posto in attesa ed il controllo viene passato ai thread

successivi. successivi.

Anche questi potrebbero eseguire dei WindowsRender()Anche questi potrebbero eseguire dei WindowsRender()

mettendosi in stato di attesa. mettendosi in stato di attesa.

Ad un certo istante t, ci saranno n thread in attesa che hannoAd un certo istante t, ci saranno n thread in attesa che hanno

registrato la propria richiesta di rendering in un appositoregistrato la propria richiesta di rendering in un apposito

registro interno di nd, ed il controllo passerà al registro interno di nd, ed il controllo passerà al PhoenixPhoenix

Graph Thread. Graph Thread.

Quest’ultimo leggerà i registri di richiesta rendering, e Quest’ultimo leggerà i registri di richiesta rendering, e

soddisferà le richieste soddisferà le richieste in un’unica istanza. in un’unica istanza. Alla fine, i threadAlla fine, i thread

clienti vengono riattivati uno alla voltaclienti vengono riattivati uno alla volta

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 28: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2828

Questo schema mostra quanto detto:Questo schema mostra quanto detto:

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 29: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

2929

Grazie al Phoenix Graph Thread ed all’accelerazione NanoTile,Grazie al Phoenix Graph Thread ed all’accelerazione NanoTile,

possiamo eseguire un’applicazione in cui viene visualizzatopossiamo eseguire un’applicazione in cui viene visualizzato

un filmato in una finestra mentre in un’altra viene scaricato unun filmato in una finestra mentre in un’altra viene scaricato un

file. Tutto ciò senza blocchi o conflitti.file. Tutto ciò senza blocchi o conflitti.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 30: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3030

Passiamo ora ad un altro problema: Passiamo ora ad un altro problema:

la gestione degli eventila gestione degli eventi

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 31: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3131

Tutti i desktop manager hanno bisogno di un sistema di gestioneTutti i desktop manager hanno bisogno di un sistema di gestione

degli eventi. Questo deve essere programmabile dallo sviluppatoredegli eventi. Questo deve essere programmabile dallo sviluppatore

finale.finale.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Cosa accade se eseguiamo un doppio click su una icona ?Cosa accade se eseguiamo un doppio click su una icona ?

Page 32: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3232Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Cosa accade se selezioniamo una voce del menu ?Cosa accade se selezioniamo una voce del menu ?

Page 33: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3333

Il sistema di gestione degli eventi di Nanodesktop è basato suIl sistema di gestione degli eventi di Nanodesktop è basato su

delle delle callback. callback.

Una callback è una routine che viene eseguita quando vieneUna callback è una routine che viene eseguita quando viene

attivato un certo elemento grafico sullo schermo (pulsante,attivato un certo elemento grafico sullo schermo (pulsante,

textbox, icona sul desktop, voce del menu ecc. ecc. ecc.)textbox, icona sul desktop, voce del menu ecc. ecc. ecc.)

Le callback sono programmabili: è lo sviluppatore che stabilisceLe callback sono programmabili: è lo sviluppatore che stabilisce

cosa deve accadere quando un certo elemento grafico vienecosa deve accadere quando un certo elemento grafico viene

attivato.attivato.

Quando si decide che un evento grafico sia gestito tramiteQuando si decide che un evento grafico sia gestito tramite

callback, si dice che esso è callback, si dice che esso è interno interno o “o “callback based”.callback based”.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 34: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3434

Il cuore del sistema di gestione degli eventi di Nanodesktop siIl cuore del sistema di gestione degli eventi di Nanodesktop si

basa su una routine, chiamata basa su una routine, chiamata MouseControl(). MouseControl().

Quando un thread incontra questa routine, viene posto in statoQuando un thread incontra questa routine, viene posto in stato

di sospensione, il puntatore del mouse appare sullo schermo, e di sospensione, il puntatore del mouse appare sullo schermo, e

Nanodesktop è pronto ad eseguire qualsiasi callback siaNanodesktop è pronto ad eseguire qualsiasi callback sia

associata ad elementi che siano selezionati dall’utente nelassociata ad elementi che siano selezionati dall’utente nel

sistema grafico corrente. sistema grafico corrente.

Il thread chiamante ripartirà solo in presenza di particolariIl thread chiamante ripartirà solo in presenza di particolari

eventi (detti eventi (detti eventi esternieventi esterni) che non possono essere gestiti) che non possono essere gestiti

internamente da nd oppure a livello di callback. internamente da nd oppure a livello di callback.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 35: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3535

In caso di evento esterno, è il thread che ha chiamato In caso di evento esterno, è il thread che ha chiamato

MouseControl() MouseControl() che deve gestire la situazione. A tale scopo,che deve gestire la situazione. A tale scopo,

esso riceve un messaggio (una particolare sequenza di codiciesso riceve un messaggio (una particolare sequenza di codici

che viene memorizzata in una che viene memorizzata in una struct ndEvent_Typestruct ndEvent_Type),),

e può prendere le decisioni che meglio ritiene opportune. e può prendere le decisioni che meglio ritiene opportune.

Questo meccanismo di programmazione è un pò particolare,Questo meccanismo di programmazione è un pò particolare,

ma si consideri che da almeno un anno nd fornisce routine,ma si consideri che da almeno un anno nd fornisce routine,

come come ndProvideMeTheMouse_Until(), ndProvideMeTheMouse_Until(), che richiamanoche richiamano

internamente internamente MouseControl() MouseControl() ma permettendo di usarema permettendo di usare

il sistema degli eventi in modo molto più semplice.il sistema degli eventi in modo molto più semplice.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 36: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3636

A questo meccanismo si affianca il A questo meccanismo si affianca il Phoenix Mouse Thread. Phoenix Mouse Thread.

Questo thread viene lanciato automaticamente da nd quando Questo thread viene lanciato automaticamente da nd quando

viene fatto apparire sullo schermo il puntatore del mouse.viene fatto apparire sullo schermo il puntatore del mouse.

E’ questo thread che provvede a leggere lo stato dei registri delE’ questo thread che provvede a leggere lo stato dei registri del

pad della PSP ogni t millisecondi, aggiornando la posizionepad della PSP ogni t millisecondi, aggiornando la posizione

del puntatore del mouse.del puntatore del mouse.

Il PMT provvede anche a richiedere a WindowsRender() loIl PMT provvede anche a richiedere a WindowsRender() lo

spostamento/ridimensionamento delle finestre, ed ad eseguirespostamento/ridimensionamento delle finestre, ed ad eseguire

le callback legate agli eventi del sistema grafico.le callback legate agli eventi del sistema grafico.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 37: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3737

Questo schema ci mostra come funziona il sistema degli eventi di nd Questo schema ci mostra come funziona il sistema degli eventi di nd

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 38: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3838

Ogni volta che deve essere eseguita una callback, NanodesktopOgni volta che deve essere eseguita una callback, Nanodesktop

può gestire la situazione in 2 modi. può gestire la situazione in 2 modi.

a) Può eseguire il codice della callback nell’ambito del a) Può eseguire il codice della callback nell’ambito del PhoenixPhoenix

Mouse Thread. Mouse Thread. E’ la soluzione che di solito si adotta per piccoleE’ la soluzione che di solito si adotta per piccole

routineroutine

b) Può lanciare un thread apposito, chiamato CBE (Callbackb) Può lanciare un thread apposito, chiamato CBE (Callback

executor thread) che dovrà eseguire la callback autonomamente.executor thread) che dovrà eseguire la callback autonomamente.

Viene usato per routine complesse, che a loro volta dovrannoViene usato per routine complesse, che a loro volta dovranno

creare altre finestre e porsi in attesa di altri eventi da partecreare altre finestre e porsi in attesa di altri eventi da parte

del sistema grafico. Al termine dell’esecuzione della callback, ildel sistema grafico. Al termine dell’esecuzione della callback, il

CBE thread viene terminato e cancellato.CBE thread viene terminato e cancellato.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 39: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

3939

Si noti che in condizioni ideali, noi avremo nel sistema Si noti che in condizioni ideali, noi avremo nel sistema

n callback, ciascuna con un certo compito e con certe finestre,n callback, ciascuna con un certo compito e con certe finestre,

ognuna delle quali gira in un suo thread CBE (potremmo dire...ognuna delle quali gira in un suo thread CBE (potremmo dire...

in un proprio in un proprio contestocontesto) ed ognuna delle quali accede al sistema) ed ognuna delle quali accede al sistema

grafico in modo indipendente. grafico in modo indipendente.

Ciò non è un problema, perchè abbiamo visto che il sistemaCiò non è un problema, perchè abbiamo visto che il sistema

grafico di nd può gestire senza problemi l’accesso concorrentegrafico di nd può gestire senza problemi l’accesso concorrente

di più thread al sistema grafico.di più thread al sistema grafico.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 40: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4040

Poniamoci ora una domanda: questa architettura potrebbe Poniamoci ora una domanda: questa architettura potrebbe

essere usata in futuro per creare un piccolo sistema operativoessere usata in futuro per creare un piccolo sistema operativo

con interfaccia grafica e multiprocesso ?con interfaccia grafica e multiprocesso ?

La risposta è no. O, almeno, non del tutto.La risposta è no. O, almeno, non del tutto.

Infatti, Nanodesktop deve sottostare ad una pesante limitazioneInfatti, Nanodesktop deve sottostare ad una pesante limitazione

del sistema operativo della PSP. del sistema operativo della PSP.

Lo scheduler del PSP-OS fornisce un multitasking di tipoLo scheduler del PSP-OS fornisce un multitasking di tipo

preemptive, preemptive, ma l’assenza della MMU nel processore MIPSma l’assenza della MMU nel processore MIPS

della PSP implica l’impossibilità di ottenere i requisiti della PSP implica l’impossibilità di ottenere i requisiti

di di isolamento isolamento e e protezione protezione tipici degli os multiprocesso. tipici degli os multiprocesso.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 41: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4141

In altre parole, quando un processo cerca di scrivere al di fuoriIn altre parole, quando un processo cerca di scrivere al di fuori

del proprio spazio di indirizzamento, il microprocessore nondel proprio spazio di indirizzamento, il microprocessore non

solleva un’eccezione (a differenza di quanto accade con i solleva un’eccezione (a differenza di quanto accade con i

processori Intel o Motorola). processori Intel o Motorola).

E’ anche a causa di questa caratteristica che sulla PSP nonE’ anche a causa di questa caratteristica che sulla PSP non

sono state portate le normali distribuzioni Linux. sono state portate le normali distribuzioni Linux.

L’unica che finora è stata portata (ma attualmente non esegueL’unica che finora è stata portata (ma attualmente non esegue

programmi diversi da quelli eseguibili da CLI) è uCLinuxprogrammi diversi da quelli eseguibili da CLI) è uCLinux

(http://www.uclinux.org/)(http://www.uclinux.org/)

uCLinux è una distribuzione Linux dedicata specificamente aiuCLinux è una distribuzione Linux dedicata specificamente ai

dispositivi senza MMU. Non supporta X, nè Gnome, nè KDE.dispositivi senza MMU. Non supporta X, nè Gnome, nè KDE.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 42: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4242

La compatibilità POSIXLa compatibilità POSIX

Dal corso di Sistemi operativi sappiamo che lo standard POSIXDal corso di Sistemi operativi sappiamo che lo standard POSIX

(Portable Operating System Interface) è un insieme di specifiche(Portable Operating System Interface) è un insieme di specifiche

emanate dall’instituto IEEE per definire in che modo devonoemanate dall’instituto IEEE per definire in che modo devono

comportarsi alcuni sistemi operativi (in particolare, i sistemicomportarsi alcuni sistemi operativi (in particolare, i sistemi

operativi della famiglia Unix). operativi della famiglia Unix).

Lo standard stabilisce alcune specifiche riguardo al tipo diLo standard stabilisce alcune specifiche riguardo al tipo di

interfaccia con gli applicativi, al sistema di gestione dei interfaccia con gli applicativi, al sistema di gestione dei

thread, dei segnali, e dei semafori, nonchè alla strutturathread, dei segnali, e dei semafori, nonchè alla struttura

del file system e delle pipe.del file system e delle pipe.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 43: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4343

Avere un buon layer di compatibilità POSIX è essenziale perchèAvere un buon layer di compatibilità POSIX è essenziale perchè

molti software del mondo x86 fanno uso di funzionalità chemolti software del mondo x86 fanno uso di funzionalità che

sono definite proprio dallo standard. sono definite proprio dallo standard.

Per esempio, quando un’applicazione del mondo Unix/LinuxPer esempio, quando un’applicazione del mondo Unix/Linux

vuole create un thread, usa la funzionevuole create un thread, usa la funzione

int pthread_createint pthread_create (pthread_t *(pthread_t *threadthread, const pthread_attr_t *, const pthread_attr_t *attrattr, ,

void *(*void *(*start_routinestart_routine)(void*), void *)(void*), void *argarg); );

e per distruggerlo usa:e per distruggerlo usa:

int pthread_cancel(pthread_t thread);int pthread_cancel(pthread_t thread);

Se queste funzioni non sono presenti, l’applicazione non è portabile.Se queste funzioni non sono presenti, l’applicazione non è portabile.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 44: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4444

Il PSPSDK fornisce una API per la gestione di thread e Il PSPSDK fornisce una API per la gestione di thread e

semafori. Ma è molto diversa da quella prevista dallosemafori. Ma è molto diversa da quella prevista dallo

standard POSIX. Per esempio, per creare un thread:standard POSIX. Per esempio, per creare un thread:

SceUIDSceUID sceKernelCreateThreadsceKernelCreateThread (const char *name, SceKernelThreadEntry entry, (const char *name, SceKernelThreadEntry entry,

int initPriority, int stackSize, int initPriority, int stackSize,

SceUInt attr, SceUInt attr,

SceKernelThreadOptParam *option)SceKernelThreadOptParam *option)   

Mentre perMentre per terminare e distruggere un thread: terminare e distruggere un thread:

sceKernelTerminateDeleteThread (SceUID thid)sceKernelTerminateDeleteThread (SceUID thid)

E’ chiaro che era necessario intervenire per garantire laE’ chiaro che era necessario intervenire per garantire la

compatibilità POSIXcompatibilità POSIX

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 45: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4545

Sotto Nanodesktop, il problema è stato risolto tramite il porting diSotto Nanodesktop, il problema è stato risolto tramite il porting di

una libreria, chiamata EmbPThread. una libreria, chiamata EmbPThread.

(http://sourceforge.net/projects/pthreads-emb/)(http://sourceforge.net/projects/pthreads-emb/)

Questa libreria si comporta come un layer di traduzione eQuesta libreria si comporta come un layer di traduzione e

fornisce alle applicazioni nd quasi tutte le funzioni relativefornisce alle applicazioni nd quasi tutte le funzioni relative

alle funzionalità previste dallo standard POSIX thread.alle funzionalità previste dallo standard POSIX thread.

In questo modo diventa possibile eseguire sulla PSPIn questo modo diventa possibile eseguire sulla PSP

normali applicazioni per x86 che richiedono un certonormali applicazioni per x86 che richiedono un certo

grado di compatibilità POSIXgrado di compatibilità POSIX

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 46: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4646

Parallelizzazione dei calcoli attraverso la VFPUParallelizzazione dei calcoli attraverso la VFPU

Infine, volevo soffermarmi un attimo sulla tecnologia di Infine, volevo soffermarmi un attimo sulla tecnologia di

parallelizzazione dei calcoli che viene usata da Nanodesktop. parallelizzazione dei calcoli che viene usata da Nanodesktop.

Come detto nel nostro precedente incontro, la parallelizzazioneCome detto nel nostro precedente incontro, la parallelizzazione

dei calcoli ha consentito di eseguire algoritmi di visionedei calcoli ha consentito di eseguire algoritmi di visione

artificiale estremamente sofisticati su un dispositivoartificiale estremamente sofisticati su un dispositivo

portatile come la PSP. portatile come la PSP.

Alla base di questo risultato c’è la VFPU, il componente Alla base di questo risultato c’è la VFPU, il componente

hardware integrato nel processore della PSP, e capace dihardware integrato nel processore della PSP, e capace di

performance superiori a 2 Gflops/sec. performance superiori a 2 Gflops/sec.

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 47: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4747

La VFPU fornisce 128 registri in virgola mobile a 32 bit. La VFPU fornisce 128 registri in virgola mobile a 32 bit.

I registri sono divisi in 8 matrici da 4x4 registri.I registri sono divisi in 8 matrici da 4x4 registri.

La VFPU, inoltre, possiede istruzioni che consentono di eseguireLa VFPU, inoltre, possiede istruzioni che consentono di eseguire

la somma, la differenza, la moltiplicazione scalare di duela somma, la differenza, la moltiplicazione scalare di due

matrici di 4x4 elementi con pochi cicli di clock.matrici di 4x4 elementi con pochi cicli di clock.

Ora, supponete di avere una singola istruzione che sommi Ora, supponete di avere una singola istruzione che sommi

due matrici 4x4 elementidue matrici 4x4 elementi

Appare evidente che potete agire su 16 elementi alla volta! (SIMD)Appare evidente che potete agire su 16 elementi alla volta! (SIMD)

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

1 5 0 4

0 3 1 4

5 3 4 3

2 1 5 0

2 2 3 1

0 3 1 10

1 1 1 1

3 -1 5 0

3 7 3 5

0 6 2 14

6 4 5 4

5 0 10 0

Page 48: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4848

Normalmente la VFPU della PSP dovrebbe essere programmataNormalmente la VFPU della PSP dovrebbe essere programmata

direttamente in linguaggio assembler. direttamente in linguaggio assembler.

Tuttavia, Nanodesktop integra un componente che consente diTuttavia, Nanodesktop integra un componente che consente di

eseguire le operazioni richieste direttamente dal linguaggio C:eseguire le operazioni richieste direttamente dal linguaggio C:

si chiama EMI (Enhanced Mathematical Interface).si chiama EMI (Enhanced Mathematical Interface).

Sotto PSPE la VFPU non è emulata, quindi viene usato unSotto PSPE la VFPU non è emulata, quindi viene usato un

altro componente, chiamato EMIEMU che provvede adaltro componente, chiamato EMIEMU che provvede ad

emulare via software le operazioni necessarie.emulare via software le operazioni necessarie.

La cosa non è comunque un problema, perchè lo sviluppatore puòLa cosa non è comunque un problema, perchè lo sviluppatore può

usare un wrapper chiamato ndHAL_XFPU che richiama la funzioneusare un wrapper chiamato ndHAL_XFPU che richiama la funzione

giusta sia sotto PSPE che sotto PSPgiusta sia sotto PSPE che sotto PSP

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 49: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

4949

Nel programma che ora vi mostrerò, noi eseguiamo laNel programma che ora vi mostrerò, noi eseguiamo la

formulaformula

x^2 + 1x^2 + 1

per x che va da 0 a 15per x che va da 0 a 15

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 50: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

5050

Il programma è questo:Il programma è questo:#include <nanodesktop.h>#include <nanodesktop.h>

#define MATRIX0 0#define MATRIX0 0

#define MATRIX1 1#define MATRIX1 1

#define MATRIX2 2#define MATRIX2 2

int ndMain()int ndMain()

{{

float FloatBufferA [16], FloatBufferB [16], FloatBufferRes [16];float FloatBufferA [16], FloatBufferB [16], FloatBufferRes [16];

int Counter;int Counter;

ndInitSystem ();ndInitSystem ();

for (Counter=0; Counter<16; Counter++) FloatBufferA [Counter] = Counter;for (Counter=0; Counter<16; Counter++) FloatBufferA [Counter] = Counter;

for (Counter=0; Counter<16; Counter++) FloatBufferB [Counter] = 1;for (Counter=0; Counter<16; Counter++) FloatBufferB [Counter] = 1;

ndHAL_XFPU_Load16FloatsToMatrix (MATRIX0, &FloatBufferA);ndHAL_XFPU_Load16FloatsToMatrix (MATRIX0, &FloatBufferA);

ndHAL_XFPU_Load16FloatsToMatrix (MATRIX1, &FloatBufferB);ndHAL_XFPU_Load16FloatsToMatrix (MATRIX1, &FloatBufferB);

ndHAL_XFPU_MatrixTrvMul (MATRIX0, MATRIX0, MATRIX0);ndHAL_XFPU_MatrixTrvMul (MATRIX0, MATRIX0, MATRIX0);

ndHAL_XFPU_MatrixSum (MATRIX0, MATRIX1, MATRIX2);ndHAL_XFPU_MatrixSum (MATRIX0, MATRIX1, MATRIX2);

ndHAL_XFPU_Store16FloatsFromMatrix (MATRIX2, &FloatBufferRes);ndHAL_XFPU_Store16FloatsFromMatrix (MATRIX2, &FloatBufferRes);

for (Counter=0; Counter<16; Counter++) printf ("sqr(%d) + 1 = %f \n", Counter, FloatBufferRes [Counter]);for (Counter=0; Counter<16; Counter++) printf ("sqr(%d) + 1 = %f \n", Counter, FloatBufferRes [Counter]);

ndHAL_WaitKey (0);ndHAL_WaitKey (0);

}}

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 51: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

5151

Vediamo il risultato:Vediamo il risultato:

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Funziona! E si può anche verificare che sulla vera PSP è molto veloceFunziona! E si può anche verificare che sulla vera PSP è molto veloce

Page 52: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

5252

La programmazione tramite ndHAL_XFPU è unLa programmazione tramite ndHAL_XFPU è un

argomento molto complesso. argomento molto complesso.

Per ora vi rimando al capitolo 28 dellaPer ora vi rimando al capitolo 28 della

Nanodesktop User GuideNanodesktop User Guide

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology

Page 53: 1 Università degli Studi di Messina Facoltà di Ingegneria Visilab – Computer Vision and Image Processing Lab Nanodesktop Software development kit per sistemi.

5353

GRAZIEGRAZIE

Visilab – Computer Vision and Image Processing LabUniversity of Messina - Italy

Nanodesktop tecnology