Newsgroup: it.comp.os.linux.software
Titolo: Octave VS Fortran

Salve,
ho sempre programmato in Fortran.
Mi e` stato dato un programma sviluppato in Matlab che impiegava molto
tempo (e memoria) su un normale PC.
Lo porto su una mia macchina e lo eseguo sotto octave. I tempi erano
ancora molto alti ed una esecuzione impiegava poco piu` di due giorni.
Decido di ottimizzarlo riscrivendolo in Fortran 95. Il lavoro e` stato
abbastanza semplice essendoci l'equivalente di tutte le funzioni sulle
matrici :-).
Non ho potuto fare grandi cambiamenti per aumentare la velocita` del
programma  e, ad occhio, credevo di risparmiare non piu` del 25% del
tempo.
La piacevole sorpresa e` stata che ora il programma sulla stessa macchina
impiega 7 minuti dando gli stessi risultati :-).
La differenza di tempo (7 minuti contro 2 giorni) me la spiego solo come
linguaggio compilato-interpretato. Non essendo pratico di octave (o di
Matlab perche` rapportando i tempi erano gli stessi di octave), ho forse
sbagliato in qualche parte e non ho dato l'opzione giusta? Ho cercato sul
manuale ma non ho trovato niente. Octave usa le librerie lapack, molto
simili se non le stesse a quella che usa il Fortran.
Qualcuno ha notato differenze simili? Oppure ho sbagliato su qualche
impostazione di Octave?
Grazie.
-- 
|- Franco Moglie - Ancona - Reply su indirizzo A PERDERE, per        -|
|- risposte private utilizza 
f.mo...@bbbbee.unian.it
 SENZA le 'b'   -|

come linguaggio compilato-interpretato.
Ed e` la spiegazione giusta: i programmi per Mathlab e Octave sono 
interpretati.
-- 
A risentirci
\  Davide G. Borin
\\ !!Scudo anti-spam attivo!! Togliere le x e "eliminami" dall'indirizzo
\\\_____________________________________________________________________

 interpretati.
Quindi posso cazziare quei colleghi che vogliono utilizzare questi
programmi per quel tipo di simulazioni senza rischi? ;-)
Ciao


 programmi per quel tipo di simulazioni senza rischi? ;-)
O meglio, fai un programma che traduca il codice Matlab in Fortran e poi 
automaticamente lo compila ed esegue ... immagina la faccia dei tuoi 
colleghi: "ma quale versione di Matlab usi? ci mette meno della mia!" :-)
  Xav

 ancora molto alti ed una esecuzione impiegava poco piu` di due giorni.
curiosita'... che cosa fa questo programma per richiedere cosi' tanto
tempo?
-- 
"We know Linux to be great...
 it ends infinite loops in 5 seconds only" Linus Torvalds

> programmi per quel tipo di simulazioni senza rischi? ;-)
Saverio> O meglio, fai un programma che traduca il codice Matlab in
Saverio> Fortran e poi automaticamente lo compila ed esegue
Saverio> ... immagina la faccia dei tuoi colleghi: "ma quale versione
Saverio> di Matlab usi? ci mette meno della mia!" :-)
Questo non è sempre auspicabile. Con un linguaggio interpretato non si
hanno gli stessi tempi di sviluppo e non è corretto paragonarne le
velocità.
Dubito anche che usando le giuste primitive si possa davvero arrivare
a quelle differenze di prestazioni. Se il linguaggio permette tramite
funzioni interne (e quindi senza inefficienze dovute all'interprete)
di fare quei calcoli o parte di questi, le prestazioni non saranno
così marcatamente intaccate. Rimane sempre buona cosa fare un'indagine
accurata sul programma per evidenziarne i -pochi- punti critici,
quelli cioè maggiormente responsabili del rallentamento, ed
eventualmente agire di consequenza proprio su quelle parti.
Ah, se poi non ci sono le funzioni, di libreria o comunque interne,
che fanno quel tipo di calcoli è possibile che con altri mezzi
(python + Scipy + Numpy) si possa partire da posizioni migliori.
Saluti
Marco

 di consequenza proprio su quelle parti.
Quindi secondo te c'e` una qualche inefficienza nell'uso di funzioni
matlab di cui non mi sono accorto e che portandolo in Fortran ho
eliminato? Purtroppo quel linguaggio non lo conosco e non posso escludere
cio`.
Saluti


 tempo?
E' un'ottimizzazione con il metodo degli algoritmi genetici, praticamente
sono dei cicli 'for' annidiati dove nel piu` interno vengono fatte
operazioni matriciali e semplici calcoli matematici.
Magari tutti i programmi fortran che ho avessero tempi di esecuzione di
soli 7 minuti! :-)


 a quelle differenze di prestazioni. Se il linguaggio permette tramite
