4

通常、CPU では浮動小数点のパフォーマンスよりも優れた整数演算のパフォーマンスが得られますが、誰かが SIMD バージョンの場合を明確にすることができます。たとえば:

 __m128i _mm_mul_epi32(__m128i a, __m128i b);
//(multiplies 2 integer vectors)

対:

__m128 _mm_mul_ps(__m128 a , __m128 b );
//(multiplies 2 float vectors)

どちらがより高いパフォーマンスをもたらしますか? (マシンが SSE4 機能を備えていると仮定します) 私がこれを言っているのは、SSE2 命令に基づいて独自の小さな数学ライブラリをコーディングしたためであり、__m128i を使用して正しく進めるべきかどうかわからないからです。

4

1 に答える 1

4

これらのタイプの質問に答えるために私が最初にアクセスした場所、 Intel Intrinsic Guide onlineをお見せしましょう。組み込みを提供すると、それが何をするかがわかり、Haswell (そして間もなく Broadwell) プロセッサを介して Nehalem のレイテンシとスループットが提供されます。結果は次のとおりです。

_mm_mul_ps

                Latency    Reciprocal throughput
Haswell         5          0.5
Ivy Bridge      5          1
Sandy Bridge    5          1
Westmere        4          1
Nehalem         4          1

_mm_mul_epi32

                Latency    Reciprocal throughput
Haswell         5          1
Ivy Bridge      3          1
Sandy Bridge    3          1
Westmere        3          1
Nehalem         3          1

待ち時間が短く、相互スループットが高いほど優れています。これらの表から、次のことが結論付けられます。

  • Haswell を除いて、 のレイテンシ_mm_mul_epi32は よりも小さく_mm_mul_ps
  • Haswell ではレイテンシーは同じです。
  • Haswell を除いて、スループットは同じですが、
  • Haswell では、 のスループット_mm_mul_psは の 2 倍です_mm_mul_epi32

Haswell のスループットは、唯一の大きな驚きです。

Nehalem より前のプロセッサや AMD プロセッサの結果が必要な場合は、Agner Fog の命令テーブル マニュアルを参照するか、彼がレイテンシとスループットを測定するために使用したテスト プログラムを実行してください。

于 2015-01-24T22:25:02.943 に答える