sabato 17 novembre 2012

Come si misura ill tempo di esecuzione di un blocco di codice C?

Misurare le performance di un frammento codice o di una funzione può essere utile per valutare le prestazioni (benchmarcking) del proprio codice o per decidere tra diversi approcci per la soluzione di un certo problema qual'è il più veloce. In un precedente post, abbiamo visto come misurare il tempo di esecuzione di un eseguibile utilizzando il comando Unix Time, disponibile anche su Windows in CigWin. Invece, per misurare la velocità di esecuzione di un frammento di codice all'interno di un programma scritto in C si può usare la funzione clock(), il cui prototipo si trova in <time.h>.
La funzione clock() restituisce il numero di cicli di clock dall'ultima chiamata della funzione. In <time.h> c'è anche una costante chiamata CLOCK_PER_SEC che fornisce il numero di clock per secondo per la piattaforma hardware e software che si sta usando.

In breve, se prima di iniziare il blocco di codice da cronometrare si memorizza in una variabile, ad esempio start, il valore restituito dalla clock() e dopo il codice si memorizza il valore restituito dalla clock in un'altra variabile, ed esempio end, si può ottenere il tempo di esecuzione calcolando (end-start)/CLOCK_PER_SEC.
Un semplice esempio dovrebbe chiarire le cose più di mille parole:


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

int main() {
  clock_t start = clock();
  .
//  blocco di codice da cronometrare
  .
  clock_t end = clock();
  printf("Tempo di esecuzione =  %f secondi \n", ((double)(end - start)) / CLOCKS_PER_SEC);
  return 0;
}
Clock_t è un tipo definito in <time.h> per la memorizzazione dei cicli di clock o Tics.
Buona misurazione a tutti :)!

Nessun commento:

Posta un commento