私はOpenMP経由で並列化するためのシーケンシャルコードを持っています。対応するプラグマを入れてテストしています。テスト中は、主な機能で費やされた時間をチェックすることでパフォーマンスの向上を解釈します。奇妙なことは、cpu_time()
で計算された経過時間であり、omp_get_wtime()
は2つの異なる結果を返します。理由は何だと思いますか?OpenMPのtimeとclock()は2つの異なる結果を計算します
cpu_time()
関数で計算された経過時間は、逐次時間と似ています。
計算は
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_);
を終了した後に計算が
ctime1_ = cpu_time();
#ifdef _OPENMP
ctime1 = omp_get_wtime();
#endif
を開始する前
サンプル結果
7.009537 - 11.575277 seconds.
Windowsでは、 'clock()'は実際に壁の時間を測定します。 – Mysticial
@Mysticial、もう一度、彼らはスタンダードではなく、自分の気分に従っているようです。 * clock関数は、プログラム呼び出しにのみ関連する実装定義の時代が始まって以来、プログラムが使用しているプロセッサ時間に対する実装の最善の近似値を返します。 –