Pagina 1 di 2
Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 22:35
da andyoso
Ciao a tutti,
Oggi ho fatto una scoperta alquanto piacevole....
Ho fatto un programmino con c++ utilizzando le ricorsioni...
//FIBONACCI con il metodo della ricorsione
#include
using namespace std;
long FIBONACCI (long, int&);
int main()
{
int conta=0;
long n, risultato;
cout";
cin>>n;
risultato=FIBONACCI (n, conta);
cout"<<risultato<<endl;
}
long FIBONACCI (long n, int &conta)
{
conta++;//conta quante volte FIBONACCI viene eseguito
cout<<conta<<endl;
if(n==0 || n==1)
return n;
else
return FIBONACCI (n-1, conta) + FIBONACCI (n-2, conta);
}
Il programma chiede quale numero n della seguenza di Fibonacci si vuole conoscere.
Es. se n=4 il programma calcolerà il quarto numero della seguenza di fibonacci, cioè 3.
Questo programmino è famoso per la sua lentezza che aumenta esponenzialmente con l'aumentare di n.
Ma ho notato che con Linux il tempi diminuiscono enormemente!!!
Es. Lo stesso codice compilato su Windows con Dev-C++ con n=30 ci mette 5minuti e 10 secondi, mentre con Linux, compilato con Anjuta, ci mette solo 1minuto e 23 secondi
Ma come mai??? non dovrebbe essere lo stesso programma????
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 22:37
da Pappice
Non vorrei dire fesserie, ma dovrebbe essere diverso il modo in cui il SO gestisce le istruzioni del processore...
...ed ora la parola ai veri esperti!!!

Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 22:43
da Guiodic
Può darsi che la ragione stia nei processi concorrenti con il tuo programma. Probabilmente Windows ha una serie di processi del sistema molto più esosi, in termini di cpu, di Linux che, peraltro, ha anche una migliore gestione del processi stessi.
Detto ciò, la differenza è talmente enorme che davvero non saprei spiegarmela, a meno che su Windows non ci stavi facendo girare qualcosa di davvero pesante.
Peraltro non è neppure una differenza di compilatore perché è lo stesso (g++).
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 22:47
da andyoso
No non stavo eseguendo niente su windows oltre al programma in questione....bhà
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 22:48
da Guiodic
andyoso ha scritto:
No non stavo eseguendo niente su windows oltre al programma in questione....bhà
Non ho windows e non posso fare una verifica. Magari qualcuno che ce l'ha potrebbe provare.
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:02
da gennaro
Scusa ma perchè farlo con la ricorsione?

