 
View Full Version : [C++] Tempo di esecuzione
Vorrei vedere quanto tempo impiega una funzione a fare il suo lavoro. A tal proposito, nel corpo della funzione, come prima istruzione ho messo:
clock_t  tempoesecuzione;
tempoesecuzione = clock();
e come ultima:
 
String a=(String)(tempoesecuzione/CLK_TCK);
Pero' mi viene un numero che non corrisponde ai secnodi trascorsi. Dove è l'errore? Grazie.
Vorrei vedere quanto tempo impiega una funzione a fare il suo lavoro. A tal proposito, nel corpo della funzione, come prima istruzione ho messo:
clock_t  tempoesecuzione;
tempoesecuzione = clock();
e come ultima:
 
String a=(String)(tempoesecuzione/CLK_TCK);
Pero' mi viene un numero che non corrisponde ai secnodi trascorsi. Dove è l'errore? Grazie.No, al massimo una cosa del genere:
#include <time.h>
....
clock_t t1, t2;
double  tempo;
t1 = clock ();
....codice da misurare....
t2 = clock ();
tempo = ((double) (t2 - t1)) / CLOCKS_PER_SEC;Nota, è da testare. ;)
No, al massimo una cosa del genere:
#include <time.h>
....
clock_t t1, t2;
double  tempo;
t1 = clock ();
....codice da misurare....
t2 = clock ();
tempo = ((double) (t2 - t1)) / CLOCKS_PER_SEC;Nota, è da testare. ;)
Funziona! Pero' non ho capito: clock() mi da' il tempo di inizio della funzione?Nel senso: parte da 0 e poi, quando lo catturo mi da' il tempo trascorso?O mi da' il tempo di sistema? Quindi sbagliavo in quanto mi serviva anche il tempo di fine. Infatti fai la differenza tra i due. Grazie :)
Pero' non ho capito: clock() mi da' il tempo di inizio della funzione?Nel senso: parte da 0 e poi, quando lo catturo mi da' il tempo trascorso?O mi da' il tempo di sistema?La documentazione su linux non è chiarissima, quindi ho fatto delle prove pratiche. Quando il processo parte, clock vale 0 e si incrementa man mano che il processo consuma il tempo di CPU.
La documentazione su linux non è chiarissima, quindi ho fatto delle prove pratiche. Quando il processo parte, clock vale 0 e si incrementa man mano che il processo consuma il tempo di CPU.
Ok , adesso ho capito.Quindi non serve fare due chiamate a clock(), credo. Basta chiamarlo una volta sola e prendere il tempo. Ma va anche bloccato? Nel senso, Non si ferma fino a che non chiudo il programma?
Ok , adesso ho capito.Quindi non serve fare due chiamate a clock(), credo. Basta chiamarlo una volta sola e prendere il tempo.Non so cosa devi fare di preciso, ma è buona cosa usare sempre 2 valori ed ottenere la differenza.
Ma va anche bloccato? Nel senso, Non si ferma fino a che non chiudo il programma?No, questo clock è un valore che si incrementa continuamente e quindi, tra l'altro, può anche "wrappare", in pratica ripartire da 0.
jcd@big:~$ man clock | sed -ne '/^N^HNO/,+3p'
NOTES
       The C standard allows for arbitrary values at the start of the program;
       subtract  the value returned from a call to clock() at the start of the
       program to get maximum portability.
jcd@big:~$
Non so cosa devi fare di preciso, ma è buona cosa usare sempre 2 valori ed ottenere la differenza.
No, questo clock è un valore che si incrementa continuamente e quindi, tra l'altro, può anche "wrappare", in pratica ripartire da 0.
Mi hai detto che, quando chiami clock(),parte da 0. Quindi non capisco perchè serve chiamarlo, due volte. Alla seconda volta non riparte da 0? Mi tornerebbe fare la differenza se clock(), mi dà il tempo di sistema, quindi, richiamandolo una seconda volta e facendo la differenza ho il tempo trascorso.
Mi hai detto che, quando chiami clock(),parte da 0. Quindi non capisco perchè serve chiamarlo, due volte. Alla seconda volta non riparte da 0? Mi tornerebbe fare la differenza se clock(), mi dà il tempo di sistema, quindi, richiamandolo una seconda volta e facendo la differenza ho il tempo trascorso.Io ho fatto delle prove su un sistema Linux (una Slackware 9.1):
#include <stdio.h>
#include <time.h>
int main()
{
    clock_t c;
    c = clock ();
    printf ("%d\n", c);
    return 0;
}In effetti, stampa 0.
Forse però non hai letto bene il post di Qu@ker. Nella pagina di man di clock c'è una nota importante. Una qualunque implementazione di clock non è obbligata a fornire un valore di 0 all'inizio del processo!!!!!! Potrebbe anche non essere così.
Ecco perché, per avere la massima portabilità, è necessario calcolare la differenza tra 2 valori. Solo in questo modo può eliminare eventuali "offset" del valore!
Io ho fatto delle prove su un sistema Linux (una Slackware 9.1):
#include <stdio.h>
#include <time.h>
int main()
{
    clock_t c;
    c = clock ();
    printf ("%d\n", c);
    return 0;
}In effetti, stampa 0.
Forse però non hai letto bene il post di Qu@ker. Nella pagina di man di clock c'è una nota importante. Una qualunque implementazione di clock non è obbligata a fornire un valore di 0 all'inizio del processo!!!!!! Potrebbe anche non essere così.
Ecco perché, per avere la massima portabilità, è necessario calcolare la differenza tra 2 valori. Solo in questo modo può eliminare eventuali "offset" del valore!
Ok ora ho capito, grazie per i chiarimenti :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.