2012-05-20 9 views
5

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. 

risposta

11

La clock funzione di tempo misure di CPU, il tempo speso attivamente sulla CPU, la funzione di OMP misura il tempo in quanto è passato durante l'esecuzione, due cose completamente diverse.

Il processo sembra bloccato in attesa da qualche parte.

+5

Su Windows, 'clock()' misura effettivamente l'ora del muro. – Mysticial

+1

@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. * –

6

ciò che si osserva è un risultato perfettamente valido per qualsiasi applicazione in parallelo - il combinato tempo di CPU di tutte le discussioni come restituito da clock() è di solito più del tempo wallclock misurata dal omp_get_wtime() tranne se l'applicazione dorme o attese per lo più .

Problemi correlati