通过定时执行循环来测试 MatLab 中算法的速度 - 不可靠,因为首先定位的 for 循环总是更快?

Testing speed of algorithms in MatLab by timing execution for loops - not reliable because the for loop positioned first is always faster?

我试图确定在 MatLab 中执行特定任务的最佳方式,因此我创建了两个 for 循环并在每个循环之前和之后设置了 tictoc

mMax = 5000;

tic
% Approach 1
for m=1:mMax
    result_1 = ...;
end
toc


tic
% Approach 2
for m=1:mMax
    result_2 = ...;
end
toc

多次 运行 代码后,最初似乎方法 1 产生了更好的结果,并且比方法 2 快大约三倍。

然而,我随后将方法 1 循环移动到方法 2 循环之后。这次似乎方法 2 比方法 1 快几倍。

所以我猜测第一个 for 循环期间消耗的任何资源都会影响第二个循环的可用资源?

我怎样才能可靠地测试这些方法的性能,看看哪种方法最快。仅仅在它们之间创建一个暂停就足够了吗?有没有办法 'flush' MatLab 使这两种方法都有 'level playing field'?

在没有看到您的完整代码的情况下,我建议如下:为每种方法创建一个函数

类似于:

myTest.m

function myTest()
   mMax = 5000;
   tic;
   myApproachA_test(mMax);
   toc;

   tic;
   myApproachB_test(mMax);
   toc;
end

myApproachA_test.m 和 myApproachB_test.m 喜欢:

function myApproachA_test(nTrials)
   for m=1:nTrials
       result_1 = ...;
   end
end