为什么在程序运行之前不解码 CPU 指令?

为什么在程序运行之前不解码 CPU 指令?

指令周期的解码步骤中有什么因素阻止它提前完成?

Intel 64 手册提到了诸如“将指令解码为微操作”之类的内容。

Ulrich Drepper 在每个程序员都应该知道的关于内存的知识说:

对于指令缓存来说,尽快将数据放入缓存中更为重要。如第 3.1 节所述,指令必须先解码才能执行,为了加快执行速度(这在 x86 和 x86-64 上很重要),指令实际上是以解码后的形式缓存的,而不是以从内存中读取的字节/字形式缓存的。

似乎如果可以在程序运行之前将这个“解码形式”存储在主内存中,它就会存储在那里。这个解码形式有什么特点,可以防止它提前被计算和存储?

答案1

因为 x86-64 指令集定义明确,并允许向后兼容。使用核心指令集意味着程序需要为每一代新 CPU 重新编译,或者 CPU 代需要完全向后兼容。

在现代 x86 CPU 中,CPU 的实际执行核心与 x86 指令集定义的指令不同,并且此解码步骤使它们能够在不对外部架构进行重大更改的情况下改变核心架构。

AMD 和 Intel 内核具有通用的外部 x86-64 架构,但解码阶段意味着内部内核可以有很大差异,并且可以以相似但功能不同的方式工作以实现相同的目标。

这也意味着可以对底层核心进行细微改进,从而实现代际速度提升,而无需更改程序本身即可利用这些改进。当然,时不时会有新指令,但这些指令本质上是执行指令流的新方法,而不是使现有指令更有效。

相关内容