Lullar    


ビデオジャパンは、最大でランク。

最適化 (情報工学) Optimization (computer science)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 Source: material may be challenged Wikipedia encyclopedia (Wikipedia) 』

情報工学における最適化 : Optimization )は、 システムを何らかの観点でより効率的に動作するよう変更することをいう。 Optimization in Information Technology (UK: Optimization) is a means to work to change some aspect of the system more efficient. 例えば、 プログラムの最適化は、高速化のためだったり、 メモリの使用量を削減するためだったり、電力消費を抑えるためだったりする。 For example, optimization of the program is, my speed for, my order to reduce memory usage, or even to reduce power consumption. 最適化の対象となるシステムは、1つのプログラムの場合もあるし、複数のコンピュータの場合もあるし、 インターネットのようなネットワーク全体の場合もある。 System to be optimized, and sometimes one of the programs in one, and sometimes the computers are located even if the entire network like the Internet.

"optimization" という単語の語源は "optimal"(最適な、最善な)と同じだが、最適化によって真に最適なシステムとなることは稀である。 "optimization" etymology of the word "optimal" (best of the best), but the same can be true by the best system optimization is rare. 最適化されたシステムは一般にある面でのみ最適となる。 Optimized system is only the best will in general terms. プログラムの実行時間を削減するためにメモリ使用量を増やしてでも実行時間を最適化したり、逆にメモリが少ないシステムで実行時間が長くなることを覚悟してメモリ使用量が少ないアルゴリズムを選んだりする。 Or optimize the execution time can increase the amount of memory used to reduce the execution time of programs, algorithms to select or use a small amount of memory to be prepared for a long time to run on systems with less memory reverse . あらゆる場合に最適な方法や設計は存在しないので、 技術者は最も重要と思われる観点での最適化のために妥協点を探る。 And design the best way because it does not exist in every case, the technology is to seek a compromise in terms of optimization is probably the most important. さらに、ソフトウェアを完全に最適にする(それ以上どうやっても最適化できない状態にする)のに要する労力は、その最適化されたシステムを利用することで得られる利益よりも大きい。 In addition, the software that best complete (even if not optimized to state how more) effort required is greater than the benefit obtained by use of an optimized system. 従って、最適化の工程は完全な最適解に到達する以前に終了させられるのが普通である。 Therefore, the optimization process are typically able to be terminated before reaching the optimal solution to the full. 幸いなことに、効果の大きい改善は最適化工程の初期に現れることが多い。 Fortunately, the effect is often greater improvement appears early in the optimization process.

最適化は様々なレベルで行われる。 Optimization is done at various levels. 最も高いレベルの最適化は設計段階に行われる。 Highest level of optimization is done in the design phase. 設計が最適化されていれば、実装でも効率的なアルゴリズムを利用でき、品質のよいコードになるという利点がある。 If the design is optimized, efficient algorithms can be used in the implementation code will have the benefit of good quality. コンパイラ最適化を使えば、 実行ファイルがさらに最適化される。 Using an optimized compiler, will be of even more optimized executable. 最も低いレベルでは、 コンパイラを使わずに人間がアセンブリ言語で最適なコードを書く。 Lower level best is to write the best code in a language humans assembly without the compiler. コンパイラ最適化の技術の進歩と最近のCPUの複雑さのため、コンパイラよりも最適なコードを人間が書くには大変な技能を要する。 Recent advances in compiler optimization and CPU because of the complexity of human beings to write optimal code than the compiler will take great skill. そのため、このような最適化を行うプロジェクトは滅多にない。 Therefore, optimizing these projects rarely. 最適化は例外的なケースを考慮しつつ、複雑な妥協点を探ることが多い。 Optimized taking into account the exceptional cases often seek complex compromise. 従って最適化されたプログラムはプログラマが理解できないほど難解になることも多い。 Optimized programs often become so difficult as the programmer does not understand. このような最適化されたプログラムはバグを多く含む可能性が高い。 Optimized program like this is likely to contain many bugs.

目次 Contents

[ 編集 ] 基本 Basics

