IntelAtomプロセッサー用のパフォーマンスクリティカルなアプリケーションを開発しています。
このCPUに最適なgcc最適化フラグは何ですか?
IntelAtomプロセッサー用のパフォーマンスクリティカルなアプリケーションを開発しています。
このCPUに最適なgcc最適化フラグは何ですか?
GCC ハッカーの 1 人である Scott Rober Ladd による Acovea (Analysis of Compiler Options via Evolutionary Algorithm)と呼ばれるクールなフレームワークがあります。これは、自然選択によって特定のコードの GCC 最適化フラグを最適化しようとする遺伝的/進化的アルゴリズム フレームワークです。
これは次のように機能します: 最適化するより大きなプログラムのパフォーマンス特性を表す小さなベンチマーク コードを記述します (再コンパイルして数千回実行するため、実際には小さくする必要があります)。次に、Acovea は数十の異なる GCC コマンドラインをランダムに構築し、それらのそれぞれでベンチマークをコンパイルして実行します。これらのコマンドラインの最良のものは、新しい「子」を「交配」および「繁殖」させることができ、(願わくば) 「親」から最良の「遺伝子」を継承します。このプロセスは、コマンドライン フラグの安定したセットが出現するまで、数十の「世代」に対して繰り返されます。
CPU とコンパイラの組み合わせに適したフラグを自動選択するスクリプトがあります。Intel Atom をサポートするように更新しました。
http://www.pixelbeat.org/scripts/gcccpuopt
更新: 以前に Atom に -march=prescott を指定しましたが、詳しく調べると、Atom は merom ISA に準拠しているため、-march=core2 の方が適切です。ただし、Atom は順序付けられたコアであり、最後のコアが元のペンティアムであることに注意してください。したがって、-mtune=pentium も同様に使用する方がよいでしょう。残念ながら、テストする Atom がありません。誰かが次の違いをベンチマークできれば本当にありがたいです:
-march=core2 -mfpmath=sse -O3
-march=core2 -mtune=pentium -mfpmath=sse -O3
更新: Atom の低レベルの最適化に関するいくつかの優れた記事を次に示します。
さて、Gentoowikiはプレスコットについて次のように述べています。
http://en.gentoo-wiki.com/wiki/Safe_Cflags/Intel#Atom_N270
CHOST = "i686-pc-linux-gnu"
CFLAGS = "-march = prescott -O2 -pipe -fomit-frame-pointer"
CXXFLAGS = "$ {CFLAGS}"
インテルから、MID の概要
GCC を使用してコンパイルする場合、使用する推奨フラグがいくつかあります。
Pentium 4の場合と同じように:
-march=prescott -O2 -pipe -fomit-frame-pointer
GCC に Atom 固有の最適化フラグがまだあるかどうかはわかりませんが、Atom コアは元の Pentium に非常に似ていると考えられており、MMX/SSE/SSE2/SSE3/SSSE3 命令セットが大幅に追加されています。もちろん、これらは、コードが浮動小数点または DSP を多用する場合にのみ大きな違いをもたらします。
おそらくあなたは試すことができます:
gcc -O2 -march=pentium -mmmx -msse -msse2 -msse3 -mssse3 -mfpmath=sse
これがブログのクロスポレネーションです...私が本当に望んでいたのは、Firefoxでコンパイルされたアトムベンチマークでした...
アドレス:http:// ivoras.sharanet.org/blog/tree/2009-02-11.optimizing-for-atom.html
「結局のところ、gccは-mtune = nativeで非常にまともな仕事をしているようで、mtune = genericは許容範囲を超えています。(この数学が多いベンチマークでの)最大の利益は、数学にSSEを使用することから得られますが、 pentium4のチューニングによって破壊されます。
「最も速い最適化と最も遅い最適化の違いは21%です。mtuneの代わりにmarchを使用した場合の影響はごくわずかです(役立つかどうかを判断するのに十分な違いはありません)。
「(参考のためにk6を含めました-Atomには3dnowがないことを知っています)
「最新の更新:k8(SSEおよびO3を使用)のチューニングでは、わずかに高い182の最高スコアが得られます。」
i686 が最も近いです。core2には行かないでください。
GCC 4.1 -O3 -march=i686 GCC 4.3 -O3 -march=native
GCC 4.1 -O4 -ffast-math GCC 4.3 -O4 -ffast-math
http://macles.blogspot.com/2008/09/intel-cc-compiler-gcc-and-intel-atom.html