MATLAB のオプティマイザーは、MATLAB コードで一般的な部分式の削除を実行しますか? 例えば:
if max(val) > minVal && max(val) < maxVal
maxVal = max(val)
end
そこではどのくらいの頻度でmax(val)
評価されますか? 中間値を一時変数に格納することは理にかなっていますか (計算の繰り返しはコストがかかると仮定します)、それとも MATLAB はこれを自動的に処理しますか?
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);