Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Velocità di esecuzione
Forum - C/C++ - Velocità di esecuzione

Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 22:08
Sabato, 24/01/2009
Buonasera ragazzi, vado subito al dunque..
Per "estrarre" dei valori da un file nel minor tempo possibile è preferibile fare

Codice sorgente - presumibilmente Plain Text

  1. fscanf(fp, "%d", &v1);
  2. fscanf(fp, "%d", &v2);
  3. fscanf(fp, "%d", &v3);



o

Codice sorgente - presumibilmente Plain Text

  1. fscanf(fp, "%d %d %d", &v1, &v2, &v3);



Se poi mi sapete consigliare un qualche programma che giri su windows che misuri il più accuratamente possibile il tempo di esecuzione dei programmi ve ne sarei molto grato :D

PM Quote
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 1:00
Domenica, 25/01/2009
Beh così ad occhi direi che fare una sola chiamata anzichè 3 è più veloce, ma per fare un benchmark abbastanza accurato puoi registrare il tickcount prima di far partire l'algoritmo, fare la stessa cosa alla fine, fare la differenza dei due ticks e ottieni il numero di millisecondi che sono passati dall'inizio alla fine.


Il mio blog: https://piero.dev
PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 1:34
Domenica, 25/01/2009
E come si fa più precisamente?

PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 2:41
Domenica, 25/01/2009
dunque..
prima di tutto devi documentarti su come funziona la scanf: se ogni scanf corrisponde a una system call allora significa che fare 3 scanf "costa" + di una sola, ma se invece ogni lettura è una sys call singola allora nn c'è differenza su quante scanf usare. (io nn so così precisamente come agisce).

seconda cosa, se ci tieni alla velocità io ti consiglio di usare invece di fscanf le funzioni per lavorare sui file che x quanto ne so sono le + veloci che il C fornisce: fread e fwrite!
specifiche, uso e argomenti (che sono molto semplici) le puoi trovare ovunque.

infine, per misurare la velocità di esecuzione c'è un metodo molto semplice:
prima del blocco di codice da cronometrare scrivi
time_t fine, start = time(NULL);
{codice}
fine = time(NULL);
printf("\nTempo trascorso = %d sec\n", difftime(fine, start));

che ti restituirà il numero di secondi trascorso.
se nn funziona (ma te ne accorgi dal segno) inverti gli argomenti di diffitime o usa un altro descrittore invece di %d (%lf x es)

PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 9:31
Domenica, 25/01/2009
Testo quotato

Postato originariamente da eddiewrc:

infine, per misurare la velocità di esecuzione c'è un metodo molto semplice:
prima del blocco di codice da cronometrare scrivi
time_t fine, start = time(NULL);
{codice}
fine = time(NULL);
printf("\nTempo trascorso = %d sec\n", difftime(fine, start));

che ti restituirà il numero di secondi trascorso.
se nn funziona (ma te ne accorgi dal segno) inverti gli argomenti di diffitime o usa un altro descrittore invece di %d (%lf x es)



Il metodo funziona, però mi stampa solo i secondi, mentre a me servirebbe sapere almeno i centesimi (meglio i millesimi) di secondo.. Come si può fare? 8-|

PM Quote
Avatar
eddiewrc (Member)
Expert


Messaggi: 560
Iscritto: 30/04/2006

Segnala al moderatore
Postato alle 15:30
Domenica, 25/01/2009
cerca nelle funzioni di time.h delle funzioni che facciano al caso tuo!

PM Quote
Avatar
NicobhC (Normal User)
Rookie


Messaggi: 23
Iscritto: 21/02/2008

Segnala al moderatore
Postato alle 16:21
Domenica, 25/01/2009
Ok grazie ^^

PM Quote
Avatar
gioser (Normal User)
Pro


Messaggi: 111
Iscritto: 03/10/2008

Segnala al moderatore
Postato alle 14:26
Lunedì, 26/01/2009
se sei in Windows e vuoi delle misure di tempo ad alta risoluzione, guarda la

QueryPerfomanceCounter()

e la

QueryPerformanceFrequency()

ovviamente non si tratta di funzioni ANSI C

http://msdn.microsoft.com/en-us/library/ms644904(VS.85).aspx

ciao :)

PM Quote