4

計算集約型の科学アプリケーションの数学ライブラリ関数の代わりに、GCC (または clang) が一貫して sqrt に SSE 命令を使用するようにしようとしています。さまざまな 32 ビットおよび 64 ビット OS X および Linux システムでさまざまな GCC を試しました。-mfpmath=sse (および -march=core2 で sse を有効にして、32 ビットで -mfpmath=sse を使用するという GCC の要件を満たすようにしています)。-O3 も使用しています。GCC または clang のバージョンによっては、生成されたアセンブリで SSE の sqrtss が一貫して使用されません。GCC の一部のバージョンでは、すべての sqrt がこの命令を使用します。他の例では、sqrtss と数学ライブラリ関数の呼び出しが混在しています。ヒントを与える方法や、コンパイラに SSE 命令のみを使用させる方法はありますか?

4

2 に答える 2

4

sqrtss組み込みの__builtin_ia32_sqrtss?

于 2010-07-15T20:13:55.713 に答える
0

それを使用する際には注意が必要です。おそらく、精度が低いことを知っているでしょう。これが、gcc が体系的に使用しない理由です。

INTEL の SSE マニュアルにも記載されているトリックがあります (正しく覚えていることを願っています)。の結果は、ターゲットからsqrtss1 つのHeron反復だけ離れています。おそらく、その gcc はinline、ある時点 (バージョン) で周囲の短い反復を実行できる場合もあれば、実行できない場合もあります。

MSN が言うようにビルトインを使用することもできますが、INTEL の Web サイトで仕様を調べて、何を取引しているのかを確認する必要があります。

于 2010-07-15T22:18:55.057 に答える