Floating point 为什么浮点寄存器不同于通用寄存器

Floating point 为什么浮点寄存器不同于通用寄存器,floating-point,x86-64,simd,cpu-registers,Floating Point,X86 64,Simd,Cpu Registers,大多数体系结构都有不同的寄存器集来存储正则整数和浮点。从二进制存储的角度来看,存储在哪里并不重要?只是1和0,难道它们不能将相同的通用寄存器传输到浮点ALU中吗 SIMD(xmm在x64中)寄存器能够存储浮点和正则整数,因此 为什么同一个概念不适用于常规寄存器? 对于实际的处理器设计来说,比“二进制存储点”要考虑的问题要多得多。p> 例如,导线长度很重要,因为一次可以移动几十位的并行路径需要占用芯片空间,也因为沿着导线获取信号需要时间。对于一英寸的分数来说,时间不多,但当一个周期是一纳秒的分数时

大多数体系结构都有不同的寄存器集来存储正则整数和浮点。从二进制存储的角度来看,存储在哪里并不重要?只是1和0,难道它们不能将相同的通用寄存器传输到浮点ALU中吗

SIMD(
xmm
在x64中)寄存器能够存储浮点和正则整数,因此
为什么同一个概念不适用于常规寄存器?

对于实际的处理器设计来说,比“二进制存储点”要考虑的问题要多得多。p> 例如,导线长度很重要,因为一次可以移动几十位的并行路径需要占用芯片空间,也因为沿着导线获取信号需要时间。对于一英寸的分数来说,时间不多,但当一个周期是一纳秒的分数时,时间仍然很重要。相比之下,真空中的光可以在一纳秒内传播11.8英寸。电线中的电信号比较慢

因此,最好将寄存器放在将要使用其内容的算术单元附近。使用单独的整数和浮点寄存器,处理器可以具有接近通用ALU的整数寄存器,以及接近浮点单元的浮点寄存器

还存在读取和写入寄存器的路径数量有限的问题。通过单独的寄存器组,ALU和浮点单元具有独立的寄存器访问路径,允许同时发生更多的事情。循环时间不再快速下降,处理器速度提高的另一个来源是并行处理


我不知道这些问题中的哪一个目前很重要,但一般来说,分离寄存器组会给处理器设计人员提供他们在合并寄存器组时不会有的机会。

纯粹是猜测,但是:在x86-64使用
xmm
等之前,CPU可以有一个基于堆栈的浮点单元,这是一种补充插件(在FPU之前,CPU根本不支持浮点)我猜AMD的员工坚持浮点是一个附加组件的概念,因此他们添加了
xmm
寄存器,而不是使用SIMD指令扩展整数寄存器。然后,在开发过程中的某个时候,他们意识到他们可以为
xmm
寄存器插入整数SIMD指令,但后来他们坚持使用使用
xmm
而不是统一所有内容。需要记住的一点是x86-64是一种编程语言。它的级别低于C,但高于x86-64转换为的实际微操作。
xmm5
rbx
ebx
,等等都是编程语言结构,可能会有很多好处l在后台使用统一的整数+浮点寄存器。@hegel5000:XMM寄存器本身甚至不统一!英特尔处理器或至少其中一些处理器有不同的物理位置来保存XMM寄存器的数据,这取决于它是用于整数还是浮点数指令。这对as是不可见的embly language programmer;处理器保留自己关于数据位置的信息。除了在性能效果中可见外,交替使用整数和浮点指令可能比任意一个的齐次序列都慢。只有在通用寄存器至少为64位的情况下,这样做才有意义ch、x86-32(以及之前的x86-16)确实无法对这两种寄存器使用相同的寄存器,而x86-64被有意设计为类似于x86-32,因此保持了寄存器体系结构的大致相似。更进一步,在386及之前,FPU是一种物理上独立的芯片(并非所有人都选择购买),因此它确实必须有自己的寄存器。同样重要的是:对于机器代码中寄存器字段的固定宽度,可以有16个FP和16个GP int寄存器,或者16个统一寄存器。Eric在评论中指出了这一点。相关问答中也对其进行了更深入的讨论。这在引入SSE1时对现代x86来说是一个非常重要的问题ced,因为8086机器码格式限制了32位x86到8个寄存器,这对于整数是不够的。(16与x86-64)同样相关:将寄存器重命名为更大的物理寄存器文件:整数寄存器比SIMD REG窄,因此您可以使用更大的物理寄存器文件对其进行重命名,并具有更温和的FP重命名功能(例如,低功耗Silvermont仅对整数执行完全无序的exec,FP ops在两个有序队列之间进行划分。)是的,寄存器文件读/写端口是一件大事。不过,当SSE1推出时,Intel并没有使用单独的寄存器文件:P6系列将结果保留在ROB条目中,无论是整数还是SIMD。(P3将128位ops拆分为2个64位UOP,但后来的P6系列CPU(如Nehalem)必须具有足够大的ROB条目,以获得整个128位结果。Sandybridge在引入256位AVX SIMD的同时,转而使用物理寄存器文件。)