PDA

Visualizza la versione completa : [C] Misurare tempo di esecuzione


rasega
01-03-2006, 16:30
Ciao,
se volessi misurare il tempo di esecuzione di un determinato blocco di codice come potrei fare ?? Con che accuratezza ??
Pensavo di usare la funzione time() o qualcosa di simile ma suppongo mi restituiscano valori in secondi...un po' troppo poco performante x ciò che mi serve !!

Alcott
02-03-2006, 02:41
Anche io ho il tuo stesso problema!
Ho provato queste linee ma non vanno... speriamo in una mano :confused:
Nella stampa, ottengo tre 0.00000. Potreste spiegarmi l'errore?
Grazie :ciauz:

#include <errno.h> /* definizioni e routine per gli errori */
#include <stdlib.h> /* libreria standard C */
#include <stdio.h> /* libreria standard I/O */
#include <string.h> /* funzioni per le stringhe */
#include <sys/types.h>
#include <math.h> /* funzioni matematiche - atoi */
#include <ctype.h> /* funzioni per il controllo dei caratteri */
#include <fcntl.h> /* funzioni per l'utilizzo dei file */
#include <time.h> /* funzioni per l'ora e data */
#include <sys/stat.h> /* usato per le named pipe (mknod()) */


main (int argc, char *argv[]){

time_t tempoInizio, tempoFine;
clock_t tempoTot;
double tTot;
int i, j;

time(&tempoInizio);
printf("OK1\n");

for(i=0; i<20000; i++)
j = i;

time(&tempoFine);
printf("OK2\n");

printf("Tempo di esecuzione algoritmo: %f\n", difftime(tempoFine, tempoInizio));

tempoTot = clock();
tTot = (double) clock();
printf("\nTempo di esecuzione algoritmo: %f %f\n", tTot, tempoTot);

return 0;
}

Alcott
02-03-2006, 02:59
Spero (e lo sottolineo 1000 volte) di aver risolto :)

rasega, prova questo codice (ti dà il tempo di esecuzione TOTALE del codice). Ti ritorna il tempo di esecuzione in millisecondi :ciauz:


main (int argc, char *argv[]){

// clock_t tempoTot;
double tTot;

system("PAUSE");

// tempoTot = clock();
tTot = (double) clock();
printf("\nTempo di esecuzione algoritmo: %.0f\n", tTot);

return 0;
}

rasega
02-03-2006, 10:47
Uhmm...ma a te stampa qualcosa ?? A me risulta sempre 0 !!

rasega
02-03-2006, 10:51
Visto che sto programmando sotto Linux ho trovato questo
http://www.gnu.org/software/libc/manual/html_node/CPU-Time.html

Che ho subito provato ma non funge, c'è sotto qualcosa !! :madai!?: :dhò:

Alcott
02-03-2006, 15:10
A me entrambi i codici stampano qualcosa...
Forse a te stampa 0 perchè il programma dura pochissimo.
Prova così:

main{
clock_t start, end;
double cpu_time_used;

start = clock();
system("PAUSE");
end = clock();
cpu_time_used = ((double) (end - start)); // CLOCKS_PER_SEC
printf("\nTempo di esecuzione algoritmo: %.0f\n", cpu_time_used);
}

Come librerie includi stdio.h, stdlib.h e time.h :ciauz:

rasega
02-03-2006, 16:11
Uhm...ho provato a creare un ciclo for tanto x fagli eseguire qualcosa...non vorrei che ci fosse qualche problema sotto Linux !!
Inoltre CLOCKS_PER_SEC a me risulta essere 1000000...indipendentemente dal processore che uso...mi sa che oltre non può andare !!

Frapper
02-03-2006, 19:56
ciao a tutti...allora io solitamente usa la funzione clock all'interno di time.h, che restituisce un valore di tipo time_t che rappresenta il numero di cicli macchina che si può convertire in quello che vuoi sapendo che che nella costante CLOCKS_PER_SEC è contenuto il numero di cicli necessari per un secondo di esecuzione....

quindi

int main()
{
clock_t tempoiniziale,tempofinale;
long numerosecondi;
tempoiniziale=clock();
....
....
....
tempofinale=clock();
numerocicli=tempofinale-tempoiniziale;
numerosecondi=((float)numericicli)/((float)CLOCKS_PER_SEC);
printf("NUMERI SECONDI %f",numerosecondi);

return 0;
}
E' fatto in sec ma con CLOCKS_PER_SEC puoi ottenere anchee per valaori più piccoli

spero di esserti stato utile ciao

Alcott
03-03-2006, 12:27
Originariamente inviato da Alcott
Spero (e lo sottolineo 1000 volte) di aver risolto :)

rasega, prova questo codice (ti dà il tempo di esecuzione TOTALE del codice). Ti ritorna il tempo di esecuzione in millisecondi :ciauz:


main (int argc, char *argv[]){

// clock_t tempoTot;
double tTot;

system("PAUSE");

// tempoTot = clock();
tTot = (double) clock();
printf("\nTempo di esecuzione algoritmo: %.0f\n", tTot);

return 0;
}

Scusa il codice corretto era

main (int argc, char *argv[]){

clock_t tTot;
double tTot;

system("PAUSE");

tTot = (double) clock();
printf("\nTempo di esecuzione algoritmo: %.0f\n", tTot);

return 0;
}

Alcott
03-03-2006, 12:29
Scusa Frapper, come si potrebbe fare per ottenere il tempo in millisecondi?
Thx :ciauz:

Loading