一般的に(**)、実験によってパフォーマンスが向上することはありません。
あなたはそれを手に入れます
シンプルで効率的な設計を開始する方法を知っている。この部分を間違えたとしても、実験によって大きな違いは生じません。たとえば、コードジェネレーターを使用することが成功するデザインアプローチであるかどうかを判断する方法を知ってください。
a)パーセンテージベースで高価であり、b)より良いものと交換可能なアクティビティを見つけることによってソフトウェアを調整する方法を知っている。「プロファイラーを使用する」必要があることは誰もが知っていますが、それだけでは十分ではありません。
他の質問に対するこの回答を確認してください。
**例外は、グラフィックレンダリング、プロセッサパイプライン、CUDAの動作など、ハードウェアに依存する厳密なコード、またはネットワークまたはDBプロトコルの実験など、最適な使用方法を習得する必要がある場合です。
追加:大規模システムの多くのプログラマーが驚くべきことに気づくことがあります。大規模で完全に適切に構成されたプログラムでは、目に見えない大規模なパフォーマンスの問題が発生する可能性があり、プロファイラーはルーチンにローカライズされていないため、それらを見つけることができません。プログラムは非常に最適なスタイルで実行されますが、これらはプログラムの一般的な構造の一部です。
具体例を示すために、ソースコード(C ++)を使用してジョブを実行するプログラムを次に示します。これは、私が取り組んだ実際のCプログラムから抽出したものです。
意図したとおりに動作しますが、実際に必要な時間は何分の一ですか?どのくらい高速化できますか?
まあ、プログラムの最初のバージョンでは、完全に合理的で非ローカルな(プロファイラーには見えない)時間が33.3%かかっていました。それが置き換えられたとき、その時間が節約され、それがプログラムの2番目のバージョンでした。
プログラムの2番目のバージョンでは、削除できる他の何か(プロファイラーには見えない)は16.7%の時間を要していました。削除するとバージョン3になりました。
バージョン3では、13%が削除されました。残ったもののうち、66%が削除されました。その後残ったもののうち、61%が削除されました!
そして最後に、その後残ったもののうち、98%が削除されました!
それで、全体像は何ですか?元のプログラムで費やされた1000サイクルごとに、いくつが削除されましたか?998!
すべてのプログラムは異なりますが、私の経験では、すべての大規模なプログラムには、プロファイラーが見つけることができない一連の時間のかかる問題があり、手動サンプリングがあり、プログラマーが本当に最高のパフォーマンスを求めている場合は削除できます大幅な高速化のため。