【发布时间】:2017-12-05 08:26:57
【问题描述】:
我正在尝试使用 SSE 内在函数优化我的代码。浏览文档后,我看到 SSE 中有 __m128 数据类型用于浮点变量,能够存储 4 个浮点数。 SSE2 中有一个__m128d 只能存储 2 个浮点数?这些变量之间有什么区别? SSE2 不应该比 SSE 快吗?
【问题讨论】:
-
SSE2 不是应该比 SSE 快吗? 不,它应该提供整数和双精度浮点数的指令,而不仅仅是单精度浮点数。请参阅 SSE 标签 wiki:stackoverflow.com/tags/sse/info。也许您正在寻找 AVX,它提供 256b 寄存器:8
float或 4double。 -
哦。我将它们都混淆为不同的指令集!知道了。谢谢。
-
它们是不同的指令集。 Pentium III 仅支持 SSE,因此只能将 XMM 寄存器用于标量或压缩单精度,而不是整数或双精度。 SSE2 是后来添加的。
-
但 SSE2 仅支持双数据类型。如果我想使用浮点数据类型,我需要使用 __m128。所以 SSE2 是 SSE 的一种扩展,对吧?从某种意义上说,它只添加了 SSE 中不可用的那些函数和数据类型。
-
是的,没错。大多数后来的扩展(SSE3、SSSE3、SSE4.1)为每种现有数据类型添加了一些指令。 (一些
pxxx整数,一些xxxps浮点数,一些xxxpd指令。参见hjlebbink.github.io/x86doc。其中列出了每条指令的扩展组。)