虽然您通常在CPU上获得比浮点性能更好的整数算术性能,但是否有人能澄清SIMD versions.For实例的情况:
__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。
发布于 2015-01-24 22:25:02
让我展示一下我第一个回答这些问题的地方:英特尔内在指南在线。您提供了内在的,它告诉您它做了什么,并通过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较低的延迟和交互吞吐量更好。从这些表格中我们可以得出结论:
_mm_mul_epi32的延迟小于_mm_mul_ps,_mm_mul_ps的吞吐量是_mm_mul_epi32的两倍。哈斯韦尔的吞吐量是唯一令人惊讶的。
如果您希望获得前Nehalem处理器和/或AMD处理器的结果,请参阅Agner的指令表手册或运行他的测试程序,这是他用来测量延迟和吞吐量的方法。
https://stackoverflow.com/questions/18422302
复制相似问题