![]() |
![]() |
|
|||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|
||||||||||||||
|
|
|||||||||||||||
|
|
![]() |
|
|||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
Parte 4
|
Ottimizzazioni algoritmiche e implementative
Accanto agli obiettivi più radicali, l’attività di ricerca e sviluppo della Eco Controllo SpA, è stata anche centrata sul generale miglioramento dei sistemi proprietari al fine
di garantirne la qualità esecutiva e al fine di dimostrarne la futura funzionalità a scopi industriali e commerciali.
L’obbiettivo di fondo perseguito, è stato ed è quello di ottenere implementazioni capaci di ridurre progressivamente il numero
di cicli di clock necessari all’esecuzione dei programmi proprietari e, di conseguenza, di minimizzare il costo
energetico complessivo richiesto dalle previste operazioni di
compressione/decompressione di immagini statiche e in movimento. I benefici di
tali ottimizzazioni sono principalmente indirizzati all’effetto d’una minore richiesta di risorse temporali e spaziali. Ciò consente una maggiore efficienza energetica dei dispositivi HW che saranno
adoperati nella fase industriale e di commercializzazione, e nell’applicazione e nell’esecuzione dei nuovi programmi di compressione d’immagini digitali.
Il processo di ottimizzazione, ha alfine comportato la messa in atto di alcune fasi di sviluppo che sono state
parallelamente affidate a piccoli, distinti gruppi di lavoro.
Analisi dinamica dei codici
Il primo passo del processo è stato un’analisi dinamica dei codici, per poter individuare le sezioni che impegnano la
maggior parte del tempo di esecuzione e concentrare l’azione di revisione.
Il processo ha richiesto particolari tipologie di compilazione del codice
sorgente e l’utilizzo di sistemi software testuali e grafici di profiling. Questa fase ha
implicato anche delle revisioni algoritmiche al fine di poter comprendere se le
sezioni più onerose potevano essere sviluppate in modi alternativi, più leggeri dal punto di vista prestazionale.
Per quanto riguarda, poi, il programma di compressione per immagini fisse, si
sono individuate le parti del codice maggiormente onerose per le performance, ottenendo quindi un miglioramento delle prestazioni. Il processo di profiling ha
mostrato che la maggior parte del tempo di esecuzione era impiegato per
operazioni relative alla copia di blocchi di memoria, all’esecuzione di operazioni binarie (applicazione di maschere e shift) e alla
allocazione della memoria.
Analisi statica dei codici
Una volta ottenute le prime implementazioni correttamente funzionanti dell’algoritmo proprietario, il passo successivo è stato quello di effettuare delle sessioni accurate di revisione del codice,
affidate ad un code reviewer.
Questo ha consentito di eliminare da subito tutte le porzioni di codice che
apparivano inutili e ridondanti, ottenendo così delle implementazioni più veloci in esecuzione, a prescindere dall’architettura di supporto. Tale analisi ha permesso di eliminare le sezioni
residue che potevano causare un comportamento non deterministico dell’applicazione, e ha favorito la soluzione di talune ambiguità subdole, che si rendevano palesi solo stressando i programmi, in casi
assolutamente inusuali e, per questo, di difficile identificazione e
interpretazione.
Ottimizzazione dei codici
Si è proceduto con le normali operazioni di ottimizzazione, al fine di poter
ottenere le migliori prestazioni degli eseguibili e poter minimizzare l’ingombro dei programmi proprietari (laddove il Codec Video della Eco Controllo, mostra ad esempio un ingombro su disco di 700 KB.
Ottimizzazione in funzione delle implementazioni HW
Ultimata una prima fase esplorativa, per la ricerca di architetture hardware flessibili e a basso
consumo energetico, che fossero idonee all’implementazione di algoritmi di compressione attraverso istruzioni dedicate, il
percorso di ricerca e sviluppo è stato pur orientato all’ottimizzazione delle architetture algoritmiche proprietarie e dei codici
relativi alle loro implementazioni, così da poter conseguire l’integrazione con sistemi hardware generici, tale da permettere l’esecuzione di tutte le funzioni proprie della compressione. L’ottimizzazione dei codici ha comportato l’utilizzo di linguaggi a più basso livello (assembly) che potessero favorire l’integrazione su una vasta gamma di sistemi eterogenei, per la programmazione di
microcontroller e DSP, eventualmente anche sotto forma di core implementati
tramite ASIC, CPLD e FPGA al fine di massimizzare le performance.
Test di comparazione
Di pari passo all’applicazione di tecniche di ottimizzazione dei codici si è proceduto alla individuazione delle migliori tecniche per effettuare test
comparativi tra i risultati ottenuti dagli algoritmi proprietari di
compressione e i sistemi di compressione attualmente disponibili sul mercato
consumer, prosumer e business-to-business. Si tiene a precisare che il suddetto
task è comunque in continuo aggiornamento e sviluppo (ovviamente, anche oltre gli
orizzonti tem-porali del programma per il PIA Innovazione), data l’evoluzione dei sistemi di compressione e delle metriche di valutazione ad essi
collegate. Come già indicato nelle prime parti della presente relazione tecnica (in particolare,
Parte 2), s’è posta particolare attenzione alla scelta delle metriche di comparazione da
adoperare, privilegiando quelle riconosciute ed adottate dalle principali
agenzie mondiali che si occupano di test comparativi sugli algoritmi di
compressione.
Implementazione in hardware dei programmi proprietari
La Eco Controllo SpA, insieme allo sviluppo delle tecniche migliorative delle prestazioni degli
algoritmi, ha proceduto all’ottimizzazione del codice per un’implementazione hardware basata su componentistica general purpose. A tal
riguardo, si è provveduto alla riscrittura di parti di codice (funzioni) utilizzando set di
istruzioni che vanno ad accelerare il processo di compressione su hardware con
architettura X86.
In più si è proceduto alla riscrittura di funzioni utilizzando anche set di istruzioni MMX, SSE ed SSE2.
Allo scopo di poter verificare che la suddetta implementazione sia trasferibile
su hardware (anche compatto) con potenza computazionale contenuta, è stata realizzata l’implementazione sul seguente dispositivo:
Processore — Via Eden-N Nano, 800 MHz (X86)
Memoria — 128 or 256 MB DDR RAM
Display:
Via UniChrome 2D/3D Graphics
8 to 64 MB video RAM shared con system memory
CRT and LCD outputs, 1280 x 1024 max. resolution with 32-bit color
Disco — 1 EIDE UltraDMA 133 on 44-pin header
Expansione — 1 X-PCI connector
Porte I/O:
10/100 Base-T Ethernet
2 USB 2.0
PS/2 tastiera e mouse
LPT and RS-232
Power — +5 VDC, 4.5 A max.
|
|
|||||||||||||
|
|
|
||||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|||||||||||||||
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