[snip]
Se non tu non credi a quel che dice Franco, allora è un altro discorso.  
Inoltre, stai ancora generalizzando, ci saranno problemi per cui Matlab 
oppure Fortran ci metteranno di meno e ripeto che qui si parlava di quel 
specifico problema.
  Xav

 writes:
Saverio> Veramente qui si parlava di tempi di *esecuzione*, non di
Saverio> sviluppo.  E poi, chi sta paragonando le velocità in genere?
Saverio> Franco ha trovato che per quel problema (e soltanto per
Saverio> quello) il suo programma Fortran equivalente ci metteva meno.
Saverio> Lui voleva dimostrarlo ai colleghi ed io ho soltanto
Saverio> suggerito un modo spiritoso di fare.
Sì. Dicevo che mettersi a fare un (ri-)compilatore di un interpretato
può non avere senso, o almeno può non averne quanto scrivere delle
librerie di funzioni da usare con l'interpretato. Ovviamente tutto
dipende dal caso e lungi da me generalizzare.
Saverio> Se non tu non credi a quel che dice Franco, allora è un altro
Saverio> discorso.  Inoltre, stai ancora generalizzando, ci saranno
Saverio> problemi per cui Matlab oppure Fortran ci metteranno di meno
Saverio> e ripeto che qui si parlava di quel specifico problema.
Quello che credo io non c'entra una cippa-lippa, anche perché non si è
mai capito quale fosse il calcolo specifico e quindi non avrei potuto
esprimere un giudizio, ma se mai avrei detto fesserie - cosa che
peraltro faccio comunque.
Se mai è il particolare problema ad avere peso. Al limite posso
esprimermi su Octave, ma anche qui dubito che il mio parare sarebbe
illuminante. Volevo bensì far notare banalmente che esprimere un
*particolare calcolo* con le primitive di un linguaggio interpretato
(o funzioni di libreria) sia diverso, per esempio, dal fare un ciclo
sugli elementi di un vettore. Invece se lo si fa con un compilato può
essere la stessa cosa, anzi se non ci sono in mezzo particolari
ottimizzazioni, lo è.
Saluti
Marco

 writes:
