Misc Change Log

`OpenBSD で scheme のアプリ開発' みたいなことをやってます。

2005-02-07

gcc3 の最適化オプション(その2)

以前のまま放りっぱなしのままでは何なので、落穂拾い。

結局、現在は

COPTS=-O2 -march=pentium4 -mcpu=pentium4 -fstrength-reduce -fprefetch-loop-arrays -pipe

でカーネル、ports を含むユーザランドを再構築して運用している。

-fprefetch-loop-arrays はなかなか面白いオプションだ。man によると、

-fprefetch-loop-arrays
    If supported by the target machine, generate instruc-
    tions to prefetch memory to improve the performance of
    loops that access large arrays.

抄訳

-fprefetch-loop-arrays
    ターゲットマシンがサポートしているのならば、
    巨大な配列へのアクセスするループに対して
    パフォーマンスを向上させるためにメモリをプリフェッチする
    インストラクションを生成します。

vm や物理計算など、 配列をガシガシいじるプログラムに最適らしい。 Pentium なら Pentium III 以降でこのオプションが使えるようになる(デフォルトではおそらくオフ)。 ただし -Os と併用はできない、などの注意点はある。

ベンチマーク。配列計算といえばこれ。姫野ベンチ。 SMALL モード で 3 回連続実行してみた。列は回数、単位は MFLOPS である。

-O3 -DSMALL -O2 -march=pentium4 -fstrength-reduce -fprefetch-loop-arrays
349.854312 375.026538
350.596776 377.537923
349.413404 375.862571

Pentium M 1.3G は Pentium III 600MHz 比で x4.5 くらいか。 Pentium M の底力を見たような気がする。

実用上は違いがこれほど先鋭に出ることはないだろうが、なかなかおいしい。 ちなみに -mfpmath=sse をつけるとかえって遅くなるようだ。残念である。

Posted at 16:53 | Permalink | Category | Comments