計算処理には効率の異なる複数の実行方法が存在することが多い。 The calculation process is that there are many different ways to run efficiently. 例えば、以下のC言語コードは、1 から N までの整数の総和を計算するものである。 For example, the following C code of the language, the one from which to calculate the sum of N inclusive.

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

演算でのオーバーフローが発生しないなら、これを以下のような数学的な式で書き換えることもできる。 If overflow does not occur in the operation, can be rewritten in the following mathematical expression this.

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

最適化(特に自動的に行われる最適化)は、機能的に等価でより効率的な方法を選択することに他ならない。 Optimization (optimization is done automatically in particular) is no different from choosing a more efficient way to functionally equivalent. しかし、効果の大きい性能改善は無駄な機能を省いて実際の問題に集中することで実現されることも多い。 However, the effect is often greater performance improvement will be achieved by concentrating on real issues with a minimum of unnecessary features.

最適化は必ずしも自明で直観的なものとは限らない。 Optimized and not always obvious and intuitive. 上の例で「最適化」されたバージョンは N が小さければオリジナルよりも性能が悪い可能性がある。 In the example above "optimized" version of the N-poor performance may be less than the original. これは、そのコンピュータでの加算とループの性能と乗除算の性能の関係に依存する。 It depends on the relationship between multiplication and division performance and performance loops in addition to that computer.

[ 編集 ] トレードオフ Trade-offs

最適化は一般に性能の様々な観点(実行時間、メモリ使用量、ディスク使用量、帯域幅、電力消費など)の一部だけを改善する。 Optimization point of view we like the performance in general (running time, memory usage, disk usage, bandwidth, power, etc.) to improve only some. そこには何らかのトレードオフがあり、ある観点を犠牲にして別の観点を最適化することになる。 Where there is a trade-off some will be to optimize the expense of another point of view there is. 例えば、 キャッシュを大きくすれば実行時の性能は改善されるが、キャッシュも含めたメモリ消費は増大する。 For example, the performance during the run would be greatly improved caching, including cache memory consumption is increased. その他の典型的なトレードオフとしては、コードの読みやすさとコンパクトさなどがある。 Other as a typical trade-off, and the code readability and compactness.

プログラマが最適化を行う際に、一部の処理を最適化するには他の処理の効率を悪くしなければならないという決断をせまられることがある。 When optimizing the programmer to optimize the processing of some decisions that may be Semara must reduce the efficiency of other processes. このようなトレードオフは技術的でない理由で必要となることが多い。 Such tradeoffs are often required by non-technical reasons. 例えば、競合他社が発表したベンチマーク結果に勝つため、通常のソフトウェアの効率が悪くなるとしてもベンチマークをより効率的に実行する最適化を施すといった場合である。 For example, the results to win benchmark its competitors, and if you give the optimization and more efficient to run the benchmark software become less efficient as usual.

[ 編集 ] その他の分野 Other areas

オペレーションズ・リサーチでは、関数の値を最小または最大にする入力値を決定する問題を最適化と呼ぶ。 In operations research is called optimization problems and to determine the minimum or maximum input value to the value of the function. 複数の入力の間に制約が課せられるものもあり、そのような問題を制約つき最適化と呼ぶ。 There are also constraints imposed between multiple input, constrained optimization problem known as such.

プログラミングでは、より効率的なソフトウェアを生成するため、 アーキテクチャに合わせたコンパイラの設定をしたり、そのアーキテクチャにあわせたコード修正を施すことを最適化と呼ぶこともある。 Programming the software to generate a more efficient, or the compiler settings according to the architecture, sometimes referred to introduce modifications to optimize the code according to its architecture.

典型的な問題は様々な解法があり、プログラミングでは「十分によい」解だけを考慮する。 Typical problem solving in a variety of programming, is "good enough" to consider only solutions.

[ 編集 ] ボトルネック bottleneck

最適化ではボトルネックを見つける必要がある。 The optimization you need to find the bottlenecks. ボトルネックとは、リソースを最も多く消費している重要なコード部分である。 Bottleneck is a critical piece of code that are consuming the most resources. 経験則として、20%のコードが80%のリソース(CPU時間、メモリ)を消費すると言われる( パレートの法則 )。 A rule of thumb, 20% of the code for 80% of resources (CPU time, memory) is said to consume the (rate law Padres).

