MEXを使用してコンパイルした後、私はMATLABという形式のCコードを書きました。 Cコードの中に、私は次のコードを使用して計算の一部の時間を測定:MATLABのtic-tocとCのクロックの不一致
clock_t begin, end;
double time_elapsed;
begin = clock();
/* do stuff... */
end = clock();
time_elapsed = (double) ((double) (end - begin)/(double) CLOCKS_PER_SEC);
経過時間が秒単位の実行時間でなければなりません。
次に、値time_elapsed
をMATLABに出力します(適切にエクスポートされていますが、チェックしました)。それから、MATLAB側では、このC関数を(MEXを使用してコンパイルした後に)呼び、tic
とtoc
を使用して実行時間を測定します。完全に不合理であることが判明したのは、ticとtocを使って計算した時間が0.0011s(500回の実行では平均、st。dev。1.4e-4)、Cコードから返される時間は0.037秒平均500回、st。dev。0.0016)。
は、ここに1つ、2つの非常に奇妙な事実に気づくことがあります。
- を関数全体の実行時間は、コードの一部の実行時間よりも低くなっています。したがって、MATLABまたはCのいずれかの測定値は非常に不正確です。
- Cコードで測定された実行時間は非常にばらつきがあり、非常に高いstを示します。偏差(変動係数44%、tic-tocのわずか13%)。
これらのタイマーでは何が起こっていますか?
時計の解像度はどのくらいですか? 'begin = clock();'がクロックティックの直前または直後に実行されるかどうかをどのように知ることができますか?それが結果に影響しますか?多分。 –
@BoPerssonだから、 'clock()'がたぶんチックに間違っているかもしれないということですか? –
1つのティックが結果に影響を及ぼすほど大きくなることがあります。 18 msのように。 –