3

MATLAB のオプティマイザーは、MATLAB コードで一般的な部分式の削除を実行しますか? 例えば:

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

そこではどのくらいの頻度でmax(val)評価されますか? 中間値を一時変数に格納することは理にかなっていますか (計算の繰り返しはコストがかかると仮定します)、それとも MATLAB はこれを自動的に処理しますか?

4

1 に答える 1

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);
于 2012-09-06T10:56:38.760 に答える