パレートの法則は様々な現象を指しており、結果の80%が原因の20%から生じることを示している。 Pareto's Law refers to various phenomena and, because 80 percent of the results shows that 20% of that resulting from. これは経験則として様々な場面で応用されるが、その多くは誤用である。 This is like a rule of thumb is to be applied in different situations, much of it is misused. 例えば、ある解決策が80%のケースで適用可能であることを指して、その解決策がパレートの法則に適合しているというのは誤用である。 For example, a solution in 80% of the points that can be applied in cases, that they conform to the law of Pareto solutions that are misused. 情報工学ではパレートの法則は、リソースの80%が一般に20%の処理で消費されるという観測結果から、最適化に適用される。 Engineering information is Pareto, the resource is 20% from 80% to the general observation that is consumed in the process of optimization is applied. ソフトウェア工学では、90%の実行時間が10%のコードで消費されると言った方が観測結果に近い。 In software engineering, 90 percent of execution time of observation close to 10 percent is consumed in much better code.

ボトルネックとなっている処理が非常に単純でそれ以上最適化しようがない場合もある。 So sometimes there is no further optimization process is very simple and has been a bottleneck. その場合、その処理がボトルネックとなった要因を探る必要がある。 In that case, you must explore the factors that process was a bottleneck. 例えば、アーキテクチャ段階での設計に問題がある場合もある。 For example, sometimes there are problems in the design of the architecture phase.

アーキテクチャに関わる設計はシステムの性能をほとんど決定づける。 Most involved in the design determines the performance of the system architecture. アルゴリズムの選択は設計の中でも最も効率に影響が大きい。 The choice of algorithm is the most significant impact on efficiency in design. 複雑なアルゴリズムやデータ構造は多量の処理には適しているが、単純なアルゴリズムは少量のデータ処理により適している。 Complex algorithms and data structures to handle the large amounts that are suitable for a simple algorithm is better for small amounts of data processing. 複雑なアルゴリズムでは設定や初期化に時間がかかり、データが少量の場合に効果が薄れるためである。 The algorithm is time consuming and complex configuration and initialization, because the effect wears off if a small amount of data.

場合によっては、メモリを追加することでプログラムが高速化されることがある。 In some cases, may be accelerated by adding more memory the program. 例えば、 フィルタは入力を1行ずつ読み込んで、結果を即座に出力する。 For example, the filter input is read one line at a time, to print the results immediately. この場合、1行を読み込むだけのメモリがあれば十分だが、そのような方式での性能は一般にあまりよくない。 In this case, but only enough memory to load the line, the performance of such a method is generally not very good. ファイルを一括して読み込めば性能が劇的に改善されるが、メモリをより多く消費することになる。 The performance will improve dramatically if the bulk 読Mi込Me file would consume more memory. 計算結果をキャッシングするのも効果的だが、同様にメモリ使用量が増大する。 But also effectively caching the results, as well as increased memory usage.

[ 編集 ] 最適化する時期 to optimize timing

最適化ではコードの可読性を損ない、性能向上にしか寄与しないコードを追加することがある。 The optimization of undermining the readability of the code may not contribute only to add the code to improve performance. これはプログラムやシステムを複雑にし、保守やデバッグがしにくくなる。 This is a complex program or system will be difficult to maintain and debug. そのため、最適化や性能チューニングはソフトウェア開発工程の最後のほうで行われることが多い。 Therefore, the tuning performance optimization and many more can be done at the end of the software development process.

ドナルド・クヌースアントニー・ホーアの言葉を以下のように言い換えて記した[1] Donald Knuth is noted that translate into words as follows: Antony Hoare [1].

  • 「小さな効率のことは忘れ、時間の97%について語ろう。時期尚早な最適化は諸悪の根源だ」( Code Complete 、Page 594) "Forget that little efficiency, talk about 97 percent of the time. Premature optimization is the root of all evil" (Code Complete, Page 594)

