我編寫了一些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毫秒。 –