GCCでSSE2を使用するにはどうすればよいですか? 私は二重の値で作業したいです。GCCでの二重計算のSSE2
I検索s.th.このように: http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 二重値の場合のみ。
GCCでSSE2を使用するにはどうすればよいですか? 私は二重の値で作業したいです。GCCでの二重計算のSSE2
I検索s.th.このように: http://vrm-vrm.blogspot.com/2009/10/gcc-intrinsics.html 二重値の場合のみ。
SSE2 double
insnsを使用する場合は、gcc -mfpmath=sse -msse2
でコンパイルする必要があります。
オプション-msse2
だけでSSE2組み込み関数を使用できるようになると、-mfpmath=sse
はGCCにすべてのFP操作のSSE2 insnsを出力させます。
ベクター化は-O3
で有効になっています。
ベクトルSSE2-4用のinsnの利点は明らかであり、サンディブリッジプロセッサは、サイクルごとに3つの256ビット演算まで実行することができる(例えば、4回のダブル乗算、4つの二重付加およびその上にいくつかのシャッフル)
しかし、インテルの最適化マニュアルでは、従来のx87 insnsと比較して、フラット・レジスタ・モデルや短いレイテンシなどの理由で、スカラー操作でもSSEを使用することを推奨しています。
EDIT:
は言及を忘れ、32ビットコードのために、あなたはまた、FPの引数と戻り値は、SSEレジスタを経由して渡されることになりますどの、-msseregparm
を追加することができます。デフォルトでは、メモリにはそれぞれ%st0
が渡されます。当然、これはABIを変更するので、相互作用するすべてのモジュールをこのオプションでコンパイルする必要があります。
'-msse'などで、' -march = native'でコンパイルするだけでもいいです... –
それはすべてですか?私はそれが複雑になるだろうと聞き、組み込み関数を使用する必要があります。 –
明示的な構造を使用する場合は、組み込み関数を使用する必要があります。コンパイラのフラグを使用すると、使用可能な場合、およびオプティマイザが適切な選択肢であると判断した場合に、ハードウェアを使用することはコンパイラに指示するだけです。いくつかの '-O'レベルと組み合わせて使用します。保証はありませんが、試してみて、アセンブリを比較してください。 –