これについて Charles Cook は次のように述べている。 Charles Cook said about this as follows.

  • 「賛成だ。コードのボトルネックがどこなのかが判明する前に細かい最適化に時間を費やすのは無駄だ。しかし逆にシステムレベルのソフトウェアを設計するときは、性能問題を常に念頭に置くべきだ。よいソフトウェア開発者はこれを自動的に行っており、どこの性能が問題となるかを感覚的に感じ取ることができる。経験の浅い開発者は、後の工程でのちょっとした微調整で問題が全て解決するという間違った信念を持っていることがある」 [2] "I agree.'s Fine to spend the time to optimize what is found before the bottleneck where the code is useless. When you design a system-level software Conversely, however, always keep in mind the performance issues it. software developers are going to do this automatically, you can feel a sense of how and where performance problems. inexperienced developers, the problem with a few minor tweaks in the process after There is something wrong with the belief that all resolved "[2]

「時期尚早な最適化」という言葉は、プログラマが個々のコードの設計時に性能への考慮をすることを指している。 "Premature optimization" word, which refers to individual programmers that we consider to be the design-time code performance. そのような小手先の最適化を最初から行っていると、コードが複雑化してその機能の本質を見誤り、コードが汚くなったり、バグを作りこんだりする。 And have to go through the superficial optimization such mistakes and look at the complicated nature of the function code or the code is dirty, while other bugs making IPSJ.

よい手法とは、設計をまず行い、その設計からコードを書き、プロファイル/ベンチマークを実施して最適化すべき箇所を特定することである。 With good technique, we first design, coding design, the profile / is to determine where to conduct the benchmark to be optimized. 単純で簡潔な設計であれば、この手法での最適化が容易であり、プロファイリングによって予想外の性能問題(時期尚早な最適化では思いもよらなかった問題)が明らかとなることもある。 If you design a simple and concise, and easy optimization of this technique, unexpected performance problems by profiling (premature optimization is an unexpectedly large problem) and they can be found.

実際には、ソフトウェアの設計の初期段階から性能目標を念頭に置く必要があるが、プログラマは設計目標と最適化のバランスを保つ(最適化での伸びしろを考慮してコードを書くときの時期尚早な最適化を控える)。 In fact, the need to keep in mind the goal early in the design performance of software programmers to optimize and maintain the balance of the design goals (time and consideration when writing the code to see a 伸Bishi of optimization refrain from premature optimization).

[ 編集 ] インタプリタ interpreter

インタプリタ言語(特にPHPJavaScriptのように繰り返し実行され、性能も要求される場合)では、プログラマはコードからコメントや空白を削除し、使われないメソッドや関数の定義を削除してから、コードを配備することがある。 Language interpreter (in particular PHP and JavaScript is executed repeatedly, as may be required for the performance), programmers can remove comments and whitespace from the code, then remove from the definition of a method or function is not used, the code may be deployed. これはネットワーク上の転送時間やインタプリタがコードを読み込む時間を少しでも改善しようという一種の最適化である。 This is a kind of optimization to improve even a little time to load the code on the network transfer time and interpreter.

このとき、元のコード(コメント付きの整ったコード)を捨ててしまうと、保守性が犠牲となる。 In this case, the original code (with well-code comments) and they dumped the victim and maintainability. そのようなコードは可読性が低く、 デバッグや修正や改造が困難となる。 Such code less readable, and difficult to modify and debug and modify. 従って、元のコードを手元に残しておくことが推奨され、修正を加える必要がある場合は、その元のコードを使うのがよい。 Therefore, it is recommended that you keep the original code, if you need to make the fix, good to use their original code.

また、コメントや空白を削除することが実行時間の短縮に寄与するかどうかは事前に確かめておく必要がある。 Also, whether or not to contribute to the reduction of execution time or space to remove a comment you need to check in advance. 場合によっては「労多くして、益少なし」となることもある。 In some cases "in labor, profit 少Nashi" It can be. 一般にソースコードをネットワーク上で転送するJavaScriptなどのコードの方が、ローカルに実行されるPHPなどよりも効果が大きい。 Transfer the source code on the network in general JavaScript code, such as those that are locally run PHP and effective than large.

