在运行时9.10中构建的Matlab应用程序在运行时9.7中运行速度明显较慢



我有一个在Matlab应用程序设计器中编写的应用程序,它是在Matlab 2020a(v9.10运行时环境(中构建的。不过,我必须在v9.7运行时中编译它。当我这样做的时候,它的运行速度要慢得多。从概念上讲,运行最慢的函数是:

Output = ones(length(A),length(B));
Temp = [];
for ii = 1:length(A)
for jj = 1:length(B)
Temp = [Temp; Output(ii,jj)];
end
end

上面的代码总共运行了150万到200万个周期。当我在v9.10中编译和运行时,这段代码是可以管理的,但在v9.7中速度明显减慢。我不确定这在这一点上是否可以解决,但我想给出一个更正式的理由来解释为什么这不起作用。

谢谢。

它在较新的MATLAB中工作得更快的原因是MATLAB随着每个版本的改进而改进,显然在这两个版本之间,他们设法改进了给定代码的编译方式。

代码中有两个大问题使其速度非常慢:

  1. 没有预分配,Temp随着每次循环迭代而增长。这很慢。预分配将使代码变得更快。

  2. 数组Temp通过串联增长,这是增长最慢的形式。更好的方法是Temp(end+1) = Output(ii,jj);,它以几何方式增长底层内存。请参阅此处了解详细信息。

注意,代码可以按如下方式进行平凡的矢量化:

Temp = Output.';
Temp = Temp(:);

这可能会使MATLAB的两个版本中的代码都更快。

最新更新