|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
[C] Misuarare il tempo (molto piccolo) impiegato da una funzione
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: Codice:
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;
}
Ed ora fra l'altro mi è anche venuto il dubbio se siano veramente millisecondi quelli restituiti. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
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.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
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? |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Codice:
milliseconds=((float)num_of_cycles)/((float)CLOCKS_PER_SEC); Sorry
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
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. |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2010
Messaggi: 466
|
__________________
I robot hanno scintillanti fondoschiena metallici che non dovrebbero essere baciati. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
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?
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: May 2001
Messaggi: 12939
|
Su linux c'è un ottimo tool che si chiama valgrind.
Puoi farci analisi sull'utilizzo della memoria e può anche fare da profiler: Codice:
$ valgrind --tool=callgrind <eseguibile> |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2004
Città: ROMA
Messaggi: 2055
|
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. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 10:19.





















