【发布时间】:2017-04-12 13:00:15
【问题描述】:
为了比较两个函数的执行时间,我编写了一个代码来测量每个函数和每个索引所用的时间(使用命令时钟 /etime)。但是,在我的计算机上,第一个功能比第二个更快,而在另一台计算机上,则相反。 (我尝试了几次不同的索引并每次清除数据,但结果仍然相同)。
你能解释一下为什么会有这样的差异吗?
编辑
我编辑了我的问题以显示更多详细信息。 我想比较卷积(优化代码)与 fft 的执行时间。 第一个代码是 conv2fft (我在互联网上找到它。它基于 mex 代码)。 第二个是fft的计算。这是第二个代码:
function xcorr_ab = freqxcorr(T,A)
T_size = size(T);
A_size = size(A);
outsize = A_size + T_size - 1;
% calculate correlation in frequency domain
Fa = fft2(rot90(T,2),outsize(1),outsize(2));
Fb = fft2(A,outsize(1),outsize(2));
xcorr_ab = ifft2(Fa .* Fb,'symmetric');
end
比较它们速度的代码是:
T=rand (800,1280);
j=1;
profile on;
for i=2:0.5:12
ii=i*10;
C{j}=rand(ii,ii);
conv2fft(C{j},T);
freqxcorr(C{j},T);
j=j+1;
end
profile viewer;
在第一台计算机(matlab r2017a,一台快速计算机)上,分析器显示: profiler on the first computer
在第二个(慢速计算机,matlab r2017a)上: profiler on the second computer
在第二台电脑上会比较慢是正常的,但奇怪的是两台电脑上最快的功能不一样。
我还想提一下,即使我使用 rand 矩阵进行测试,有时我也会保存数据以在相同的输入之间进行比较,但结果仍然相同。
【问题讨论】:
-
执行时间取决于很多因素:Matlab 版本、可用 RAM 量、操作系统...例如,由于 JIT 编译的变化,在最近的 Matlab 版本中循环似乎为have been made faster .另外,您应该使用
timeit函数来准确计时 -
@luis-mendo 在两台计算机上的 matlab 版本是 r2017a,我怎么知道每台计算机使用的是哪个编译器?
-
这取决于 Matlab 版本,因此该因素至少是常见的。但还有 RAM、处理器、高速缓存、操作系统;很多因素。另外,正如我所说,
clock和etime可能不如timeit可靠 -
@luis-mendo MinGW 4.9.2 编译器比 Microsoft Windows SDK 7.1 慢?
标签: matlab