Magari dico una fesseria ma non è molto più veloce se lo scrivi così?? :-[
Codice: Seleziona tutto
#include <iostream>
using namespace std;
int main() {
long n, c, a = 0, b = 1;
cout<<"Inserire il valore n--->";
cin>>n;
while (n > 1) {
c = a;
a = b;
b = c+b;
n--;
}
cout<<"Fibonacci("<<n<<") e' uguale a---->"<<b<<endl;
return 0;
}
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:04
da Pappice
ah, è vero... e anche la priorità del processo potrebbe contare... :-[
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:05
da andyoso
gennaro ha scritto:
Scusa ma perchè farlo con la ricorsione?

Magari dico una fesseria ma non è molto più veloce se lo scrivi così?? :-[
Codice: Seleziona tutto
#include <iostream>
using namespace std;
int main() {
long n, c, a = 0, b = 1;
cout<<"Inserire il valore n--->";
cin>>n;
while (n > 1) {
c = a;
a = b;
b = c+b;
n--;
}
cout<<"Fibonacci("<<n<<") e' uguale a---->"<<b<<endl;
return 0;
}
[email][/email]
Lo so, ma questo era un eserczio che mi ha assegnato il mio prof. sulle ricorsioni
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:13
da gennaro
Ah scusa... però mi sembra strano che sia così lento... cioè senza la ricorsione e con n = 30 a me impiega meno di un secondo... ed ho anche un processore molto scarso...

Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:20
da andyoso
gennaro ha scritto:
Ah scusa... però mi sembra strano che sia così lento... cioè senza la ricorsione e con n = 30 a me impiega meno di un secondo... ed ho anche un processore molto scarso...
Perchè con il metodo della iterazione (quello proprosto da gennaro) apre solo una funzione anche se n=30, mentre con il metodo della ricorsione si aprono 2milioni e 7cento funzioni una dentro l'altra che occupano una molta memoria
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:21
da Majinga
Non è che lo esegui da dev c++, in quel caso dev potrebbe eseguirtelo in modalità simil-debug, rallentandolo notevolmente.
Re: Programmino su linux molto più veloce che su Windows
Inviato: mercoledì 26 settembre 2007, 23:37
da gennaro
andyoso ha scritto:
Perchè con il metodo della iterazione (quello proprosto da gennaro) apre solo una funzione anche se n=30, mentre con il metodo della ricorsione si aprono 2milioni e 7cento funzioni una dentro l'altra che occupano una molta memoria
Guarda magari dico una sciocchezza ma se togli quel
dalla funzione FIBONACCI va moooooolto più veloce! (yes)
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 0:23
da Guiodic
gennaro ha scritto:
andyoso ha scritto:
Perchè con il metodo della iterazione (quello proprosto da gennaro) apre solo una funzione anche se n=30, mentre con il metodo della ricorsione si aprono 2milioni e 7cento funzioni una dentro l'altra che occupano una molta memoria
Guarda magari dico una sciocchezza ma se togli quel
dalla funzione FIBONACCI va moooooolto più veloce! (yes)
scusate ma non è questo il punto... la domanda è un'altra: a parità di sorgente, perché su Win ci mette 5 minuti e su Linux 1 ?
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 10:20
da Pappice
Beh, ma non 'abbiamo spiegato?
Processi concorrenti, priorità del processo che esegue l'operazione, gestione delle istruzioni del processore...
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 14:59
da difesaparcosempione
su windows il programma lo attivi da fuori IDE ( direttamente da una finestra DOS/nera) ?
Su winzoz devi generare un exe e poi attivarlo da finestra comandi. ( classico programma console like)
ciao

Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 14:59
da Guiodic
Pappice ha scritto:
Beh, ma non 'abbiamo spiegato?
Processi concorrenti, priorità del processo che esegue l'operazione, gestione delle istruzioni del processore...
Sì, ma è davvero tanta la differenza....
Nessuno può fare una prova compilandolo sia su win che su Ubuntu, con lo stesso compilatore (g++) ?
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 16:34
da difesaparcosempione
Una risposta potrebbe essere anche questa:
Il sw linux di xterm è nettamente più performante dei term cmd di windows.
Se le scritte sono numerose (cout) i cmd di windows sono destinati a perdere in confronto al xterm o addirittura tty.
Una prova da fare sarebbe quella di togliere le cout del contatore e mettere data e ora di fine - inizio programma.
Probabilmente così winzoz guadagnerà qualcosa. ( se si parla di identico hw )
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 16:37
da Pappice
Non c'è un modo di conteggiare i... come si chiamano... i cicli di CPU consumati dal software sia sotto win sia sotto lin?
Così ci togliamo qualche dubbio...
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 16:40
da Guiodic
Pappice ha scritto:
Non c'è un modo di conteggiare i... come si chiamano... i cicli di CPU consumati dal software sia sotto win sia sotto lin?
Così ci togliamo qualche dubbio...
Vabe' ma quelli potrebbero essere tranquillamente gli stessi, o differire di poco.
In effetti non avevo pensato alla velocità della shell.
Potresti cambiare il programma in modo da non avere output e fare la prova?
Re: Programmino su linux molto più veloce che su Windows
Inviato: giovedì 27 settembre 2007, 16:47
da Pappice
Guiodic ha scritto:
Pappice ha scritto:
Non c'è un modo di conteggiare i... come si chiamano... i cicli di CPU consumati dal software sia sotto win sia sotto lin?
Così ci togliamo qualche dubbio...
Vabe' ma quelli potrebbero essere tranquillamente gli stessi, o differire di poco.
Sarebbero gli stessi nel caso venissero usate le stesse istruzioni del processore, giusto?
Se però sotto win per fare una operazione viene usato un gruppo di istruzioni il tempo e i cicli di cpu si allungano... dico una caVOLata? :-[