[...]
Franco> Quindi secondo te c'e` una qualche inefficienza nell'uso di
Franco> funzioni matlab di cui non mi sono accorto e che portandolo in
Franco> Fortran ho eliminato? Purtroppo quel linguaggio non lo conosco
Franco> e non posso escludere cio`.
Tutti i cicli o comunque le iterazioni in qualsiasi linguaggio
interpretato che si rispetti portano una svantaggio prestazionale
rispetto al compilato.
Evitare i cicli facendo uso di funzioni ad hoc può dare dei benefici
notevoli. Ovviamente non posso sapere se sia realmente applicabile in
questo caso.
Saluti
Marco

 questo caso.
Anche se non è troppo complesso, non credo sia possibile farlo.
Grazie per le conferme che mi hai dato :-)


 operazioni matriciali e semplici calcoli matematici.
I cicli for con linguaggi interpretati tipo Matlab (Octave, Scilab, ...) sono
visti come fumo negli occhi perche' portano ad un degrado estremo delle
prestazioni.
Un divario cosi' elevato (2giorni vs 7minuti) mi da l'impressione che chi
ha creato il programma in Matlab non sapesse la regola base del linguaggio:
organizzare TUTTO secondo il calcolo matriciale.
-- 
	mantra

 Lo porto su una mia macchina e lo eseguo sotto octave. 
ma Octave, grosso modo... ha le stesse istruzioni con stessa sintassi
Matlab?
E' gratis? se si, dove trovarlo?
 
-- 
"We know Linux to be great...
 it ends infinite loops in 5 seconds only" - Linus Torvalds

 linguaggio: organizzare TUTTO secondo il calcolo matriciale.
 
bisogna vedere anche quanto sono grosse queste matrici...
il rallentamento forse puo' essere dovuto a problemi di gestione della
memoria.
-- 
"We know Linux to be great...
 it ends infinite loops in 5 seconds only" - Linus Torvalds

>>>>> "mantra" == mantra  <man...@NOSPAMlibero.it> writes:
[...]
mantra> I cicli for con linguaggi interpretati tipo Matlab (Octave,
mantra> Scilab, ...) sono visti come fumo negli occhi perche' portano
mantra> ad un degrado estremo delle prestazioni.  Un divario cosi'
mantra> elevato (2giorni vs 7minuti) mi da l'impressione che chi ha
mantra> creato il programma in Matlab non sapesse la regola base del
mantra> linguaggio: organizzare TUTTO secondo il calcolo matriciale.
Ueh, non vale, dopo una settimana si dicono sempre le stesso cose in
questo thread :)
Saluti
Marco

 Lo porto su una mia macchina e lo eseguo sotto octave.
potresti dirmi come impostare la variabile LOADPATH all'interno
di Octave, per favore?... non riesco ad eseguire gli script.


 E' gratis? se si, dove trovarlo?
E' piu' che gratis: e' libero (GPL). Cercalo con Google, non mi
ricordo l'indirizzo.
Valerio.

 Octave, per favore?... non riesco ad eseguire gli script.
La variabile LOADPATH non l'ho impostata, ho messo tutto nella stessa
directory, ha funzionato al 'primo colpo' e non mi sono posto il problema.
L'unica difficolta` e` che non sono compatibili alcune funzioni grafiche.
Purtroppo conosco pochissimo matlab-octave, ho preso solo programmi fatti
da altri.


 organizzare TUTTO secondo il calcolo matriciale.
Impressione esatta, d'altra parte guardando il codice non credo che si 
possano eliminare i cicli do e quindi non si doveva scegliere matlab
come linguaggio per risolvere questo problema.
Franco
PS scrivo da qui perche` con l'alluvione al cineca ho perso
diversi messaggi.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 memoria.
Sul PC dello studente con poca RAM abbiamo notato che il Fortran
ottimizzava meglio la memoria e non faceva swap al contrario di matlab.
Comunque non e` il problema in quanto sulla macchina su cui ho fatto il
confronto c'e` 1.5 GB di RAM.
Potrebbe essere un problema di accesso alla cache, ma su questo non so
dirti niente, si dovrebbero controllare i sorgenti dei due pacchetti ...


 wrote in message
news:bbd73a89.02051...@posting.google.com

Sulla RH7.2 (e credo anche in altre distribuzioni) e` nei CD.
Franco


 directory...
ho risolto...
per chi ne avesse bisogno, basta inserire in .../octaverc la 
seguente riga:
LOADPATH = [LOADPATH, 'PathDaAggiungere'];
cosi' si puo' eseguire uno script o una function che si trova in 
PathDaAggiungere indifferentemente dalla directory in cui ci si trova.


 E' gratis?
Si.
-- 
	mantra

 Si. Dai un'occhio anche a scilab.
Ho visto che Octave e' molto valido, se non si deve usare
pesantemente l'interfaccia grafica direi che puo' essere un
valido sostituto a Matlab... e Scilab, ne ho sentito parlare,
prima di scaricarlo pero' vorrei sapere in cosa si differenzia
dai primi due... non vorrei scaricare una cosa che poi non 
utilizzero'.


 utilizzero'.
Scilab l'ho installato solo da poco tempo, esclusivamente per curiosita':
stavo finendo un grosso progetto in Matlab e mi era venuta la bizza di
verificare se il tutto si potesse gestire anche con Octave.
La risposta e' stata "ni": effettivamente Octave e' pienamente
compatibile con la sintassi del Matlab ma il confronto in base alla velocita'
di esecuzione era veramente impari, a favore purtroppo del non-free. :-(
Cosi', dopo qualche ricerca in rete di tabelle comparative, e' spuntato Scilab.
A livello di toolbox e' relativamente ben fornito (controlli, dsp, ...),
l'interfaccia grafica e' accettabile (sotto Octave per plot decenti bisogna
usare un prog esterno), velocita' dichiarata comparabile (se non superiore) al
Matlab.
Nota negativa: ha una sintassi leggermente diversa dal normale (forse
perche' e' finanziato da un ente francese? :-) quindi non ho potuto
saggiarne direttamente le prestazioni col mio suddetto progetto, ma lo faro'
alla prox occasione.
Una strada alternativa per accelerare le operazioni sotto Octave e' quella del
Python e dei suoi moduli numeric/scientific ma non ho approfondito...
-- 
	mantra

...
