例として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はプロセッサタイプ、サポートされている機能を自動的に判別して使用します。

一般に、最適化するには、次を実行します。



その結果、最適化で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