MATLAB 的优化器是否对 MATLAB 代码执行公共子表达式消除?例如:
if max(val) > minVal && max(val) < maxVal
maxVal = max(val)
end
多久一次max(val)
在那里评价?将中间值存储在临时变量中是否有意义(假设重复计算的成本很高),或者 MATLAB 会自动处理这个问题吗?
很肯定,对于子表达式消除,答案是否定的,而对于存储中间值,答案是否定的。例子:
>> 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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)