Questo sito utilizza cookie di terze parti per inviarti pubblicità in linea con le tue preferenze. Se vuoi saperne di più clicca QUI 
Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all'uso dei cookie. OK

Analisi di un ambiente simbolico per lo sviluppo di un compilatore parallelizzante

Oggetto di questo lavoro di tesi è lo studio e l’implementazione (prototipazione) di un ambiente di programmazione per lo sviluppo di un compilatore fortemente modulare in cui le componenti di analisi e di ristrutturazione del codice possono essere combinate e ricombinate per ottenere da un lato maggiore flessibilità di utilizzo e dall’altro codici con migliori prestazioni computazionali. In particolare l’ambiente sviluppato si caratterizza per la semplicità di utilizzo. E’ possibile la codifica ed il test di algoritmi per l’analisi e trasformazione del codice, in maniera semplice ed efficiente. Questo vincolo progettuale ha fornito criteri per la scelta del linguaggio di programmazione con cui implementare un ambiente di sviluppo di compilatori con queste caratteristiche. L’attenzione si è infatti rivolta verso i linguaggi di manipolazione simbolica ed in particolare verso il più rappresentativo di questi, il LISP [McCar60]. Esso possiede caratteristiche uniche che lo rendono lo strumento più idoneo per la programmazione e la manipolazione simbolica di strutture dati ed algoritmi. L’aspetto più significativo è il fatto che le funzioni, con cui sono descritti tutti i processi di calcolo, possono esse rappresentate nelle stesse strutture dati del LISP. Questo distingue la programmazione in LISP dagli altri paradigmi di programmazione, poiché questi ultimi si fondano sulla tradizionale dicotomia tra dato ed algoritmo. Questa funzionalità rende quindi il LISP lo strumento migliore, per la scrittura di programmi che manipolano altri programmi come dati, come ad esempio gli interpreti ed infine proprio i compilatori [AS85].
Il prototipo implementato risulta costituito da tre componenti fondamentali:
1. Il Front-End per il linguaggio Fortran del compilatore parallelizzante Parafrase2.
2. Un Modulo di Conversione la cui funzione è la trasformazione della rappresentazione intermedia costruita dal front-end del compilatore parallelizzante Parafrase2 in un formato leggibile e manipolabile dal linguaggio LISP.
3. Una libreria di funzioni LISP per l’analisi del codice (Analisi del Flusso e Analisi delle Dipendenze).
Elemento caratterizzante del prototipo è che l’ambiente di compilazione e di sviluppo è costituito per intero dal sistema LISP. E’ infatti possibile compilare codice Fortran ed ottenere la relativa rappresentazione intermedia in formato LISP, pur rimanendo nel sistema. Questo è stato possibile attraverso l’implementazione di una funzione LISP (fortran_front_end) in cui sono integrati i primi due elementi del prototipo, rispettivamente il Front-End di Parafrase2 ed il Modulo di Conversione.

Mostra/Nascondi contenuto.
INTRODUZIONE 7 Introduzione Con il termine parallelismo si indica la possibilità di eseguire più operazioni simultaneamente. In risposta alla crescente necessità di disporre di elaboratori ad alte prestazioni (high performance computing system) sono stati sviluppati algoritmi ed architetture che consentono una esecuzione concorrente (architetture parallele). Per utilizzare questa classe di macchine è necessario disporre di programmi che possono essere eseguiti su più unità processanti, programma che diremo programma parallelo. È ovvio che la ragione principale perché si voglia eseguire un programma in parallelo è l’aspettativa che il suo tempo complessivo di esecuzione sia significativamente inferiore rispetto al corrispondente programma sequenziale. Affinché questo obiettivo sia raggiungibile è necessario adattare il programma in modo da utilizzare al meglio le caratteristiche architettoniche delle macchine parallele. Questa problematica riguarda l’annotazione delle opportunità di parallelismo e richiede lo sviluppo dele metodologie e degli strumenti più confacenti per esplicitare il parallelismo potenziale di un programma o di un algoritmo. Le metodologie sviluppate per questa problematica prevedono o l’utilizzo di linguaggi di programmazione progettati per la programmazione parallela (Occam [Bar93], Ada [TD97], Haskell [Pey03], etc), oppure l’estensione di linguaggi sequenziali (Fortran [ANSI78], C [ANSI88]) congiuntamente all’utilizzo esplicito o meno di librerie di sistema per l’attivazione e la gestione di processi paralleli, e di costrutti linguistici paralleli detti annotazioni. In questo caso si dirà che il programma parallelo esibisce una forma di parallelismo esplicito. Un’altra metodologia, che sarà utilizzata come modello di riferimento in questo lavoro di tesi, prevede la traduzione di un programma sequenziale in un linguaggio eseguibile su una architettura parallela, con il vincolo che la trasformazione del

Tesi di Laurea

Facoltà: Scienze Matematiche, Fisiche e Naturali

Autore: Giancarlo Zaccone Contatta »

Composta da 234 pagine.

 

Questa tesi ha raggiunto 684 click dal 03/10/2008.

Disponibile in PDF, la consultazione è esclusivamente in formato digitale.