2

SSE (AVX) で int と float の両方を扱う場合、すべての int を float に変換し、float のみで作業することをお勧めしますか? その後は数個の SIMD 命令しか必要なく、使用する必要があるのは加算命令と比較命令 ( <, <=, ==) だけなので、この変換が完全に保持されることを願っています。

4

1 に答える 1

6

私のコメントを答えに展開してください。

基本的に、次のトレードオフを検討します。

整数に固執する:

  • 整数 SSE は、低レイテンシーで高スループットです。(Sandy Bridge の二重発行)
  • 128 ビットの SIMD 幅に制限されています。

浮動小数点に変換:

  • 256 ビット AVX の利点。
  • レイテンシが高く、単一の問題の加算/減算のみ (Sandy Bridge で)
  • 初期変換オーバーヘッドが発生します。
  • float入力を精度の低下なしに に適合するものに制限します。

今のところ、整数に固執すると思います。バージョンでコードを複製したくない場合はfloat、それがあなたの呼び出しです。

浮動小数点を使用した整数のエミュレートが高速になるのは、除算を行う必要がある場合だけです。


手動のベクトル化に飛び込むことは、おそらくパフォーマンスがより重要であることを意味するため、読みやすさについては言及していないことに注意してください。

于 2012-02-24T21:15:31.273 に答える