为什么不能同时具有每个周期的高指令和高时钟速度?


37

由于PC的INTEL 8086处理器和Apple的Rockwell 6502处理器之间的差异,兆赫兹神话成为一种促销策略。8086的运行频率为4.77MHz,而6502的运行频率为1MHz。但是,关于6502的说明需要更少的周期。实际上要比8086快得多。 为什么有些指令需要更少的周期?为什么不能将需要较少周期的6502指令与8086的快速循环处理器结合在一起?

维基百科有关每周期指令(IPC)的文章说

控制IPC
的因素可以通过较高的IPC和较低的时钟速度来实现每秒给定级别的指令,或者通过较低的IPC和较高的时钟速度来实现。

为什么不能同时具有每个周期的高指令和高时钟速度?

也许这与一个时钟周期有关?维基百科提到电路同步?不确定那是什么意思。

也许这与管道的工作方式有关?我不确定为什么短管线中的指令与长管线中的指令不同。

任何见识都会很棒!只是想了解神话背后的架构。谢谢!

参考文献:

每个周期的指令与增加的周期数

http://en.wikipedia.org/wiki/Instructions_per_cycle

http://en.wikipedia.org/wiki/时钟周期


1
>为什么有些指令需要更少的周期? RISC / CISC(嗯,有点)。 为什么不能将需要较少周期的6502指令与8086的快速循环处理器结合在一起? 他们可以拥有。问题在于,一旦建立了基础,就很难放弃所有内容并从头开始创建下一个模型。
Synetech

@ Synetech,intel有点是通过向程序员展示CISC指令集,然后将其转换为芯片上的RISCier指令来实现的
soandos 2012年

好吧,当我说两者结合在一起时,我的意思是完全不同的芯片制造商。我手头没有清单,但是有其他人(非Intel / AMD)也做了类似的事情。(大多数人忘记了很多芯片制造商,因为英特尔和AMD现在主导着台式机市场。)
Synetech

Answers:


21

tl; dr

较短的流水线意味着更快的时钟速度,但可能会降低吞吐量。另外,请参阅底部的答案2和3(我保证它们很短)。

较长版本:

这里有几件事情要考虑:

  1. 并非所有指令都花相同的时间
  2. 并非所有指令都取决于立即执行的操作(甚至十个或二十个)

一个非常简化的流程(现代英特尔芯片中发生的事情非常复杂)具有以下几个阶段:

获取->解码->内存访问->执行->写回->程序计数器更新

每次->都会产生时间成本。此外,每个滴答声(一个时钟周期),所有内容都会从一个阶段移动到下一个阶段,因此,最慢的阶段将成为所有阶段的速度(实际上,它们的长度要尽可能长才行)。

假设您有5条指令,并且想要执行它们(图片摘自Wikipedia,此处PC更新尚未完成)。它看起来像这样:

在此处输入图片说明

即使每条指令需要5个时钟周期来完成,一条完成的指令也会在每个周期中从管道中出来。如果每级花费的时间是40 ns,中间位花费的时间是15 ns(使用上面的我的六级流水线),则需要40 * 6 + 5 * 15 = 315 ns才能得到第一条指令。

相反,如果我要完全消除流水线(但保持其他所有条件不变),则仅用240 ns即可得出第一条指令。(这种获取“第一条”指令的速度差异称为等待时间。通常它不如吞吐量(每秒的指令数量)重要。

但是,真正的不同是,在流水线示例中,每60 ns我会执行一次新的指令(在第一个指令之后)。在非流水线中,每次花费240。这表明管道擅长提高吞吐量。

更进一步,似乎在内存访问阶段,我将需要一个加法单元(进行地址计算)。这意味着,如果有一条指令不使用该循环的mem阶段,那么我可以再做一次添加。因此,我可以在一个滴答声中在一个处理器上完成两个执行阶段(其中一个处于内存访问阶段)(调度是一场噩梦,但我们不要去那里了。此外,PC更新阶段还需要在其中添加一个单元) (如果是跳跃的话,那么我可以在一跳内执行三个加法执行状态)。通过具有管道,可以将其设计为使得两个(或更多)指令可以使用不同的阶段(或jumpfog阶段等),从而节省了宝贵的时间。

请注意,为了做到这一点,处理器会做很多“魔术”(乱序执行分支预测等等),但这允许多条指令的发布比没有管道的情况更快(请注意,管道也是如此)长期管理非常困难,仅在阶段之间等待就需要支付更高的费用)。不利的一面是,如果使流水线过长,则会获得疯狂的时钟速度,但会失去许多原始的好处(拥有可以在多个地方同时使用的相同类型的逻辑,并且可以同时使用) )。

答案2:

SIMD(单指令多数据)处理器(与大多数GPU一样)在许多信息位上进行了大量工作,但是它们花费的时间更长。读取所有值需要更长的时间(这意味着时钟会变慢,尽管这在一定程度上具有更宽的总线可以抵消),但是您一次可以完成更多的指令(​​每个周期更有效的指令)。

答案3:

