GNU/Linux >> Linux の 問題 >  >> Linux

-O3 最適化を使用した GNU/Linux のコンパイル

-O3 いくつかの欠点があります:

<オール>
  • まず第一に、-O2 よりも遅いコードを生成することがよくあります または -Os .場合によっては、ループ展開により長いコードが生成されますが、実際にはコードのキャッシュ パフォーマンスが低下するため遅くなる場合があります。
  • よく言われるように、時々間違ったコードを生成します。最適化のエラーまたはコードのエラー (厳密なエイリアシングを無視するなど) が原因である可能性があります。カーネル コードは「スマート」である場合もあれば、「スマート」である必要がある場合もあるため、一部のカーネル開発者が何らかのエラーを犯した可能性があると言えます。その時点で安定していたgcc 4.5でカーネルをコンパイルしたときに、ユーザー空間ユーティリティのクラッシュなど、さまざまな奇妙な問題が発生しました。カーネルには gcc 4.4 を使用し、さまざまなバグのため、いくつかの選択したユーザー空間ユーティリティを使用しています。同じことが -O3 にも当てはまります .
  • Linux カーネルに大きなメリットがあるとは思えません。カーネルは重い計算を行わず、行う場所ではアセンブリで最適化されます。 -O3 フラグはしません コンテキスト切り替えのコストまたは I/O の速度を変更します。全体的なパフォーマンスの <0.1% の高速化などに値するものはないと思います。

  • Gentoo で使用されていますが、特に異常はありませんでした。


    最適化レベルを変更すると、ツールチェーン (特に glibc) の大きなチャンクが完全にコンパイルされないことに注意してください。ビルド システムは、ほとんどの健全なディストリビューションで、これらのセクションの -O 設定を無視するようにセットアップされています。

    簡単に言えば、特定の基本的なライブラリと OS の機能は、コードが実際に実行するコードに依存しており、多くの場合、何が高速になるかではありません。特に -fgcse-after-reload (-O3 で有効化) は奇妙な問題を引き起こす可能性があります。


    Linux
    1. Linuxのwhoamiコマンドを例で説明

    2. Linux –カスタムLinuxカーネルの構成、コンパイル、およびインストール?

    3. LinuxでC++ IDEに苦労しています

    1. Linux カーネルモジュールのコーディング方法は?

    2. 再起動せずにカーネルを更新

    3. QEMU を使用した Linux カーネルのデバッグ

    1. Linuxカーネルをftraceで分析する

    2. LinuxでGNUPartedを使用してドライブをパーティション分割する

    3. カーネルソースコードから最小限のブート可能な Linux (ターミナルのみ) を作成するには?