我编写了一些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);
Run Code Online (Sandbox Code Playgroud)
经过的时间应该是以秒为单位的执行时间.
然后我将值输出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).
人们可能会注意到两个非常奇怪的事实:
这些计时器发生了什么事?
你将苹果与橙子进行比较.
看看Matlab的文档:
tic - http://www.mathworks.com/help/matlab/ref/tic.html
toc - http://www.mathworks.com/help/matlab/ref/toc.html
tic和toc让你测量实际经过的时间.
现在看看时钟功能http://linux.die.net/man/3/clock.
特别是,
clock()函数返回程序使用的处理器时间的近似值.
返回的值是到目前为止使用的CPU时间.获取使用的秒数,除以CLOCKS_PER_SEC.如果使用的处理器时间不可用或无法表示其值,则函数返回值(clock_t)-1.
那么什么可以解释你的差异:
那么该做什么...对于初学者来说,比较苹果和苹果!接下来,请务必考虑计时器分辨率.