Precedente Indice Successivo



INTRODUZIONE


La produzione di software matematico, è un complesso d'attività legate alla scrittura di programmi destinati a risolvere i principali problemi matematici nel campo delle applicazioni. Il progetto di software per applicazioni tecnico-scientifiche implica la creazione di programmi, assemblando moduli precostituiti, e l'uso di sistemi interattivi. I moduli precostituiti comprendono package e librerie e garantiscono l'uso dei migliori algoritmi e del software più efficace. I package sono collezioni di software per applicazioni specifiche e sono usati richiamando singole procedure da un programma utente. Le librerie sono collezioni di software per aree applicative, anch'esse usate richiamando singole procedure da programma utente.

I passi da seguire per sviluppare software matematico:

  1. Formulazione di un modello matematico.
  2. Sviluppo di metodi numerici per la risoluzione del modello matematico.
  3. Progettazione ed analisi di un algoritmo computazionale, atto a risolvere il problema mediante calcolatore.
  4. Realizzazione di un elemento di software (codifica).
  5. Documentazione dettagliata (interna ed esterna).
  6. Test di verifica.

Le prestazioni di un algoritmo numerico e del software relativo sono strettamente dipendenti dall'ambiente d'elaborazione utilizzato. L'ambiente è a sua volta funzione dell'aritmetica floating point del sistema, dell'organizzazione della memoria, del sofware di base (compilatori, editor,...). Spesso un buon algoritmo non garantisce un buon programma. Per generare un buon software matematico l'algoritmo deve possedere alcune caratteristiche. Deve terminare in un numero finito di passi, ed essere abbastanza generale da poter trattare ogni caso particolare relativo al compito in esame. L'algoritmo deve essere deterministico. Niente deve essere lasciato al caso e il risultato finale deve essere indipendente da chi sta eseguendo l'elaborazione. Deve essere affidabile, robusto ed efficiente.

Un algoritmo è considerato affidabile quando soddisfa una serie di requisiti, in pratica se è:

Un algoritmo è robusto quando riesce a risolvere correttamente tutti i problemi compresi tra le specifiche dell'algoritmo e quanto più è ampio il dominio dei problemi risolvibili.

L'efficienza di un algoritmo è valutata in base al comportamento dell'algoritmo stesso al crescere della dimensione del problema. La dimensione di un problema è denotata usualmente mediante un numero N, indicante il numero di dati d'input del problema. L'efficienza è misurata in termini di complessità di tempo e di spazio. La complessità di tempo riguarda il numero delle operazioni più significative che si effettuano nell'esecuzione dell’algoritmo, ed e proporzionale al tempo complessivo richiesto per l'esecuzione. La complessità di spazio riguarda il numero delle variabili dichiarate e utilizzate dall'algoritmo, ed è proporzionale allo spazio di memoria occupato dai dati d'input d'output e intermedi.

Analogamente all'algoritmo, anche il software matematico deve possedere alcuni attributi. Deve essere affidabile, efficiente, robusto, trasportabile.

L'affidabilità del software comprende:

Con efficienza del software s'intende il tempo effettivo d'elaborazione e l'occupazione di memoria su di un dato elaboratore (l'efficienza è un parametro che dipende molto dall'ambiente di calcolo utilizzato).

Con robustezza del software s'indica la capacità del programma di far fronte a situazioni anomale, che in modo indipendente dal problema possono verificarsi durante l'elaborazione, inoltre il software è robusto quando effettua un controllo sui dati in input e gestisce gli errori con la relativa diagnostica.

La possibilità di trasferire e utilizzare software, senza degradazione delle prestazioni su configurazioni di calcolo diverse (sia hardware sia software), potrebbe causare problemi di portabilità e trasportabilità. Il software è portabile quando è utilizzabile su di un altro sistema senza effettuare modifiche al software stesso, mentre è trasportabile quando può essere usato su di un altro sistema previo semplici adattamenti.

Disponendo di un calcolatore su cui sono istallati due diversi sistemi operativi, Windows95 e Linux, tutti i programmi, con i relativi test di verifica, presenti in questo lavoro, sono stati testati su entrambi i sistemi operativi, al fine di verificare la portabilità delle varie routine sviluppate e le eventuali differenze di prestazioni dipendenti dall'ambiente d'elaborazione utilizzato.

I programmi eseguiti in Windows sono stati compilati utilizzando il compilatore Fortran WorkBench della Microsoft. Per i programmi eseguiti in Linux è stato utilizzato inizialmente il compilatore Fort77 [7], basato a sua volta sull'applicativo f2c [6] un convertitore da fortran a C, in seguito, è stato utilizzato il compilatore fortran g77. I dati su cui sono stati effettuati i test, sono stati generati in modo casuale utilizzando matlab e Octave. Non sono stati utilizzati flag atti ad ottimizzare il codice compilato. Il calcolatore impiegato ha la seguente dotazione hardware: processore Pentium Intel a 200Mhz, 32Mb ram.

Tutte le routine sviluppate, tranne la subroutine per il calcolo della trasformata di Fourier, sono state compilate in entrambi i sistemi senza nessun problema. Per quel che riguarda la FFT2, è stato necessario sostituire, in Linux, una funzione di libreria del Fortran. La funzione che esegue lo shift aritmetico è chiamata isha nel fortran della Microsoft [9], mentre ha nome ishift in Linux [8]. Entrambe le funzioni accettano due valori, la stringa di bit su cui effettuare lo shift e una quantità indicante di quanti bit shiftare il primo valore, e in quale direzione effettuare lo shift. Se il secondo valore è maggiore di zero, lo shift è a sinistra, se è minore di zero lo shift è a destra, se è uguale a zero non viene effettuato nessuno shift.

In conclusione, da quanto osservato durante la compilazione del software, e dall'analisi dei risultati ottenuti dalle varie elaborazioni si può affermare che le routine presenti in questo lavoro sono portabili.
Molte routine, eseguite nei due ambienti, hanno fornito in output valori identici. Altre hanno riportato minime discordanze dipendenti dall'ambiente d'elaborazione utilizzato.





Precedente Indice Successivo