これらの 2 つの関数は、経過実行時間 (あるいはエラー指示子として -1.0) を返しま す。返される時間は秒単位です。
Fortran 95 が使用する dtime と etime のバージョンは、デフォルトではシステムの低分解能クロックを使用します。分解能は 100 分の 1 秒です。ただし、プログラムが Sun OSTM オペレーティングシステムのユーティリティー ptime(1)、(/usr/proc/bin/ptime) の下で実行された場合は、高分解能クロックが使用されます。
dtime の場合、経過時間は次のとおりです。
最初の呼び出し: 実行開始からの経過時間
2 回目以降の呼び出し: 前回の dtime の呼び出しからの経過時間
シングルプロセッサ: CPU の使用時間
マルチプロセッサ: すべての CPU 使用合計時間。この合計時間は有用ではありません。etime を使用してください。
並列化ループ内から dtime を呼び出すと、決定性のない結果になります。 経過時間カウンタが、ループに関与しているすべてのスレッドに対してグローバルであるためです。
関数は、次のように呼び出します。
e = dtime( tarray ) |
|||
tarray |
real(2) |
出力 |
e= -1.0: エラー: tarray 値は未定義 e≠ -1.0: tarray(1) にユーザー時間 (エラーがない場 合)。tarray(2) にシステム時間 (エラーがない場合) |
戻り値 |
real |
出力 |
e= -1.0: エラー e≠ -1.0: tarray(1) と tarray(2) の合計時間 |
例: dtime()、シングルプロセッサ
demo% cat tdtime.f real e, dtime, t(2) print *, 'elapsed:', e, ', user:', t(1), ', sys:', t(2) do i = 1, 10000 k=k+1 end do e = dtime( t ) print *, 'elapsed:', e, ', user:', t(1), ', sys:', t(2) end demo% f95 tdtime.f demo% a.out elapsed: 0.0E+0 , user: 0.0E+0 , sys: 0.0E+0 elapsed: 0.03 , user: 0.01 , sys: 0.02 demo% |
dtime の場合、経過時間は次のとおりです。
シングルプロセッサ実行: 呼び出したプロセスの CPU 時間
マルチプロセッサ実行: プログラムを処理している間の実時間
実行時ライブラリは、PARALLEL または OMP_NUM_THREADS 環境変数が 1 より大きい整数に定義される場合に、プログラムのマルチプロセッサモードでの実行を決定します。
関数は、次のように呼び出します。
e = etime( tarray ) |
|||
tarray |
real(2) |
出力 |
e= -1.0: エラー: tarray 値は未定義 e≠ -1.0: シングルプロセッサ: tarray(1) にユーザー時間。tarray(2) にシステム時間 マルチプロセッサ: tarray(1) に実時間、tarray(2) に 0.0 |
戻り値 |
real |
出力 |
e= -1.0: エラー e≠ -1.0: tarray(1) と tarray(2) の合計時間 |
etime の初期呼び出しで返される結果は不正確です。初期呼び出しでは、単にシステムクロックを稼働させるだけなので、etime の初期呼び出しで返された値は使用しないでください。
例: etime()、シングルプロセッサ
demo% cat tetime.f real e, etime, t(2) e = etime(t) ! Startup etime - do not use result do i = 1, 10000 k=k+1 end do e = etime( t ) print *, 'elapsed:', e, ', user:', t(1), ', sys:', t(2) end demo% f95 tetime.f demo% a.out elapsed: 0.02 , user: 0.01 , sys: 0.01 demo% |
times(2) のマニュアルページ 、および『Fortran プログラミングガイド』も参照してください。