コンパイラの最適化のための最速でコード
-
20-09-2019 - |
質問
たいと思い選択をコンパイラの最適化を最大限に引き出したサービ願います。
以下の設定を設定します。
- 死店舗除去
- 排除に重複表現の基本ブロック機能
- を誘導ループ変数と強度の低減
- をPentium指導ケジューリング
- 拡大共通の固有機能
- ジャンプの最適化
- 利用登録変数
また、オプションを最速でコードです。', いて明らかに設定します。しかし、trueに設定し、すべて上記のオプションもセットではfalseです。
で知りたいと思いる場合は、上記のオプションの高速化に適合している。
解決
だから私は、私がtrueにそれらを設定する場合は、上記のいずれかのオプションは、アプリケーションを高速化するかどうか知りたいのですが?
私はいくつかは、このために私を憎むだろう知っているが、のここで誰もがの正直にあなたに答えることはできません。あなたはとし、それらなしであなたのプログラムを試してみて、とのプロフィールの各ビルドし、結果が何であるかを参照してください。ゲス-仕事はどこでも誰を取得することはできません。
コンパイラは、既にまたはあなたの許可なしに、トン(!)偉大な最適化の操作を行います。あなたの最善の策は、清潔で組織的問題であなたのコードを書き、保守性や拡張性を心配することです。私が言いたいのよう:コードを今、後で最適化
。他のヒント
個々の最適化までmicromanageしないでください。コンパイラの作家は非常にスマートな人々である - あなたが見ていない限り、単にそれらをすべてオンに特定がないようにする必要があります。あなたの時間は、より良いあなたのコードを最適化する(自分の関数のアルゴリズムの複雑さなどを改善する)のではなくコンパイラオプションをいじることで費やされています。
私の他のアドバイスを、別のコンパイラを使用しています。インテルは、最適化コンパイラとして大きな評価を得ています。当然のVCとGCCも素晴らしい選択肢です。
あなたが最速であるかを確認するために、異なるコンパイルオプションを使用して生成されたコードを見ることができますが、私は多くの人が経験はこれをやっていない頃は理解しています。
そのため、アプリケーションのプロファイリングすることは有用であろう。スピードが必要な明白な部分がある場合は、それが利用可能だ場合、それはutime()
を使用して、それを実行するために数千あるいは10万回と時間をいくつかのコードを追加します。ループは、断続的に実行されている他のプロセスが20秒に結果-10に影響を与えないことを十分に長く実行する必要があり人気のベンチマークの範囲です。または複数のタイミングトライアルを実行します。別のテストケースをコンパイルして、最高の作品かを確認するためにそれを実行します。
最適化オプションで遊んで1,2時間を過ごすことはすぐにほとんどがマイナーな効果を持っていることを明らかにします。しかし、同じ時間が大幅にの実行時間を改善するアルゴリズムの本質を考えると、小さな変更を加える(コードの除去が特に有効である)ことが多いをすることができます過ごした。