我有通過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.
在Windows上,'clock()'實際上會測量牆壁時間。 – Mysticial
@Mysticial,他們似乎跟隨自己的心情,而不是標準。該標準規定:*時鐘函數返回實現對程序使用的處理器時間的最佳近似值,因爲實現定義時代的開始只涉及程序調用。* –