L'MPEG-4, ultima versione del celebre standard MPEG, è basato sul concetto di ``Comunicazioni Multimediali'': esso consente all'utente di interagire con sequenze audiovisive, composte da più Audio Video Objects. Tali oggetti vengono ricevuti dal decodificatore, tipicamente attraverso una rete come Internet, decodificati tramite algoritmi simili a quelli definiti nelle precedenti versioni dello standard, composti in una sequenza audio-video, e infine presentati all'utente.
L'uso del paradigma ad oggetti e la natura distribuita delle sorgenti di informazione suggeriscono di ricorrere al linguaggio Java per la definizione del contenuto degli oggetti multimediali in un formato compatibile con la maggior parte dei sistemi hardware. I programmi Java sono infatti eseguibili su tutti i calcolatori per cui sia stata resa disponibile una versione della Java Virtual Machine, la macchina astratta in grado di interpretare il formato compilato del codice Java, detto bytecode.
L'obiettivo del lavoro svolto risiede nella verifica della reale possibilità di sostenere l'onere di calcolo richiesto da un sistema complesso come un decodificatore MPEG-4 tramite un calcolatore che interpreti il bytecode di Java.
Data la natura della Java Virtual Machine, che è una macchina a stack, e quindi intrinsecamente meno efficiente di una macchina basata sull'uso di registri, si dimostrerà che la decodifica MPEG in tempo reale richiede un tale numero di operazioni per unità di tempo da essere irrealizzabile, non solo utilizzando una versione software dell'interprete Java, ma anche un microprocessore dedicato, come picoJava-I. Per superare almeno in parte gli svantaggi derivanti da un'architettura a stack, questo microprocessore adotta un meccanismo, il folding, che permette di eseguire contemporaneamente alcune coppie di istruzioni. Sulla base di questa idea, è stato studiato un meccanismo analogo, ma più evoluto, denominato ``folding bidirezionale a N livelli'', che garantisce l'esecuzione simultanea di interi gruppi di istruzioni, anche non adiacenti.
Per calcolare le prestazioni ottenibili, è stato realizzato, sul modello della Java Virtual Machine, un simulatore software di macchina a stack, detto ``Virtual Stack Machine'', grazie al quale è stato possibile determinare la complessità, espressa in cicli di clock, degli algoritmi di decodifica MPEG, e i benefici che è possibile trarre dalla nuova strategia di folding introdotta.
Il folding porta i processori Java a raggiungere le prestazioni ottenibili con CPU di tipo RISC, ma questo non è ancora sufficiente a sostenere la mole di calcoli richiesta dalla decodifica MPEG. Per superare l'impasse occorre estendere l'insieme di istruzioni dei processori Java, sfruttando tecniche di tipo Single Instruction, Multiple Data, che permettono di operare in parallelo su più dati con pochi bit di precisione, tipici delle applicazioni multimediali. Si dimostrerà che, seguendo questa via, l'obiettivo può essere raggiunto.
A conclusione del lavoro, è stato iniziato lo studio dell'architettura di un processore superscalare dedicato a Java, e la stesura di un simulatore in linguaggio C++, che consenta di giungere ad una precisa definizione dei parametri hardware in vista di una successiva traduzione in linguaggio VHDL.
Ringrazio l'Ing. Guido Masera, l'Ing. Alberto Brizio, il personale della SGS-Thomson di Crema e Leonardo Sala.