【问题标题】:Why floating point registers are different than general purpose ones为什么浮点寄存器不同于通用寄存器
【发布时间】:2020-09-14 17:38:17
【问题描述】:

大多数架构都有不同的寄存器集来存储常规整数和浮点数。从二进制存储的角度来看,存储东西的位置不应该是对的吗?只是 1 和 0,难道它们不能将相同的通用寄存器通过管道传输到浮点 ALU 中吗?

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

【问题讨论】:

  • 纯属推测,但是:在 x86-64 和 xmm 等之前,CPU 可能有一个基于堆栈的浮点单元,这是一种补充附加组件(在 FPU 之前,CPU 只是根本没有浮点支持)。我的猜测是 AMD 的人坚持浮点作为附加组件的概念,因此他们添加了xmm 寄存器,而不是使用 SIMD 指令扩展整数寄存器。然后,在开发的某个阶段,他们意识到可以为 xmm 寄存器添加整数 SIMD 指令,但随后他们坚持使用 xmm,而不是统一所有内容。
  • 要记住的一点是 x86-64 是一种编程语言。它比 C 级别低,但比 x86-64 转换为的实际微操作级别高。 xmm5rbxebx等只是编程语言结构,后面很可能有统一的整数+FP寄存器。
  • @hegel5000:XMM 寄存器本身甚至没有统一!英特尔处理器,或者至少其中一些处理器,具有不同的物理位置,它们将根据 XMM 寄存器是用于整数指令还是浮点指令来保存数据。这对汇编语言程序员来说是不可见的;处理器保留自己的有关数据位置的信息。除非它可以在表演效果中看到;交替整数和浮点指令可能比任何一个的齐次序列都慢。
  • 只有在您的通用寄存器至少为 64 位时才真正有意义。因此,x86-32(和之前的 x86-16)确实不能对两者使用相同的寄存器,并且 x86-64 被有意设计为类似于 x86-32,因此保持寄存器架构大致相似。
  • 再往前追溯,在 386 及之前的版本中,FPU 是一个物理上独立的芯片(不是每个人都选择购买),因此它确实必须有自己的寄存器。

标签: floating-point x86-64 simd cpu-registers


【解决方案1】:

对于实际的处理器设计,比“二进制存储观点”要考虑的问题要多得多。

例如,线路长度很重要,因为一次可以移动数十位的并行路径占用芯片空间,并且因为沿线路获取信号需要时间。几分之一英寸的时间不多,但当一个周期是几分之一纳秒时仍然很重要。相比之下,真空中的光在一纳秒内可以传播约 11.8 英寸。电线中的电信号较慢。

这使得将寄存器放置在将要使用其内容的算术单元附近是一个好主意。通过单独的整数和浮点寄存器,处理器可以拥有接近通用 ALU 的整数寄存器和接近浮点单元的浮点寄存器。

还有读写寄存器的路径数量有限的问题。通过独立的寄存器组,ALU 和浮点单元具有独立的寄存器访问路径,允许同时发生更多事情。周期时间不再迅速下降,处理器速度提高的其他来源之一是并行执行更多操作。

我不知道这些问题中的哪一个目前很重要,但总的来说,分离寄存器组为处理器设计者提供了如果将寄存器组合并则不会有的机会。

【讨论】:

  • 同样重要:对于机器码中寄存器字​​段的固定宽度,您可以拥有例如16 个 FP 16 个 GP-int 寄存器,或 16 个统一寄存器。 Eric 在 cmets 中提出了这一点。在相关问答Is there any architecture that uses the same register space for scalar integer and floating point operations? 中也进行了更深入的讨论。当引入 SSE1 时,这对于现代 x86 来说是一个非常大的问题,因为 8086 机器代码格式将 32 位 x86 限制为 8 个寄存器,这对于整数来说甚至是不够的。 (16 个 x86-64)
  • 同样相关:将寄存器重命名为更大的物理寄存器文件:整数寄存器比 SIMD regs 窄,因此您可以拥有更大的物理寄存器文件来重命名它们,以及更适度的 FP 重命名功能(例如低功耗 Silvermont 仅对整数执行完全无序执行,FP 操作在两个有序队列之间划分。)是的,寄存器文件读/写端口很重要。
  • 不过,当引入 SSE1 时,英特尔并没有使用单独的寄存器文件:P6 系列将结果正确地保存在 ROB 条目本身中,无论是整数还是 SIMD。 (P3 将 128 位操作拆分为 2 个 64 位 uop,但后来的 P6 系列 CPU 像 Nehalem 必须有足够大的 ROB 条目来获得整个 128 位结果。Sandybridge 切换到使用物理寄存器文件以及引入 256-位 AVX SIMD。realworldtech.com/sandy-bridge)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2016-08-26
  • 2012-02-10
  • 2012-01-28
相关资源
最近更新 更多