Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    [C] Misurare tempo di esecuzione

    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 !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Anche io ho il tuo stesso problema!
    Ho provato queste linee ma non vanno... speriamo in una mano
    Nella stampa, ottengo tre 0.00000. Potreste spiegarmi l'errore?
    Grazie
    codice:
    #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;
    }

  3. #3
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    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

    codice:
    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;
    }

  4. #4
    Uhmm...ma a te stampa qualcosa ?? A me risulta sempre 0 !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  5. #5
    Visto che sto programmando sotto Linux ho trovato questo
    http://www.gnu.org/software/libc/man.../CPU-Time.html

    Che ho subito provato ma non funge, c'è sotto qualcosa !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  6. #6
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    A me entrambi i codici stampano qualcosa...
    Forse a te stampa 0 perchè il programma dura pochissimo.
    Prova così:
    codice:
    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

  7. #7
    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 !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    41
    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

  9. #9
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    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

    codice:
    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
    codice:
    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;
    }

  10. #10
    Utente di HTML.it L'avatar di Alcott
    Registrato dal
    Jul 2003
    Messaggi
    154
    Scusa Frapper, come si potrebbe fare per ottenere il tempo in millisecondi?
    Thx

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2019 vBulletin Solutions, Inc. All rights reserved.