因为您可以“欺骗”人为地延长周期数,因此每个周期可以执行两条指令(只需将时钟速度减半)。也可以每两个滴答滴答地做一次而不是一个滴答滴答(给出2倍的时钟速度,但是每秒不改变指令)。


3
较短的流水线意味着较慢的时钟速度!由于流水线较长,Pentium 4的时钟较高,这是WP:“ NetBurst与P6(Pentium III,II等)不同,它具有非常深的指令流水线以实现很高的时钟速度”。关键是您在每个阶段为达到高速而付出的努力很少。但是,这证明是行不通的,因此,英特尔向AMD失去了巨大的动力。他们回到了奔腾3架构,并提出了“ Core”。
stolsvik

@stolsvik,您能解释一下吗?这对我来说没有任何意义(插页式阶段越少,意味着其他条件都相等,时钟周期将越短,时钟速度就会越高)
soandos 2012年

4
每个时钟周期完成一个流水线阶段;整个流水线每个时钟前进一个步骤-在底部获取新指令,在顶部“发出”完成的指令。因此,Pentium4的想法是执行非常小的步骤,这些步骤可以快速执行,并提供高时钟,但是需要较长的流水线。管道的线索(所有处理器都使用一个管道)是,您随时可以在处理多个指令。较长的流水线意味着许多指令正在进行中-如果分支预测失败,则必须刷新整个管道。
stolsvik

对于您的答案2,CPU仅通过高速缓存访​​问数据(从指令的角度来看,内存访问通常是透明的)。降低时钟频率不会影响数据需要多长时间从RAM发出(如果不在缓存中)。另外,总线宽度仅会影响SIMD操作的速度,具体取决于您的操作数的大小(即,我可以一次在64位总线上加载8个8位操作数,但我仍然必须手动加载8个64位值如果我有64位操作数)。
突破

2
同样对于答案1,当您说“如果有一条指令不使用该循环的mem阶段,那么我可以再做一次加法运算”,这是错误的。乱序执行应用于指令级别,而不是微操作级别。如果一条指令确实需要在管道中执行两次,则将在管道中引起气泡。最后,x86体系结构具有一个单独的ALU,可以在内存读取/写入过程中即时计算内存地址(允许[EBX+ECX*4+100]样式寻址)。
突破

8

我大大简化了这一点,但要记住的重要一点是,这些术语是将苹果与桔子进行比较。“周期”不是在所有处理器上都相同的单个统一的度量单位,就像“秒”是时间的统一度量。取而代之的是,一个循环代表某个工作单元,该工作单元是任意定义的,但受管道设计的复杂性(当然也受物理作用)的限制。

在许多情况下,一个周期内进行大量工作可以使您清除整个管道。如果成功,则意味着您的下一个周期将不会得到优化,因为您必须再次填充管道,这可能需要一些时间。

我可以设计一个非常简单的处理器,每个周期处理一个RISC指令的一个阶段,如果这是我的CPU的基础,则由于“周期”。

这些细节进入了很多我不真正理解的物理和电气工程,但是请记住,仅仅通过天真地向处理器添加输入电压并希望达到最佳效果就无法实现时钟速率。至少,热分布是另一个必须考虑的问题。


这并不能真正回答他的问题(这与为什么不能加速事情无关)。他想知道更多的周期!=一直在做更多的工作
soandos

但是,该答案确实解决了我在其他答案中没有看到的一个问题,那就是它包含了一些特定的指令集,这些指令集可以在较少的时钟周期内完成操作,并且能够根据可能会出现的最慢的指令集来测量时钟周期效率不高。(尽管我可能错了……我发现建筑引人入胜,但无论如何我都不认为自己是专家)
Stephen R

5

这是一个非常简单的解释(可能过于简化):假设您有一项特定的工作要做,比如说添加两个32位数字。您可以采取两种方法。您可以将其拆分为大量的非常小的步骤,也可以将其拆分为少量的非常大的步骤。

例如,您可以说“将两个数字相加”。现在您只有一步。但是,这一步骤包含多个部分,需要花费更长的时间。因此,每个周期的指令量很高-在这种情况下为一个。但是您的时钟速度不能太高,因为在该周期中您有很多事情要做。

您也可以说:“将第一个数字取入寄存器。然后取第二个数字。然后将最低有效位加起来。然后将第二个最低有效位与前面的进位相加。然后将第三个最低有效位...然后添加最高有效位。如果有进位,则设置溢出标志。然后将结果写入存储器。” 现在您有很多步骤。但是每一步都可能非常快。因此,每个周期的指令量很低(在这种情况下约为1/36)。但是您的时钟速度可能很高,因为每个周期只需要做很少的事情。

为了使每个周期都具有较高的指令速度和较高的时钟速度,您必须将复杂的指令划分为非常少量的非常简单的步骤。但这不能完成,因为指令很复杂。

实际的具体权衡和周期数有很大的不同,因为现代CPU是流水线式的并且重叠指令。但是基本思想是正确的。


2

