2012-10-05 35 views
2

在我的Intel Pentium手册中,它说ADD和SAL/SHR转换花费1/3时钟,而JMP和MOV花费1个时钟。这真的是真的,一堆添加和移位会比一堆mov快3倍吗?移动操作代码的速度是否比移动快3倍? Intel x86

我想我倍加困惑,因为在网上显示“Pentium M”的“延迟”表没有时间是1/3,尽管有一些是1/2。这是因为我的书是旧的,而更新的Pentiums换档速度与JMP相同吗?

+1

从1993年的原始奔腾?自从有些事情发生了变化! –

+0

这是我的书:http://marketplace.vintage-computer.com/auction_details.php?name=Intel-Pentium-Processor-Family-Developers-Manual-Vol-3-Architecture&auction_id=112800。这本书是“Pentium处理器家族开发者手册第3卷:体系结构和编程手册”1995年的版本。 –

回答

9

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

  • 延迟是需要多少个时钟周期执行的指令的一个实例。
  • 互惠吞吐量是处理器每个周期能够维持多少指令。

1/3你看到的不是延迟。这是互惠的吞吐量。处理器每个周期可以支持3个ADD。 (如果他们都是独立的)但每个人仍然至少需要1个周期才能执行。

如果您有延迟11/3的倒数吞吐量,这意味着处理器可以同时执行多达3个ADD。但每一个仍然需要1个周期。从历史上看,大多数英特尔处理器(自Pentium?以来)都有3个主要执行单元,可以执行基本操作,例如添加和移位。这就是为什么其中大部分是1/3往复吞吐量。

寄存器到MOV的寄存器MOV也应该是1/3。但是,触摸存储器(即加载和存储)的MOV历史上只有1个/周期。 (最近在Sandy Bridge以后,这个数量有所增加)

+0

“自奔腾以来”?自奔腾以来,架构已经完全改变了几次,尽管英特尔处理器的所有变化都回溯到Pentium M根据http://www.agner.org/optimize/instruction_tables.pdf –

3

假设这是关于最初的Pentium(即不是Pentium Pro或更新版本),1/3并不意味着“三分之一”(或类似的东西) 。这意味着该指令具有1个周期的吞吐量和3个周期的延迟(也就是说,您可以在每个周期开始一个指令,并且每个周期可以完成一次,但指令需要三个流水线阶段,所以在开始和结束之间存在三个周期的延迟特定指令)。

最初的Pentium只有两个执行单元,没有乱序执行。在给定的时钟周期内,下一条指令将在U管道中执行。如果符合正确的条件,那么之后的指令可以在V管道中执行。在任何情况下,在任何给定的周期内都不会执行两条以上的指令,并且在任何情况下都不会在单个管道中每个时钟执行一条以上的指令。

后来的处理器(从Pentium Pro开始)增加了乱序指令调度,并且能够在单个周期内执行两条以上的指令(可能有更多的“飞行中”,但仅限于每个周期退出三个)。 Pentium IV增加了在一个时钟周期内在同一个执行单元中执行2个非常简单的指令(寄存器寄存器AND,OR,NOT,ADD,SUB,一位移位)的能力(即它有一个执行单元实际上以额定时钟速度的两倍运行,所以例如在2.8GHz处理器上少量的电路实际上运行在5.6GHz)。

+0

,好像,你是说1/3意味着一个给定的ADD/SHR总是需要至少3个时钟才能执行?如果是这样,这显然意味着ADD/SHR比JMP/MOV慢,这在我看来是有道理的。 –

+0

@TylerDurden:是的,就是这么多。在那个时候,我似乎在手册中有一个模糊的记忆,其中某些显示为1/3,应该是1/2(即,显示为三个周期的延迟实际上仅为2)。 –