MATLAB是否执行公共子表达式消除?

时间:2012-09-06 10:44:34

标签: matlab optimization

MATLAB的优化器是否在MATLAB代码上执行公共子表达式消除?例如:

if max(val) > minVal && max(val) < maxVal
    maxVal = max(val)
end

max(val)在那里评估的频率是多少?将中间值存储在临时变量中是否有意义(假设重复计算很昂贵)或MATLAB是否自动处理?

1 个答案:

答案 0 :(得分:3)

非常肯定,对于子表达式消除的答案是否定的,对于存储中间值是肯定的。例如:

>> x = rand(10000, 1);
>> tic;
for i = 1:100000
  y = max(x) + max(x);
end
toc;
Elapsed time is 4.297135 seconds.
>> tic;
for i = 1:100000
  m = max(x);
  y = m + m;
end
toc;
Elapsed time is 1.074672 seconds.

即使像+这样的内置操作似乎也没有优化;类似的测试表明

z = (x + x);
y = z + z + z;

比以下更快:

y = (x + x) + (x + x) + (x + x);
相关问题