5 floating-point x86-64 simd cpu-registers
大多数架构都有不同的寄存器组来存储常规整数和浮点数。从二进制存储的角度来看,东西存储在哪里应该不重要吧?只是 1 和 0,他们不能将相同的通用寄存器通过管道传输到浮点 ALU 中吗?
SIMD(xmmx64 中)寄存器能够存储浮点和常规整数,那么为什么相同的概念不适用于常规寄存器呢?
对于实际的处理器设计,除了“二进制存储观点”之外,还有很多问题需要考虑。
例如,导线长度很重要,这既是因为一次可以移动数十位的并行路径占用芯片空间,也是因为沿着导线获取信号需要时间。对于一英寸的几分之一来说时间并不多,但当一个周期是纳秒的几分之一时仍然很重要。作为比较,真空中的光在一纳秒内传播约 11.8 英寸。电线中的电信号速度较慢。
这使得将寄存器放置在将使用其内容的算术单元附近是一个好主意。通过单独的整数和浮点寄存器,处理器可以拥有靠近通用 ALU 的整数寄存器,以及靠近浮点单元的浮点寄存器。
还存在读写寄存器的路径数量有限的问题。通过独立的寄存器组,ALU 和浮点单元具有独立的寄存器访问路径,允许同时发生更多的事情。周期时间不再快速下降,处理器速度提高的其他来源之一是并行执行更多操作。
我不知道目前哪些问题很重要,但总的来说,分离寄存器组为处理器设计人员提供了如果寄存器组合并则不会有的机会。