SSE (AVX) で int と float の両方を扱う場合、すべての int を float に変換し、float のみで作業することをお勧めしますか? その後は数個の SIMD 命令しか必要なく、使用する必要があるのは加算命令と比較命令 ( <, <=, ==
) だけなので、この変換が完全に保持されることを願っています。
1601 次
1 に答える
6
私のコメントを答えに展開してください。
基本的に、次のトレードオフを検討します。
整数に固執する:
- 整数 SSE は、低レイテンシーで高スループットです。(Sandy Bridge の二重発行)
- 128 ビットの SIMD 幅に制限されています。
浮動小数点に変換:
- 256 ビット AVX の利点。
- レイテンシが高く、単一の問題の加算/減算のみ (Sandy Bridge で)
- 初期変換オーバーヘッドが発生します。
float
入力を精度の低下なしに に適合するものに制限します。
今のところ、整数に固執すると思います。バージョンでコードを複製したくない場合はfloat
、それがあなたの呼び出しです。
浮動小数点を使用した整数のエミュレートが高速になるのは、除算を行う必要がある場合だけです。
手動のベクトル化に飛び込むことは、おそらくパフォーマンスがより重要であることを意味するため、読みやすさについては言及していないことに注意してください。
于 2012-02-24T21:15:31.273 に答える