View Full Version : [C] Misuarare il tempo (molto piccolo) impiegato da una funzione
fbcyborg
24-02-2011, 12:38
Salve a tutti.
Vorrei misurare il tempo che ci mette una certa funzione a fare delle operazioni, il problema è che nel modo in cui faccio io, la sensibilità non è sufficiente per darmi il tempo esatto in millisecondi. Se dura troppo poco, ottengo un tempo di 0.000000 ms (in questo formato come l'ho scritto). Fra l'altro con questi zeri che non so come togliere o comunque sono sempre tali (mai !=0), non mostrando mai valori decimali.
Ecco come faccio a definire una funzione che restituisce il tempo di esecuzione:
float function(){
clock_t start,stop;
float milliseconds,num_of_cycles;
start=clock();
// OPERAZIONE
stop=clock();
num_of_cycles=stop-start;
milliseconds=((float)num_of_cycles)/((float)CLOCKS_PER_SEC);
return milliseconds;
}
Meglio di questo non riesco a fare, qualcuno mi sa aiutare?
Ed ora fra l'altro mi è anche venuto il dubbio se siano veramente millisecondi quelli restituiti.
banryu79
24-02-2011, 12:44
Al di la di altre considerazioni, invece di prendere il tempo di esecuzione di una sola chiamata, prova a prendere il tempo di, che so, 10 milioni di chiamate eseguite in un cilco e poi prendi il tempo medio.
fbcyborg
24-02-2011, 12:50
Hai ragione, infatti è quello che ho fatto in altre circostanze, solo che speravo ci fosse un modo per avere una misurazione di tempi anche più piccoli.
Ma invece, per quanto riguarda la questione dei decimali, e del fatto che ci sono tutti quegli zeri inutilizzati? Che mi sai dire?
banryu79
24-02-2011, 13:02
Ma invece, per quanto riguarda la questione dei decimali, e del fatto che ci sono tutti quegli zeri inutilizzati? Che mi sai dire?
Niente, perchè non conosco la funzione clock() ne ho mai usato la struct clock_t, ne conosco la costante CLOCKS_PER_SEC e quindi non so cosa salti fuori da
milliseconds=((float)num_of_cycles)/((float)CLOCKS_PER_SEC);
e ne come 'milliseconds' venga stampato.
Sorry :fagiano:
fbcyborg
24-02-2011, 13:12
Allora, la funzione clock() restituisce il n. di clock della cpu in quell'istante.
La costante CLOCKS_PER_SECOND è anch'essa definita in /usr/include/time.h e ti dice appunto i clock al secondo della tua CPU.
The clock() function returns an approximation of processor time used by the program, il che, dovrebbe equivalere a quanto detto prima. È una sorta di misurazione del tempo di cpu nell'istante in cui chiami quella funzione.
In realtà, ho scoperto ora e appurato che si tratta di secondi, e non di millisecondi. Infatti per farmi restituire i millisecondi moltiplico per 1000.
Comunque mi restano gli altri dubbi sul come avere le cifre decimali "attive" nella misurazione dei tempi.
bobbytre
24-02-2011, 13:27
http://www.hwupgrade.it/forum/showpost.php?p=34415740&postcount=13
fbcyborg
24-02-2011, 13:31
Scusate, è colpa mia che ho dimenticato di dire che sto programmando su Linux (anche se avevo accennato ad una libreria in /usr/include). Siccome ho visto un #include <windows.h>, per caso quel codice non funzionerà su Linux?
Su linux c'è un ottimo tool che si chiama valgrind.
Puoi farci analisi sull'utilizzo della memoria e può anche fare da profiler:
$ valgrind --tool=callgrind <eseguibile>
Così ti salva la traccia su un file che poi è possibile visualizzare con tool grafici come KCachegrind (per KDE, non so per gnome...).
fbcyborg
24-02-2011, 13:53
Grazie, è molto interessante questo tool.
Purtroppo però credo proprio che non faccia al caso mio. Io devo misurare il tempo impiegato da certe operazioni, dall'interno del codice C che ho scritto, proprio come ho scritto nell'esempio.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.