[ 編集 ] マクロ Macro

マクロを使ったコード開発での最適化は言語によって異なる。 Optimization of the code development by using a different macro language. C言語などの高級言語では、マクロは文字列の置換であり、マクロの効果は関数呼び出しのオーバーヘッドを削減する程度でしかない。 The high-level languages such as C language, is a string replacement macro, the macro effect is not only about reducing the overhead of function calls.

しかし、多くの関数型言語でのマクロはコンパイル時の評価と文字列レベルでないコンパイルコードの置換として実装されている。 However, the macro language of many types of functions are implemented as compiled code replace the string level is not a compile-time evaluation. このため、コンパイル時に複雑な計算が可能で、プログラムの処理の一部をコンパイル時に済ませてしまうこともできる。 Therefore, the complex can be calculated at compile time, they can also be done during the process of compiling the program. このようなマクロはLISPを起源とするものである。 These macro LISP origin of those.

しかし、他の最適化と同様、このようなツールをどこに利用するのが効果的かをプロジェクトが完了する前に予測することは困難である。 However, like other optimization can be predicted before the project is completed or where to use effectively these tools is difficult.

[ 編集 ] 自動最適化と手動最適化 automatic optimization and manual optimization

最適化はコンパイラで自動的に行うこともできるし、プログラマが自ら行うこともできる。 Optimization and can also be done automatically by the compiler, the programmer can make their own. 局所的な最適化の効果は限定的であり、大域的な最適化の方が効果が大きい。 Effect of local optimization is limited, benefited more from greater global optimization. 一般に、より優れたアルゴリズムを見出すことが最も強力な最適化となる。 In general, optimization and the most powerful to find a better algorithm.

システム全体の最適化は自動化するには複雑すぎるため、人間の手で行うことが多い。 Optimization of the entire system is too complex to automate, often done by human hands. その場合、プログラマやシステム管理者が自らコードを修正し、性能を改善する。 In that case, fix the code themselves programmers and system administrators, to improve performance. 効率が改善されるとしても、自動最適化に比べれば遥かにコストを要する作業である。 Efficiency is improved as is far more costly process compared to the automatic optimization.

第一にリソースを最も多く消費している箇所(ボトルネック)を見つけるため、 プロファイラを利用することが何よりも重要である。 Areas that are consuming the most resources to the first (bottlenecks) to find, is important from what is the use of the profiler. プログラマはボトルネックがどこか正確に把握していると思っているものだが、そのような予測は間違っていることが多々ある。 Is a programmer, but I know exactly where the bottlenecks, predict that many such people have been wrong. 重要でないコードの最適化は全体性能に与える効果が少ない。 Code optimization is not less important effect on overall performance.

ボトルネックを特定したら、まずそのプログラムで使われているアルゴリズムを再考するところから最適化が始まる。 Once you have identified the bottleneck, from where it begins to reconsider the optimization algorithm is used in that program first. 通常、汎用的アルゴリズムよりも特定の問題に特化したアルゴリズムの方が調整しやすい。 Typically, those algorithms are easy to adjust focusing on specific issues than the generic algorithms. 例えば、大きなリストをソートする処理では、効率のよい汎用アルゴリズムの1つであるクイックソートを使うのが一般的である。 For example, in the process of sorting a large list of general and efficient algorithm is one common use is one of the quick sort. しかし、ソート対象の性質が判っていれば(例えば事前に何らかの順番で並んでいるなど)、その他のアルゴリズムや特製のソートルーチンの方が有効な場合もある。 However, if the nature of being sorted nuances (such as some kind of order that was placed in advance, for example), some work better if you sort of special algorithms or other routines.

最善のアルゴリズムが選択されていると判明した場合、コードの最適化が開始される。 If it turns out that the best algorithm is selected, code optimization is started. ループ展開をしたり、なるべく小さいデータ型を使うようにしたり(浮動小数点でなくてもよい計算を整数の計算に直すなど)する。 Deployment or loop, or to use a type less data as possible (such as re-calculation of the integral floating-point calculations may not) be.

