我编写了一些C代码,在使用MEX编译后我将其称为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);
经过的时间应该是以秒为单位的执行时间。
然后我将值time_elapsed
输出到MATLAB(它被正确导出;我检查过)。然后MATLAB方面我调用这个C函数(在我使用MEX编译之后)并使用tic
和toc
测量其执行时间。结果是完全荒谬的是我使用tic和toc计算的时间是0.0011s(500次运行时的平均值,st.dev.1.4e-4),而C代码返回的时间是0.037s(平均500次运行,st.dev.00,616)。
这里可能会注意到两个非常奇怪的事实:
这些计时器发生了什么事?
答案 0 :(得分:6)
您将苹果与橙子进行比较。
查看Matlab的文档:
tic - http://www.mathworks.com/help/matlab/ref/tic.html
toc - http://www.mathworks.com/help/matlab/ref/toc.html
tic 和 toc 让您测量实际经过的时间。
现在查看 clock 函数http://linux.die.net/man/3/clock。
特别是
clock()函数返回程序使用的近似处理器时间。
返回的值是到目前为止使用的 CPU时间作为clock_t;至 获取使用的秒数,除以CLOCKS_PER_SEC。如果 使用的处理器时间不可用或其值不能 表示,该函数返回值(clock_t)-1。
那么什么可以解释你的差异:
那么该做什么...对于初学者来说,比较苹果和苹果!接下来,请务必考虑计时器分辨率。