可以在每个周期获得高指令,也可以获得高时钟速度。当数字电路的传播延迟超过单个时钟周期的脉冲宽度时,就会遇到限制。可以通过增加CPU电压来克服此问题,但是应注意,这会增加功耗(并因此而散发热量)。

因此,如果您想要更快的时钟速度,则必须增加电压(增加电子漂移速度)以减少传播延迟。如果此延迟确实超过了一个时钟周期,则CPU很可能无法按预期方式运行,并且在其上运行的软件将崩溃或引发异常。但是,显然可以通过处理器运行的电压存在限制,这是由CPU本身的设计所决定的-主要是内部电气通路的载流能力。


在某些情况下,流水线允许更高的时钟速度,因为每条指令被分成几个较小的“微操作”。这些微操作是非常简单的操作,使用的链状互连的电路要小得多(在物理意义上,电子需要行进的距离越短,通过特定子单元的传播延迟越短)。

流水线CPU的另一个优点是,您可以大大增加每单位时间执行的指令数量,但要以更复杂的设计为代价。

至于为什么某些指令需要更多或更少的周期,这取决于您正在执行的指令。例如,在x86指令集中,有一条MOVS指令可以将内存中的整个字符串从一个位置移动到另一个位置。显然,您不能立即复制一个长字符串,但是可以逐个单词地复制它,需要多个时钟周期。因此,该MOVS指令花费可变的时间量(取决于要复制的字符量)。

CISC设计(例如x86)相比,RISC设计(即ARM)对多周期操作的影响不太明显。这是因为基于RISC的设计将仅具有最常用的基本操作,并且以实现每个周期一条指令的吞吐量的方式更容易流水线化。


1

您的计算机完成特定任务所花费的时间不取决于计算机的时钟速度,而是取决于计算单元的设计和工程方式。

时钟速度实际上是CPU设计人员(或多或少)的任意决定,有时是出于良好的原因(效率),有时是出于较差的原因(广告)。

假设给定的CPU具有混合的指令,需要1到100纳秒(ns)的时间来完成。您可以将时钟频率设置为1“ tick”为100 ns(10 MHz),这意味着每条指令都将在1 tick内完成。但是,如果指令执行时间是平均分配的,则意味着您的计算单元将在50%的时间内处于空闲状态(平均执行速度将为50ns,滴答的其他50ns则保持空闲状态)。另一方面,如果将滴答声设置为10ns,则指令的范围为1到10个滴答声,但是在下一条指令开始之前,该单元的空闲时间永远不会超过9ns,平均空闲时间为5ns。

在开发期间,将根据CPU实际能够执行的工作量来设计CPU以一定的速度运行。如果提高或降低时钟速度,实际上并没有改变CPU可以完成的工作量,只是搞混了它的效率比。

(在您对CPU超频大喊之前:这给您带来了两个优点,可以提高实际速度:快速执行的指令(少于1个周期)最终具有更快的执行时间,并且所有指令的空闲时间都更少。这些实际上可以增加计算机可以执行的工作量,但是您会发现对CPU超频X%并不总是等于基准测试完成后X%的工作增加。)

TL; DR

CPU可以在一秒钟内完成X项工作。如果使用H时钟速度和I IPC,则我们有I = X / H。更改H不会更改X,但是会反过来影响I。


1
时钟速度远非任意决定。需要根据CPU电源电压以及IC走线长度仔细选择它(以避免过度的传输延迟)。
突破

我认为您错过了CPU是同步数字电路的事实。指令不会占用X纳秒的时间(假设您的时钟周期小于传播延迟),一切都发生在时钟的上升沿或下降沿-或同时发生。指令需要X个周期,而不是 X个时间单位。是的,你可以修改如何一个周期,但这种区别时会发生什么。最后,CPU在一秒钟内可以完成的工作量是时钟速度的函数,因此您的公式并没有真正在这里检查出来。
cp2141

CPU是几个异步单元的同步合并。时钟滴答用于将所有内容排列整齐,但它们不能确定执行所需的时间...例如,整数加法将基于电流必须流过CPU的距离和晶体管的速度而花费一定的时间。将切换状态。结果在下一个时钟滴答时为READ,但实际的计算在整个滴答时都是异步进行的。
本杰明·钱伯斯

0

因为要求是矛盾的,所以每个周期不能同时具有高指令和高时钟速度。

可以看出,IPC大致取决于设计的复杂度(A),因为

IPC =平方根(A)

而设计可达到的最大频率(F)为[1]

F = 1 / {b + c sqrt(A)}

带有a,b和c参数。

因此,增加muarch的复杂度会增加IPC,但会降低工作频率,而降低复杂度会增加频率,但会降低IPC。这与Wikipedia文章中提到的两个极端情况相对应,但是Wikipedia没有提及名称:Brainiac和speed-demon。

  • 脑部设计:高IPC和低频
  • 速度监控程序设计:高频和低IPC。

[1]有些作者声称频率的表达式改为“ 1 / {b + c A}”,但是在两种情况下,增加复杂度都会降低可达到的最大频率。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.