1

コンパイラの最適化を選択して、可能な限り高速なアプリケーションを生成したいと考えています。

次の設定のどれを true に設定する必要がありますか?

  • デッドストアの排除
  • 基本ブロックと関数内の重複する式を排除する
  • ループ誘導変数と強度低減を有効にする
  • Pentium 命令スケジューリングを有効にする
  • 共通組み込み関数の拡張
  • ジャンプを最適化する
  • レジスタ変数を使用する

「可能な限り最速のコードを生成する」というオプションもありますが、これは明らかに true に設定しています。ただし、これを true に設定すると、上記のオプションはすべて false に設定されたままになります。

上記のオプションのいずれかを true に設定すると、アプリケーションの速度が向上するかどうかを知りたいですか?

4

3 に答える 3

4

上記のオプションのいずれかを true に設定すると、アプリケーションの速度が向上するかどうかを知りたいですか?

これで私を嫌う人もいると思いますが、ここにいる誰もあなたに正直に答えることができません. それらを使用して、または使用せずにプログラムを試し、各ビルドをプロファイリングして結果を確認する必要があります。当て推量では、誰もどこにも行きません。

コンパイラは、ユーザーの許可の有無にかかわらず、既に大量の (!) 優れた最適化を行っています。あなたの最善の策は、クリーンで整理された方法でコードを書き、保守性と拡張性について心配することです。私が言いたいのは、「今コーディングして、後で最適化する」ということです。

于 2010-01-14T05:35:51.070 に答える
1

個々の最適化まで細かく管理しないでください。コンパイラの作成者は非常に頭の良い人たちです。特に必要がない限り、すべて有効にしてください。コンパイラ オプションをいじるよりも、コードを最適化 (関数のアルゴリズムの複雑さを改善するなど) することで、時間を節約できます。

私の他のアドバイスは、別のコンパイラを使用することです。Intel は、最適化コンパイラとして高い評価を得ています。もちろん、VC と GCC も優れた選択肢です。

于 2010-01-14T07:23:32.710 に答える
0

さまざまなコンパイル済みオプションを使用して生成されたコードを調べて、どれが最速かを確認できますが、最近では多くの人がこれを行った経験がないことを理解しています.

したがって、アプリケーションをプロファイリングすると便利です。明らかに速度が必要な部分がある場合は、コードを追加して 1,000 万回または 1,000 万回実行し、utime()可能な場合はそれを使用します。断続的に実行される他のプロセスが結果に影響を与えないように、ループは十分長く実行する必要があります。一般的なベンチマーク範囲は 10 秒から 20 秒です。または、複数のタイミング トライアルを実行します。さまざまなテスト ケースをコンパイルして実行し、何が最適かを確認します。

最適化オプションを 1 ~ 2 時間試してみると、ほとんどの場合、ほとんど効果がないことがすぐにわかります。ただし、アルゴリズムの本質について考え、小さな変更を加えるのに同じ時間を費やす (コードの削除は特に効果的です) と、多くの場合、実行時間が大幅に改善されます。

于 2010-01-14T06:17:02.543 に答える