性能ボトルネックがアルゴリズムの問題やデータ構造の問題ではなく、言語の制限による場合もある。 Not a question of data structure and algorithm performance bottleneck issues, sometimes due to language restrictions. このため、プログラムの重要な部分を異なるプログラミング言語で書き換え、よりマシンに近いアクセスを行う場合がある。 Therefore, different programming languages to rewrite an important part of the program, there are close to the machine when accessing from. 例えば、 Pythonなどの高級言語C言語のモジュールを使用して高速化したりする。 For example, Python in the language of luxury such as a C or a module using a faster language. C言語で書かれたプログラムなら、一部をアセンブリ言語で置換する。 If a program written in C language, to replace the language of the assembly. D言語などはインラインアセンブラ機能が利用できる。 D language and can use assembler functions inline.

パレートの法則によれば、書き換えはプログラムのごく一部だけで済む。 According to the law of Pareto, requires only a small fraction of rewriting the program. 従って、最適化にかかるコストと全体の性能向上が十分見合う結果となる。 Therefore, the result will be well worth the cost and improve overall performance optimization.

手動の最適化は可読性を損なうことが多い。 Manual optimization is often impair readability. 最適化にあたっては、その文書化と将来の開発への影響の評価が重要である。 Getting optimization, it is important to evaluate the impact of future development and its documentation.

自動最適化を行うプログラムをオプティマイザ (optimizer) と呼ぶ。 Optimizer do automatic optimization program (optimizer) is called. オプティマイザはコンパイラに内蔵されていることが多く、コンパイル中に最適化が行われる。 The optimizer often has a built-in compiler optimization is done during compilation. オプティマイザは生成されたコードを特定のプロセッサ向けに最適化することが多い。 Optimizer is often optimized for specific processor generated code. 従って自動最適化はコンパイラ最適化とほぼ同義である。 Automatic optimization therefore is synonymous with the most optimized compiler.

一部の高級言語( EiffelEsterel )は中間言語を使ってプログラムを最適化する。 Some high-level languages (Eiffel and Esterel) will be of best use the intermediate language program.

グリッド・コンピューティング分散コンピューティングでは、稼働率の高いコンピュータから別の稼働率の低いコンピュータにタスクを移すことでシステム全体の最適化を行う。 Computing and distributed computing grid, optimizing the entire system by transferring the task to another computer from a computer underutilized high occupancy rate.

[ 編集 ] 最適化に要する時間 to optimize time

状況によっては、最適化にかかる時間が問題となることもある。 In some situations, sometimes it takes time for optimization problems.

ソフトウェア開発プロジェクトでは、コード最適化は新たな機能を追加するわけでもなく、失敗すれば既存の機能を壊してしまうこともある。 Software development project, code optimization is not without adding new features, and sometimes destroy the existing features would fail. 最適化されたコードの可読性は低いので、最適化によってプログラムの保守性が損なわれることもある。 Readability of the code is optimized so low, there may also be compromised by optimizing maintenance programs. つまり、最適化にかかるコストとそこから得られる利益を見極めることが重要である。 In other words, it is important to assess the costs and benefits of optimizing it.

オプティマイザによっても最適化が行われる。 The optimization is also performed by the optimizer. コンパイラで最適化を行うと(最適化しない場合より)時間がかかる。 And optimizing compiler (optimization than not) time. これが問題となるのは一般にプログラムが非常に大きい場合だけである。 The problem is only when this program is generally very large. ジャストインタイムコンパイル方式では、オプティマイザの性能が実行時間の向上の鍵となる。 Jasutointaimukonpairu method is the key to improving the performance of the optimizer execution time. オプティマイザが時間をかければかけるほど生成されるコードはよくなるが、それはつまり貴重なCPU時間をオプティマイザが使用するということを意味する。 Code generated by the optimizer about someone giving you time to get better, but it is a valuable means that the CPU time used by the optimizer. 従って、特にジャストインタイムコンパイル方式では、オプティマイザにかかる時間とそれによって生成コードの性能が改善されて節約される時間のトレードオフが重要となる。 Therefore, the method Jasutointaimukonpairu particular, it is important to save time trade-offs that improve the performance of the code is generated by the optimizer and its time.

