2012-05-20 104 views
5

我有通過OpenMP進行並行化的順序代碼。我已經把相應的編譯指示和測試。在測試過程中,我通過檢查在主函數中花費的時間來解釋性能增益。奇怪的是通過cpu_time()計算的經過時間和omp_get_wtime()返回兩個不同的結果。你認爲原因是什麼?OpenMP時間和時鐘()計算兩個不同的結果

通過cpu_time()函數計算的經過時間與連續時間類似。

之前計算開始

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

計算結束

ctime2_ = cpu_time(); 
#ifdef _OPENMP 
ctime2 = omp_get_wtime(); 
#endif 

CPU_TIME()函數的定義

double cpu_time(void) 
{ 
    double value; 
    value = (double) clock()/(double) CLOCKS_PER_SEC; 
    return value; 
} 

打印結果

printf("%f - %f seconds.\n", ctime2 - ctime1, ctime2_ - ctime1_); 

樣品結果

7.009537 - 11.575277 seconds. 

回答

11

clock功能測量CPU時間,你積極花費在CPU上的時候,OMP功能測量,因爲它的執行,兩個完全不同的事情時經過的時間。

您的進程似乎在等待某個地方被阻止。

+5

在Windows上,'clock()'實際上會測量牆壁時間。 – Mysticial

+1

@Mysticial,他們似乎跟隨自己的心情,而不是標準。該標準規定:*時鐘函數返回實現對程序使用的處理器時間的最佳近似值,因爲實現定義時代的開始只涉及程序調用。* –

6

你觀察什麼爲任何並行應用程序完全有效的結果 - 聯合CPU時間由clock()返回的所有線程通常比除非你的應用程序主要是睡覺或等待通過omp_get_wtime()測量時鐘時間更多。

相關問題