gpt4 book ai didi

algorithm - 我如何在 MATLAB 中精确地描述/基准算法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:10:56 27 4
gpt4 key购买 nike

算法一次又一次地重复同样的事情。我希望在每次试验中得到相同的时间,但对于四个相同的试验我得到了非常意外的时间

enter image description here

我希望曲线是相同的,但它们的行为完全不同。原因可能在于 tic/toc 精度。

  • 我应该在 Matlab 中使用哪种分析/计时工具?
  • 我在下面的代码中做错了什么? tic/toc 分析的可靠性如何?
  • 无论如何要保证一致的结果?

算法

A=[];
for ii=1:25
tic;
timerval=tic;
AlgoCalculatesTheSameThing();
tElapsed=toc(timerval);
A=[A,tElapsed];
end

最佳答案

你应该试试 timeit .

看看这个相关问题:

How to benchmark Matlab processes?

来自 Sam Roberts answer 的片段另一个问题:

它为您处理许多与基准 MATLAB 代码相关的细微问题,例如:

  • 通过将基准代码包装在函数中确保使用 JIT 编译
  • 预热代码
  • 多次运行代码并取平均值

看看这个关于热身的问题:

Why does Matlab run faster after a script is "warmed up"?

更新:

由于 timeit 首次在文件交换中提交,源代码可用 here并且可以研究和分析(与大多数其他 MATLAB 函数相反)。来自 timeit.m 的 header :

%   TIMEIT handles automatically the usual benchmarking procedures of "warming
% up" F, figuring out how many times to repeat F in a timing loop, etc.
% TIMEIT also compensates for the estimated time-measurement overhead
% associated with tic/toc and with calling function handles. TIMEIT returns
% the median of several repeated measurements.

您可以逐步完成该功能。在我看来,这些评论非常好并且具有描述性。 Mathworks 当然有可能更改了部分代码,但整体功能是存在的。

例如,计算运行 tic/toc 所需的时间:

function t = tictocTimeExperiment
% Call tic/toc 100 times and return the average time required.

稍后从总时间中减去。

下面是关于计算次数的说明:

function t = roughEstimate(f, num_f_outputs)
% Return rough estimate of time required for one execution of
% f(). Basic warmups are done, but no fancy looping, medians,
% etc.

这个粗略估计用于确定计算应该运行多少次。

如果你想改变计算次数,你可以自己修改timeit函数,因为它是可用的。我建议您将其保存为 my_timeit 或其他名称,以免覆盖内置版本。

关于algorithm - 我如何在 MATLAB 中精确地描述/基准算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20558676/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com