Focus
Gli interessi e le competenze del gruppo di ricerca sono incentrati su concetti, metodi e strumenti per la traduzione e l'ottimizzazione del codice.
Dato che il compilatore opera come traduttore fra notazioni orientate alla comprensione da parte del programmatore da una parte e della macchina dall'altra, questo tipo di ricerca si colloca tra l'ingegneria del software e lo studio dell'architettura del calcolatore.
In quest'ultimo campo, il nostro gruppo partecipa a studi relativi all'esplorazione architetturale.
In passato abbiamo sviluppato compilatori per una varietà di linguaggi, in settori specifici come i database orientati agli oggetti e i sistemi dedicati real-time.
I nostri recenti sforzi di ricerca e sviluppo hanno affrontato problemi di ottimizzazione del codice per architetture parallele, tra cui multicore system on chip, multiprocessori NUMA, GPGPU, e processori VLIW. In questi progetti abbiamo utilizzato piattaforme di compilazione ben note, come GCC, SUIF e LLVM.
Abbiamo applicato diversi modelli e linguaggi di programmazione parallela, tra cui CUDA, OpenMP e OpenCL studiando strumenti per supportare l'espressione della località dei dati ad un livello di astrazione più alto.
Studiamo anche vari metodi per la parallelizzazione automatica di programmi sequenziali.
Un'altra direzione di ricerca è la compilazione dinamica di linguaggi bytecode. Abbiamo sviluppato un compilatore dinamico di bytecode Java, una piccola macchina virtuale per Java Micro Edition, e più recentemente un compilatore dinamico per CLI (ECMA335 o DotNet), ILDJIT.
Lo sviluppo di questo software libero è attualmente sostenuto congiuntamente dalla Harvard University (Simone Campanoni) e dal nostro gruppo e rappresenta la migliore soluzione per compilare codice c verso il codice macchina, attraverso il bytecode CLI, ottenendo prestazioni paragonabili a quelle dei compilatori classici.


Risutati principali della ricerca
Compilatore Just-in-time Java per il processore LX di STMicroelectronics.
Sistema di spin-lock leggeri per l'implementazione di loop paralleli nel linguaggio OpenMP.
Supporto avanzato da parte del compilatore per acceleratori hardware GPGPU.
Compilatore dinamico ottimizzato per il codice CIL byte (ECMA 335 standard), implementato attraverso una struttura a plug-in, e in grado di eseguire sotto forma di più thread sui multi-processori,
http://sourceforge.net/apps/mediawiki/ildjit