例としてGentooを使用したGCCコンパイルの最適化
ビルドの最適化はGentooの中心的な魅力の1つですが、上記のすべてはソースからソフトウェアをコンパイルする場合に適用されます。 Gentooのすべてのビルドパラメータは
make.confファイルで設定されます。
実際、
CFLAGS
変数にのみ関心があります。
CXXFLAGS
は
CXXFLAGS="${CFLAGS}"
に等しく、
CXXFLAGS="${CFLAGS}"
は並行して実行されているコンパイルプロセスの数のみを示します(通常、プロセッサコアの総数は+ 1です)。
デフォルト値は
"-O2 -pipe"
です。
-O
は、使用される最適化のレベルを示し
-O
。 2番目のレベルは最も安全であると見なされ、3番目のレベルでは作業の不安定さがしばしば現れます。
-pipe
パラメーターは、異なるコンパイル段階間でデータを交換するために、一時ファイルの代わりにメモリ内のパイプを使用するようにgccに指示します。 デフォルト値では、バイナリは汎用アーキテクチャで収集され、さまざまなプロセッサモデルで動作しますが、特定のモデルを利用しません。
http://en.gentoo-wiki.com/wiki/Safe_Cflagsで、さまざまなタイプのプロセッサの安全な最適化フラグセットを確認できます。 そこに示されているフラグでビルドされたバイナリは、対応するプロセッサで問題なく動作し、同時にその利点のほとんどを使用するはずです。
バージョン4.2以降のgccでは、
-march=native
フラグが登場しました。 このフラグを使用すると、gccはプロセッサタイプ、サポートされている機能を自動的に判別して使用します。
一般に、最適化するには、次を実行します。
- プロセッサができることを決定します。cat
cat /proc/cpuinfo
、特にmmx * 、 3dnow * 、 sse * 、 cx *に注意してください。 - gccが-march = nativeで使用するものを参照してください:
gcc -march=native -O2 -Q --help=target -fverbose-asm
; - make.confに
-march=native
を書き込み、場合によっては-m*
追加し-m*
、これらは自動的には含まれません。 - プロセッサがsseをサポートし、
-mfpmath=
フラグ-mfpmath=
指定されていない場合は、 -mfpmath=
sseと記述します。 - gccが使用する最適化を確認します
gcc -march=native -O2 -Q --help=optimizers -fverbose-asm
; - gccが最適化を使用しない場合は、それらをmake.confに含めます。 いくつかの最適化を有効にすると、バイナリが動作しなくなる可能性があるため、ここでは
-fomit-frame-pointer
オプションにのみ注意を払う必要があります。デバッグしない場合は、このオプションを含めても安全です。
その結果、最適化でgccが使用するパラメーターを確認します。
gcc <your_options> -Q --help = target -fverbose-asm
gcc <your_options> -Q --help =オプティマイザー-fverbose-asm
-fverbose-asm
フラグを使用しないと、gccは無効なデータを表示します。 これについては、 http : //www.gentoo.ru/node/14818で説明しています 。
そして、このスクリプトは、コンパイラーのコマンドラインに入るものを示します
gcc <your_options> -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'
gcc <your_options> -E -v - </dev/null 2>&1 | sed -n 's/.* -v - //p'
。 興味深いのは、おそらく開発者だけです。
All Articles