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

让我展示我回答这些类型问题的第一个地方:在线英特尔内在指南。您提供内在函数,它会告诉您它做了什么,并通过 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是 的两倍_mm_mul_epi32

Haswell 的吞吐量是唯一的主要惊喜。

如果您想要 Nehalem 之前的处理器和/或 AMD 处理器的结果,请参阅 Agner Fog 的指令表手册或运行他用来测量延迟和吞吐量的测试程序。

于 2015-01-24T22:25:02.943 回答