在使用 MEX 编译后,我编写了一些 C 代码,我称之为 MATLAB。在 C 代码中,我使用以下代码测量部分计算的时间:
clock_t begin, end;
double time_elapsed;
begin = clock();
/* do stuff... */
end = clock();
time_elapsed = (double) ((double) (end - begin) / (double) CLOCKS_PER_SEC);
Elapsed time 应该是以秒为单位的执行时间。
然后我将值输出time_elapsed
到 MATLAB(它已正确导出;我检查了)。然后在 MATLAB 端我调用这个 C 函数(在我使用 MEX 编译它之后)并使用tic
and测量它的执行时间toc
。事实证明完全荒谬的是,我使用 tic 和 toc 计算的时间是 0.0011 秒(500 次运行的平均值,st.dev. 1.4e-4),而 C 代码返回的时间是 0.037 秒( 500 次运行的平均值,标准偏差 0.0016)。
在这里,人们可能会注意到两个非常奇怪的事实:
- 整个函数的执行时间低于部分代码的执行时间。因此,MATLAB 或 C 的测量非常不准确。
- 在 C 代码中测量的执行时间非常分散,并且表现出非常高的 st。偏差(变异系数为 44%,而 tic-toc 仅为 13%)。
这些计时器是怎么回事?