: Optimization information engineering efficiently使1

"optimization"  "optimal"使使

使使CPU

基本

編集

計算処理には効率の異なる複数の実行方法が存在することが多い。例えば、以下のC言語コードは、1 から N までの整数の総和を計算するものである。

int sum = 0;
for (int i = 1; i <= N; i++)
  sum += i;
printf("sum: %d\n", sum);

演算でのオーバーフローが発生せず、かつ、N >= 0 ならば、これを以下のような数学的な式で書き換えることもできる。

int sum = (N * (N + 1)) / 2;
printf("sum: %d\n", sum);



N

トレードオフ

編集

使使()


その他の分野

編集






ボトルネック

編集

#

1%25%75%99%CPU綿



11使

最適化する時期

編集





1974ACMp. 56p. 30

#1974Go To Statement Considered HarmfulStructured Programming with go to Statements[1]

 Charles Cook 

調[2]



/


インタプリタ

編集

PHP使

使

 JavaScript PHP

自動最適化と手動最適化

編集

I/Ovolatile 





使調1使

使

PythonC使CD





 (optimizer) 

EiffelEsterel使


最適化に要する時間

編集

CPU使

最適化のコスト

編集

ソフトウェア開発プロジェクトでは、コード最適化は新たな機能を追加するわけでもなく、失敗すれば既存の機能を壊してしまうこともある。最適化されたコードの可読性は低いので、最適化によってプログラムの保守性が損なわれることもある。「リファクタリング」と同様に、機能が保存されていることのテストが少なくとも必要とされる。

トリビアルな覗き穴最適化などはある程度以上のコンパイラならば実装しており、プログラマが手作業でそれと同等程度の最適化を施すのはバグの元でしかなく、意味が無いだけでなく有害である。例えば x = a + b * 4 のようなコードを x = a + b << 2 のように「最適化」してしまうのが典型的な失敗例であり、こういった最適化をプログラマの良い習慣であると評価しているような組織があったらそれはある種のシグナルである。

プログラマのリソースを消費して最適化を行うのではなく他の手段に頼るほうがコストパフォーマンスが良い場合がある。例えばWebアプリケーションの場合に最適化するのではなくサーバースペックの強化で対応したり、分散可能な場合にサーバー台数の増加で対応する。メモリ断片化やメモリリークの原因特定と修正を試みるよりも定期的に再起動するなど運用方法の変更で対応する。画像や映像処理は最適化余地の少ないCPU上で動作させるコードを最適化するのではなくGPUなど特化したハードウェアを用いるなど。

分類

編集



0 50%, 25%, 12.5%, 6.25%, ... 


格言

編集

 - Ada Byron's notes on the analytical engine 1842.

 - W.A. Wulf

97%3%[3] - 

 - 

: :  - Michael A. Jackson

関連項目

編集

脚注

編集
  1. ^ 該当部分は邦訳版『文芸的プログラミング』p. 52
  2. ^ The Fallacy of Premature Optimization by Randall Hyde
  3. ^ ドナルド・クヌース: Structured Programming with Goto Statements Archived 2009年8月24日, at the Wayback Machine.. Computing Surveys 6:4 (1974), 261–301.

参考文献

編集

外部リンク

編集