[ 編集 ] 分類 Classification

コード最適化は、プラットフォーム依存の最適化とプラットフォームに依存しない最適化に分けられる。 Code optimization is divided into optimized platform-independent and platform-dependent optimization. プラットフォームに依存しない最適化技法は多くのコンピュータで有効な技法である(ループ展開、関数呼び出し回数削減、メモリの効率的使用、条件分岐の整理など)。 Platform-independent optimization techniques are effective in many computer techniques (loop unrolling, reduced number of function calls, more efficient use of memory, such as conditional branching arrangement). プラットフォーム依存の技法は、 命令レベルの並列性に関するもの、データレベルの並列性に関するもの、キャッシュ最適化技法など、プラットフォームによってパラメータが異なる技法である。 Platform-dependent technique, with those for instruction-level parallelism, what about the data-level parallelism and cache optimization techniques, the technique parameters differ between platforms.

[ 編集 ] 引用 Quotes

  • 「個々の操作を特定の順に実行させることは非常に興味深く奇妙な問題である。その上で全てを入力する余裕はない。どのような計算でもプロセスの遷移のための多種多様な配置が可能であり、様々な考慮の上でそれを選択しなければならない。基本的な目的は計算を完了するまでの時間を最小にする配置を選択することである」 - Ada Byron 's notes on the analytical engine 1842. "Now we can run a specific order of operations is very interesting and strange problem. Afford to enter a not on it all. The arrangement allows for a wide variety of transition process in any calculation Yes, you have to choose a variety of considerations on it. The basic objective is to choose a place to minimize the time it takes to complete the calculations "- Ada Byron 's Notes on the Analytical Engine 1842.
  • 「情報処理における罪の多くは(必ずしも達成されることのない)効率の名においてなされる。そこには盲目の愚かさも含まれる」 - WA Wulf "A lot of crime in the information processing (to be achieved without necessarily) be made in the name of efficiency. There is also a blind stupidity" - WA Wulf
  • 「細かい効率のことは忘れて、時間の97%について考えよう。時期尚早な最適化は諸悪の根源だ。それでも残り3%についても機会を逃すべきではない」 [3] - ドナルド・クヌースアントニー・ホーアの言葉の言い換え) "The detail is forgotten efficiency, consider about 97 percent of the time. Premature optimization is the root of all evil. 3% in the rest still do not miss the opportunity for" [3] - Donald Knuth (Antony , paraphrasing the words of Hoare)
  • 「ボトルネックは思いもよらない場所に存在するので、ボトルネックの箇所を特定するまで性能最適化(ハック)してはいけない」 - ロブ・パイク "Where bottlenecks exist, so unthinkable, until you optimize a particular performance bottleneck (hack) and should not" - Rob Pike
  • 「プログラム最適化の第一法則: 最適化するな。プログラム最適化の第二法則(上級者限定): まだするな。」 - Michael A. Jackson "The first rule of program optimization: The optimization.'s Second law optimization program (Advanced Edition): Do not yet." - Michael A. Jackson

[ 編集 ] 関連項目 See also

[ 編集 ] 脚注 Footnote

  1. ^多数引用されている。 ^ Has been quoted numerous. 例えば、 http://www.acm.org/ubiquity/views/v7i24_fallacy.html For example, Http://Www.acm.org/Ubiquity/Views/V7I24_Fallacy.html
  2. ^ The Fallacy of Premature Optimization by Randall Hyde ^ The Fallacy of Premature Optimization by Randall Hyde
  3. ^ ドナルド・クヌース : Structured Programming with Goto Statements . Computing Surveys 6 :4 (1974), 261301. ^ Donald Knuth: Structured Programming with Goto Statements. Computing Surveys 6: 4 (1974), 261-301.

[ 編集 ] 参考文献 References

[ 編集 ] 外部リンク External links


ビデオジャパンは、最大でランク。




© Lullar