【问题标题】:Time of execution of a code on matlabmatlab上代码的执行时间
【发布时间】: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、处理器、高速缓存、操作系统;很多因素。另外,正如我所说,clocketime 可能不如 timeit 可靠
  • @luis-mendo MinGW 4.9.2 编译器比 Microsoft Windows SDK 7.1 慢?

标签: matlab


【解决方案1】:

您可以使用

查看您的代码性能
profile on; 
myFunction(); 
profile viewer; 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2018-06-15
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多