在我的Intel x86 Pentium手册中,它说ADD和shift之类的SAL / SHR需要1/3的时钟,而JMP和MOV之类的则需要1个时钟。一堆的添加和移动是否比一堆的动作快3倍,这是真的吗?

我猜我很困惑,因为网络上有一个显示“Pentium M”的“等待时间”表,并且计时都不是1/3,尽管有一些是1/2。这是因为我的书很旧,而在更新的Pentiums上,移位的速度与JMP相同吗?

最佳答案

不要将“延迟”与“互惠吞吐量”混淆。

  • 延迟是执行一个指令实例所需的周期数。
  • 倒数吞吐量是处理器每个周期可以维持多少条指令。

  • 您看到的1/3不是等待时间。这是相互的吞吐量。处理器每个周期可以维持3个ADD。 (如果它们都是独立的),但每个周期仍至少需要1个周期才能执行。

    如果您具有1延迟和1/3的倒数吞吐量,则意味着处理器可以同时执行多达3个ADD。但是每个人仍然需要1个周期。

    从历史上看,大多数英特尔处理器(自奔腾以来)都具有3个主要执行单元,它们都可以执行基本操作,例如加法和移位。这就是为什么其中大多数都是1/3互惠吞吐量的原因。

    寄存器到寄存器的MOV也应为1/3。但是历史上接触存储器(即加载和存储)的MOV仅为1个周期。 (最近在Sandy Bridge和更高版本中,此功能得到了增强。)

    关于performance - 移位操作码真的比移动速度快3倍吗?英特尔x86,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12749331/

    10-16 11:46