我编写了一些C代码,我使用MEX编译后称之为MATLAB。内的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.037s(平均500次运行,st。dev。0.0016)。
在这里,人们可以发现两个很奇怪的事实:
- 的执行时间整体功能比执行时间码的一部分低。因此,无论是MATLAB还是C的测量都非常不准确。
- 在C代码中测量的执行时间非常分散,并且表现出非常高的st。偏差(变异系数为44%,而tic-toc仅为13%)。
这些计时器是怎么回事?
什么是时钟的分辨率是多少?我们如何知道'begin = clock();'是在时钟周期之前还是之后执行?这会影响结果吗?大概。 –
@BoPersson所以,你的意思是'时钟()'可以在最想念蜱? –
我的意思是说一个勾号可能会大到影响结果。像18毫秒。 –