什么是“每个周期的指令”?


23

我已经学到了更多有关处理器如何工作的知识,但是我还没有找到关于每个周期指令的直接答案。

例如,我给人的印象是,一个四核CPU可以每个周期执行四条指令,因此,以2Ghz运行的四核CPU每秒可以执行80亿次操作。是这样吗

我敢肯定,这过于简单化了,但是如果有指导或其他我可以用来使自己站起来的东西,那么我肯定会敞开心ideas。


不,不是这样。现代x86 CPU在理想条件下每个内核每个周期可支持三条指令,而某些指令可能需要数十个周期。
大卫·史瓦兹

Answers:


22

您可能应该查找的关键字是CISCRISC超标量体系结构

中钢国际

在CISC架构(x86、68000,VAX)中,一条指令功能强大,但是处理需要多个周期。在较旧的体系结构中,周期数是固定的,如今,每条指令的周期数通常取决于各种因素(高速缓存命中/未命中,分支预测等)。有表格可以查找这些东西。通常,还可以方便地实际测量某条指令在某些情况下需要花费多少个周期(请参阅性能计数器)。

如果您对Intel的详细信息感兴趣,请阅读《Intel 64和IA-32优化参考手册》

RISC

RISC(ARM,PowerPC,SPARC)体系结构通常意味着一条非常简单的指令仅需要几个(通常只有一个)周期。

超标量

但是无论CISC还是RISC,都有超标量体系结构。CPU不会连续处理一条指令,而是同时处理许多指令,这很像一条装配线。

结果是:如果仅查找程序的每个指令的周期,然后将它们全部加起来,那么最终将以数字方式变高。假设您有一个单核RISC CPU。处理一条指令的时间永远不能少于一个周期的时间,但是每个周期的总吞吐量可能是几条指令。


9
对我而言,“组装线”类比表明仅是简单的流水线操作,而不是超标量体系结构。超标量涉及复制CPU硬件的某些部分(例如,成为瓶颈的流水线阶段)以提高吞吐量。
sblair

2
为了简洁起见,我添加:RISC =精简指令集;CISC =复杂指令集。很好的解释,Ludwig指出了缓存命中率/未命中率,并(最终)指出了TLB。解释微处理器架构并不容易,尤其是将它们全部塞进一个(相当紧凑的)帖子中!:)
osij2is

1
据我了解,这些天CPU花了大量时间等待工作从主内存中显示出来。至少那是我问为什么在CPU中没有更多执行内核时得到的响应。
surfasb 2011年

32

我喜欢用洗衣类比来思考。CPU指令就像洗衣物一样。您需要为每个负载同时使用洗衣机和烘干机。假设每个程序需要30分钟才能运行。那是时钟周期。旧的CPU会先运行洗衣机,然后再运行干衣机,每次需要60分钟(2个周期)来完成每次洗衣。

流水线: 流水线是指您同时使用这两种管道–先洗涤一个负载,然后在干燥时再洗涤下一个负载。第一次加载需要2个周期才能完成,但是第二个加载又需要1个周期。因此,除了第一个负载,大多数负载只需要1个周期。

超标量:将 所有衣物送到洗衣店。获得2个垫圈,并将它们都装入。完成后,找到2个干衣机并同时使用它们。现在,您可以在60分钟内清洗和干燥2个负载。即2个周期内有2个负载。每个负载仍然需要2个周期,但是您现在可以执行更多操作。现在平均时间为每个周期1个负载。

带有流水线的超标量:先 洗涤前2个负载,然后在干燥时,再用后2个负载加载垫圈。现在,前两个负载仍然需要2个周期,然后在另外1个周期后完成接下来的2个负载。因此,大多数情况下,您每个周期要完成2次加载。

多芯:将一半的衣物交给妈妈,妈妈也有2个洗衣机和2个烘干机。你们俩一起工作,可以完成两倍的工作。这类似于超标量,但略有不同。她不必自己将所有衣物移入或移出每台机器,而是可以与您同时进行。

太好了,我们可以在相同的时间内完成比以前多八倍的洗衣,而不必制造更快的机器。(将时钟速度提高一倍:仅需15分钟即可运行的洗衣机。)

现在,让我们谈谈问题出在哪里:

管道气泡: 您的污渍在清洗过程中没有出现,因此您决定再次清洗。现在干衣机正坐在那里,等待着做某事。

高速缓存未命中:运送脏衣服的卡车一直拥堵。现在,您有2个洗衣机和2个干衣机,但由于必须等待,因此您无法完成任何工作。

根据出现问题的频率,每个周期我们将无法总是完成4个负载,因此实际完成的工作量可能会有所不同。

分支预测:好吧,您开始在干净的衣服上洗衣服,以防日后弄脏它们,这样它们就已经很干净了。


好比喻。我要偷了。
dmckee

6
超线程就像让几个人在同一家自助洗衣店里洗衣服一样。
罗纳德·帕托

1
分行预测:您将开始在下个星期需要洗衣服
Akash 2012年

2
超线程:您开始接受别人的洗衣,并宣传您拥有的洗衣机数量(1)。很快,您意识到洗衣机所容纳的空间比正在洗涤的那条裤子还多,而不仅仅是另一条裤子,而是更小的空间。因此,您也要塞一些袜子。现在,您投放广告宣传2台洗衣机,并希望人们能放下足够多的衣物,以便您始终用较小的物品“填补空缺”。当这个只穿10条脏牛仔裤和1条袜子的家伙丢下自己的东西时,它就像以前一样缓慢。
Florenz Kley 2012年

@Akash您洗还没有污渍的衣服,以防万一?
凯文·潘科

3

不完全是。您所指的周期是时钟周期,并且由于大多数现代处理器流水线,一条指令要执行需要几个时钟周期。(这是一件好事,因为它甚至允许在第一条指令执行之前就开始执行其他指令。)假设是最理想的情况,大概是80亿个IPC,但是各种情况都会发生,例如依赖项,管道中的气泡,分支等),因此不一定总能解决。

抱歉,直接回答太复杂了。乔恩·斯托克斯(Jon Stokes)在这篇文章中做了很好的解释。


2

对于高端芯片来说,人们可以查找(甚至记忆)每条指令的周期时间并知道完成某段代码将花费多少个时钟的日子已经很久了(但仍然存在于某些芯片中)微控制器)。现代的通用CPU内核可能在多个管道中具有多个不同执行单元的多个副本,并使用其自己的逻辑以及分支预测和推测性执行功能来访问多级内存缓存。在单个裸片上具有多个内核会拖累缓存一致性逻辑和其他复杂性。

所以简短的答案是:更多的内核意味着更多的能力来完成任务,但不是以一种可预测的好方法


1

Ludwig解释了CISC和RISC之间的区别,但是忘了提及,尽管RISC指令简单快捷,但它们很少单独执行,因此您必须将多个字符串串在一起才能像在CISC处理器中执行单个指令一样。结果,某些RISC指令会更快,而其他则不会。


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.