PDA

View Full Version : [C] - attendibilità dei tempi di esecuzione


ilgrigio
02-05-2006, 22:49
per calcolare i tempi uso queste funzioni :

clock0 = GetTickCount(); /* tempo iniziale */
//operazione da volgere
clock1 = GetTickCount(); /* tempo finale */
tempo = ( (double)(clock1-clock0) ) / CLOCKS_PER_SEC;

a volte eseguendo più volte riscontro delle differenze nel tempo finale (1 volta su 10). C'entra qualcosa che il processore magari sta facendo qualcosa altro? come si può esser certi che il tempo di esecuzione sia attendibile?

andbin
03-05-2006, 09:27
per calcolare i tempi uso queste funzioni :

clock0 = GetTickCount(); /* tempo iniziale */
//operazione da volgere
clock1 = GetTickCount(); /* tempo finale */
tempo = ( (double)(clock1-clock0) ) / CLOCKS_PER_SEC;Solo una piccola precisazione: GetTickCount è una delle API di Windows e fornisce il numero di millisecondi trascorsi dall'avvio del sistema. CLOCKS_PER_SEC di per se non c'entrerebbe nulla con le API di Windows e con la GetTickCount, poiché fa parte del time.h ed è relativo alla funzione clock().
Ti va bene che, almeno sul VC++ dove ho controllato, CLOCKS_PER_SEC vale 1000.

a volte eseguendo più volte riscontro delle differenze nel tempo finale (1 volta su 10). C'entra qualcosa che il processore magari sta facendo qualcosa altro? come si può esser certi che il tempo di esecuzione sia attendibile? Dipende quanto è la differenza. Tieni presente che su un sistema multitasking come Windows il tuo processo non è l'unico a "girare".
Comunque se ripeti più volte la misura all'interno del tuo programma, dovresti prendere il tempo più piccolo.