PDA

View Full Version : [C] Cronometrare programma multithreaded


Manugal
26-06-2010, 13:50
Ciao a tutti!

Ho sviluppato un programmino che esegue un determinato algoritmo e poi mi stampa a schermo i risultati. Questo algoritmo prende in input un array molto grande (di lunghezza 262000) e mi restituisce un array calcolato secondo l'algoritmo (non lo scrivo perché è un po' lungo). Siccome uso due thread che processano uno la prima metà dell'array e uno la seconda metà, ho bisogno di capire il tempo impiegato da ciascun thread. Ho utilizzato la clock_gettime() con l'argomento CLOCK_MONOTONIC e poi quando terminano i due thread sommo i tempi di esecuzione di entrambi per avere il tempo totale. Il problema è che alla prima esecuzione (cioè appena dopo aver compilato) il timer mi restituisce 6 sec, mentre dalla seconda esecuzione in poi sempre 8 secondi. :confused:

E' una cosa normale? Anche perché ho sviluppato anche la versione monothread e quella impiega sempre 6,97 secondi ad ogni esecuzione (lì però ho usato clock() per cronometrare l'algoritmo).

P.S. : Entrambe le versioni le ho compilate con il flag di ottimizzazione O3.

Teo@Unix
26-06-2010, 14:23
non saprei cosa può generare questo errore, dato che a ogni escuzione la situazione dovrebbe esere la medesima trascurando l'impegno per altri processi....

Se sei come penso (e spero :p ) su linux prova ad utilizzare "time"

l'output di time è semplice riporta il tempo di esecuzione del programma:

root@saturn:~# time
real 0m0.000s
user 0m0.000s
sys 0m0.000s

Manugal
26-06-2010, 15:20
Il comando time già l'avevo utilizzato e mi ritornava questo output.


real 0m14.253s
user 0m7.820s
sys 0m0.680s


Però non saprei perché fa così con la funzione C.