lunedì 9 novembre 2009

C: calcolare il tempo di esecuzione di una funzione

Vediamo un metodo semplice per calcolare il tempo di esecuzione di una funzione C.
In realtà questo metodo può essere utilizzato per calcolare il tempo trascorso tra due istruzioni qualsiasi di un nostro programma.
Innanzitutto abbiamo bisogno di includere nel nostro sorgente l'header time.h che ci permette di utilizzare il tipo di dato clock_t e la macro CLOCKS_PER_SEC, nonché la funzione clock(). Un semplicissimo esempio:

 #include <stdio.h> 
#include <stdlib.h>
#include <time.h>

int main()
{
clock_t t1 = clock();
clock_t t2 = clock();

double time_sec =
(double)(t2-t1)/(double)(CLOCKS_PER_SEC);

printf("Time (sec): %lf\n",time_sec);

return 0;
}

A questo punto possiamo determinare il tempo necessario ad eseguire qualsiasi sequenza di istruzioni o intere funzioni semplicemente inserendo prima e dopo tali sequenze una istruzione del tipo
    clock_t t1 = clock(); 
Supponiamo di voler misurare il tempo necessario per eseguire un for consistente in 2'000'000'000 cicli vuoti, il codice necessario sarebbe il seguente:

 #include <stdio.h> 
#include <stdlib.h>
#include <time.h>

int main()
{
int i;

clock_t t1 = clock();

for(i=0; i<2000000000; ++i) ;

clock_t t2 = clock();

double time_sec =
(double)(t2-t1)/(double)(CLOCKS_PER_SEC);

printf("Time (sec): %lf\n",time_sec);

return 0;
}

Naturalmente il tempo necessario ad eseguire un insieme di istruzioni non è deterministico, cioè non sarà sempre lo stesso ad ogni esecuzione. Ogni volta che lanciamo la nostra applicazione possiamo ottenere valori differenti per il tempo di esecuzione.

NOTA: se vogliamo determinare il tempo complessivo necessario ad eseguire un intero programma, la shell di Linux ci mette a disposizione un comando molto utile e molto più semplice da utilizzare, si chiama time e può essere utilizzato così:
    time ./nome_programma 

Nessun commento:

Posta un commento