首页 > 解决方案 > 为什么浮点寄存器不同于通用寄存器

问题描述

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

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

标签: floating-pointx86-64simdcpu-registers

解决方案


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

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

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

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

我不知道这些问题中的哪一个目前很重要,但总的来说,分离寄存器组给处理器设计人员提供了机会,如果将这些组结合起来,他们就不会拥有这些机会。


推荐阅读