Floating point 什么';使用可容纳32字节的媒体寄存器的目的是什么

Floating point 什么';使用可容纳32字节的媒体寄存器的目的是什么,floating-point,x86-64,simd,cpu-registers,avx,Floating Point,X86 64,Simd,Cpu Registers,Avx,我正在阅读一本介绍基于AVX的浮点体系结构(用于“高级向量扩展”)的教科书,下面是可用媒体寄存器的图片: 我不明白为什么那些寄存器需要256位(32字节),难道数据类型不是4个字节而双精度是8个字节吗?那么我们可以使用普通整数寄存器suhc作为%rdi,%rsi,%r8等等,这些64位寄存器就足够了?查找SIMD-a 256位(32字节)寄存器可用于保存4个双精度s或8个浮点s,并且有专门的指令一次操作4个双精度或8个浮点-显著增加您可以在CPU上执行的计算数量。您可以将一个双精度加载到%rd

我正在阅读一本介绍基于AVX的浮点体系结构(用于“高级向量扩展”)的教科书,下面是可用媒体寄存器的图片:


我不明白为什么那些寄存器需要256位(32字节),难道数据类型不是4个字节而双精度是8个字节吗?那么我们可以使用普通整数寄存器suhc作为
%rdi
%rsi
%r8
等等,这些64位寄存器就足够了?

查找SIMD-a 256位(32字节)寄存器可用于保存4个双精度s或8个浮点s,并且有专门的指令一次操作4个双精度或8个浮点-显著增加您可以在CPU上执行的计算数量。您可以将一个双精度加载到
%rdi
,但是你不能在上面做FP数学,比如
addsd
。有关CPU体系结构设计的原因,请参阅。当然,您也可以在YMM寄存器上执行
vaddpd
,以与标量相同的成本并行执行4个FP加法(在具有全宽SIMD执行单元的CPU中,如Sandybridge系列和Zen2及更高版本)。@PeterCordes感谢您的回答。但为什么256位寄存器可以进行浮点运算呢?因为像
VADDPS ymm1、ymm2、ymm3/m256
这样的指令存在,它们并行进行8x
float
加法运算。(压缩单精度)。如果你只做标量FP数学,你只会使用XMM寄存器,只关心它的低32位或64位,以及类似
addss
(标量单精度)的指令,请参见查找SIMD-256位(32字节)寄存器可用于保存4
double
s或8
float
s,还有一些特殊的指令可以一次操作4个双精度浮点或8个浮点,这大大增加了您在CPU上可以进行的计算数量。您可以将
double
加载到
%rdi
中,但您不能在其中执行类似
addsd
的FP数学。有关CPU体系结构设计的原因,请参阅。当然,您也可以在YMM寄存器上执行
vaddpd
,以与标量相同的成本并行执行4个FP加法(在具有全宽SIMD执行单元的CPU中,如Sandybridge系列和Zen2及更高版本)。@PeterCordes感谢您的回答。但为什么256位寄存器可以进行浮点运算呢?因为像
VADDPS ymm1、ymm2、ymm3/m256
这样的指令存在,它们并行进行8x
float
加法运算。(压缩单精度)。如果您只做标量FP数学,那么您将只使用XMM REG,并且只关心它的低位32或64位,以及类似
addss
(标量单精度)的指令,请参见