X86 SSE 2及以上-为什么浮点数据类型仅存储2个浮点数字

X86 SSE 2及以上-为什么浮点数据类型仅存储2个浮点数字,x86,sse,simd,sse2,X86,Sse,Simd,Sse2,我试图使用SSE内在函数优化我的代码。看完文档后,我看到SSE中有一个浮点变量的数据类型,能够存储4个浮点数。SSE2中有一个\uuuu m128d只能存储2个浮点数?这些变量之间有什么区别?SSE2不是应该比SSE快吗?SSE指令使用128位寄存器 一个float使用4个字节=32位->因此您可以存储4个float(4*32=128),它们是\uuuu m128 一个double使用8个字节=64位->因此可以存储2个double(2*64=128),它们是\uuuu m128d ->更多信息

我试图使用SSE内在函数优化我的代码。看完文档后,我看到SSE中有一个浮点变量的数据类型,能够存储4个浮点数。SSE2中有一个
\uuuu m128d
只能存储2个浮点数?这些变量之间有什么区别?SSE2不是应该比SSE快吗?

SSE指令使用128位寄存器

一个
float
使用4个字节=32位->因此您可以存储4个float(4*32=128),它们是
\uuuu m128

一个
double
使用8个字节=64位->因此可以存储2个double(2*64=128),它们是
\uuuu m128d


->更多信息

SSE指令使用128位寄存器

一个
float
使用4个字节=32位->因此您可以存储4个float(4*32=128),它们是
\uuuu m128

一个
double
使用8个字节=64位->因此可以存储2个double(2*64=128),它们是
\uuuu m128d


->更多信息

SSE2不应该比SSE更快吗?不,它应该为整数和双精度浮点提供指令,而不仅仅是单精度浮点。请参阅SSE标记wiki:。也许您正在寻找AVX,它提供256b寄存器:8
float
或4
double
。我把它们都弄糊涂了,以为它们是不同的指令集!知道了。谢谢。它们是不同的指令集。奔腾III只支持SSE,因此只能将XMM寄存器用于标量或压缩单精度,而不是整数或双精度。后来添加了SSE2。但SSE2仅支持双数据类型。如果我想使用float数据类型,我需要使用uu m128。所以SSE2是SSE的一种延伸,对吗?从某种意义上说,它只添加了在SSE中不可用的函数和数据类型。是的,这是正确的。大多数后来的扩展(SSE3、SSSE3、SSE4.1)都为每个现有数据类型添加了一些指令。(一些
pxxx
integer,一些
xxxps
float,一些
xxxpd
指令。请参阅。其中列出了每条指令的扩展组。)SSE2不应该比SSE快吗?不,它应该为整数和双精度浮点提供指令,而不仅仅是单精度浮点。请参阅SSE标记wiki:。也许您正在寻找AVX,它提供256b寄存器:8
float
或4
double
。我把它们都弄糊涂了,以为它们是不同的指令集!知道了。谢谢。它们是不同的指令集。奔腾III只支持SSE,因此只能将XMM寄存器用于标量或压缩单精度,而不是整数或双精度。后来添加了SSE2。但SSE2仅支持双数据类型。如果我想使用float数据类型,我需要使用uu m128。所以SSE2是SSE的一种延伸,对吗?从某种意义上说,它只添加了在SSE中不可用的函数和数据类型。是的,这是正确的。大多数后来的扩展(SSE3、SSSE3、SSE4.1)都为每个现有数据类型添加了一些指令。(一些
pxxx
integer,一些
xxxps
float,一些
xxxpd
指令。请参阅。其中列出了每条指令的扩展组。)