MEX を使用してコンパイルした後、MATLAB から呼び出すいくつかの C コードを作成しました。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.0011 秒 (500 回の実行で平均、st. dev. 1.4e-4) であるのに対し、C コードによって返される時間は 0.037 秒 ( 500 回の実行の平均、st. dev. 0.0016)。
ここで、2 つの非常に奇妙な事実に気付くかもしれません。
- 関数全体の実行時間は、コードの一部の実行時間よりも短くなります。したがって、MATLAB または C の測定値は非常に不正確です。
- C コードで測定された実行時間は非常にばらつきがあり、非常に高い st を示しています。偏差 (変動係数 44%、tic-toc のわずか 13% と比較)。
これらのタイマーで何が起こっていますか?