通过定时执行循环来测试 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 循环并在每个循环之前和之后设置了 tic
和 toc
:
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
我试图确定在 MatLab 中执行特定任务的最佳方式,因此我创建了两个 for 循环并在每个循环之前和之后设置了 tic
和 toc
:
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