Ho il codice sequenziale per parallelizzare tramite OpenMP. Ho messo i pragma corrispondenti e testarlo. Durante il test, interpreto il guadagno in termini di prestazioni controllando il tempo trascorso nella funzione principale. La cosa strana è il tempo trascorso calcolato tramite cpu_time()
e omp_get_wtime()
restituisce due risultati diversi. Quale pensi che sia la ragione?OpenMP time and clock() calcola due risultati diversi
Il tempo trascorso calcolato tramite la funzione cpu_time()
è simile al tempo sequenziale.
Prima calcolo inizia
ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
Dopo calcolo termina
ctime2_ = cpu_time();
#ifdef _OPENMP
ctime2 = omp_get_wtime();
#endif
cpu_time() definizione della funzione
double cpu_time(void)
{
double value;
value = (double) clock()/(double) CLOCKS_PER_SEC;
return value;
}
risultato di stampa
printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_);
risultato Esempio
7.009537 - 11.575277 seconds.
Su Windows, 'clock()' misura effettivamente l'ora del muro. – Mysticial
@Mysticial, di nuovo, sembrano seguire il proprio umore, invece dello standard. Lo standard dice: * La funzione clock restituisce la migliore approssimazione dell'implementazione al tempo del processore utilizzato dal programma dall'inizio di un'era definita dall'implementazione relativa solo al richiamo del programma. * –