OpenMP time and clock () calcola due risultati diversi

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?

Il tempo trascorso calcolato tramite la funzione cpu_time() è simile al tempo sequenziale.

Prima che inizi il calcolo

 ctime1_ = cpu_time(); #ifdef _OPENMP ctime1 = omp_get_wtime(); #endif 

Dopo il calcolo finisce

 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 del campione

 7.009537 - 11.575277 seconds. 

La funzione clock misura il tempo di cpu, il tempo che passi triggersmente sulla CPU, la funzione OMP misura il tempo trascorso durante l’esecuzione, due cose completamente diverse.

Il tuo processo sembra essere bloccato in attesa da qualche parte.

Ciò che osservate è un risultato perfettamente valido per qualsiasi applicazione parallela: il tempo di CPU combinato di tutti i thread restituiti da clock() è in genere maggiore del tempo di wallclock misurato da omp_get_wtime() tranne se l’applicazione per lo più dorme o attende.

La funzione clock() restituisce il tempo della CPU , non il tempo di parete . Invece, usa gettimeofday() .