Wikipedia的第二页说明说,i7 3630QM在3.2 GHz的频率下可提供约110,000 MIPS。会是(110 / 3.2条指令)/ 4核=每核每个周期〜8.6条指令吗?一个内核如何在每个周期内交付多个指令?
据我了解,流水线每个时钟只能传送一个结果。
这些是我的想法:
- 内部频率实际上高于3.2 GHz
- CPU的某些部分是异步的,就像我这样谦虚的人无法理解
- 每个核心有多个并发管道
- 流水线可以提供比每个时钟更多的结果,指令可以跳过流水线阶段,并且有多个预取器可以跟上
- 我想念一些东西
Wikipedia的第二页说明说,i7 3630QM在3.2 GHz的频率下可提供约110,000 MIPS。会是(110 / 3.2条指令)/ 4核=每核每个周期〜8.6条指令吗?一个内核如何在每个周期内交付多个指令?
据我了解,流水线每个时钟只能传送一个结果。
这些是我的想法:
Answers:
首先,正如基兰(Keelan)的评论和Turbo J的答案所指出的那样,该度量是113,093 Dhrystone MIPS,而不是本机 MIPS。
i7 3630QM的常春藤微体系结构每个周期只能提交4个融合微指令,尽管每个周期可以执行6个微指令。(代码痕迹中融合的微指令的数量大约等于指令的数量;一些复杂的指令被解码为多个未融合的微指令,并且某些指令对可以融合为一个微指令,例如,立即比较然后有条件的跳转。)
关于如何在单个周期内执行多条指令的两种推测非常有效,并且已在实际处理器中使用。您最初的猜测是,使用了更快的内部时钟,这是在原始Pentium 4的“火球” ALU中使用的。这些ALU的时钟频率是内核其余部分的两倍,而后者已经相当高。
(这是通过使用交错的ALU完成的,其中加法运算的下半部分在一个周期内完成,允许从属运算在下一个循环中使用结果的下半部。对于加法,异或运算或左移运算仅需要操作数的下半部分来产生结果的下半部分,这种交错操作(也称为宽度流水线操作)允许单周期结果延迟以及单周期吞吐量。)
HyperSPARC使用了一种有点相关的技术,即级联ALU。HyperSPARC将两个ALU的结果馈入第三个ALU。这允许在一个周期内执行两个独立的操作和第三个独立的操作。
您猜测“每个内核有多个并发管道”是已使用的另一种技术。这种设计称为超标量,是迄今为止增加单个循环中执行的操作数的最常用方法。
可能还有其他一些指令执行的零散目标。可以在普通执行单元之外更有效地执行某些操作。移动消除技术利用乱序处理器中的寄存器重命名来在寄存器重命名过程中执行移动操作。此举只是将物理寄存器号从重命名表(称为寄存器别名表)的一个位置复制到另一位置。这不仅有效地增加了执行宽度,而且还消除了依赖性。这项技术在基于堆栈的x87上很早就使用过,但是现在广泛用于Intel的高性能x86处理器中。(与典型的RISC相比,在x86中使用破坏性的双操作数指令使消除操作更有帮助。)
类似于移动消除的技术是重命名过程中寄存器清零指令的处理。通过提供一个提供零值的寄存器名称,寄存器清除指令(如xor或减法,两个操作数都在同一寄存器中)可以简单地将该名称插入重命名表(RAT)中。
一些x86处理器使用的另一种技术降低了推送和弹出操作的成本。通常,使用堆栈指针的指令必须等待一个完整的周期才能进行上一次压入或弹出操作,以更新堆栈指针的值。通过认识到推入和弹出仅向堆栈指针添加或减去一个小值,可以并行计算多个加法/减法的结果。加法的主要延迟是进位传播,但是值较小时,基值的更高有效位(在这种情况下为堆栈指针)最多只能有一个进位。这允许类似于进位选择加法器的优化被应用于小值的多次加法。另外,由于堆栈指针通常仅由常量更新,
也可以将指令合并为单个更复杂的操作。尽管将指令拆分为多个更简单的操作的逆过程是一种旧技术,但合并指令(Intel称其为宏运算融合)可以使实现支持比指令集中公开的操作更复杂的操作。
从理论上讲,已经提出了其他技术。RAT中可以支持零以外的其他小常数,并且可以尽早处理一些使用或可靠地产生此类小值的简单操作。(“物理寄存器内联”,Mikko H. Lipasti等人,2004年,建议使用RAT作为减少寄存器数量的一种方法,但是该思想可以扩展为支持加载小立即数和对小数进行简单操作。)
对于跟踪高速缓存(在控制流的特定假设下存储指令序列),可能有机会合并由分支分隔的操作,并删除在跟踪中产生未使用结果的操作。在跟踪高速缓存中对优化进行高速缓存还可以鼓励执行诸如指令合并之类的优化,如果每次获取指令流时都必须执行这些优化,那么这些优化可能就不值得了。
值预测可用于通过删除依赖项来增加可以并行执行的操作数。基于跨步的值预测器类似于前面提到的专用堆栈引擎的弹出/推入优化。它几乎可以并行计算多个加法,而无需序列化。值预测的一般思想是,有了预测值,相关操作就可以毫无延迟地进行。(分支方向和目标预测实际上只是值预测的一种非常有限的形式,允许提取以下指令,这些指令取决于分支的“值”(是否采用)以及下一条指令地址,即另一个值。)
现代处理器内部发生了一些不可思议的魔术,但是您的想法绝对正确。
了解现代处理器效率的关键是意识到它们是超标量的。从维基百科(重点是我的):
超标量CPU体系结构在单个处理器中实现了一种称为指令级并行性的并行性形式。因此,与给定时钟速率下的CPU吞吐量相比,它可以提供更快的CPU吞吐量。
如您所料,这些现代处理器的每个内核具有多个执行单元。 超线程是一个有趣的考虑因素,流水线的某些部分是重复的,但有些则不是。
乱序执行也很有趣,但并不能直接回答您的问题。但是,它确实减少了“浪费”的CPU周期数。
效率还受到许多其他因素的影响,这些因素可能导致处理器内部停顿,包括(但绝对不限于):
现代的编译器试图帮助解决上述许多问题,然后由处理器接管。举一个很好的例子,在Stackexchange的其他地方可以看到这个问题,该问题突出了两个可以做相同事情的指令之间的重要区别(在某些情况下)。但是,由于使用了执行单元,因此在某些处理器上,一个可能比另一个更“快速”。
有关现代CPU管道的易于理解的解释,请参阅《 CPU管道之旅》。有关更多技术说明,请参阅Agner Fog的Microarchitecture文件。
您认为发生了什么事:英特尔,AMD和IBM的所有工程师都读到,一条流水线只能在每个周期内提供一个结果,他们说:“哦,就是这样,不能再使这些处理器变快了”。还是他们读了这句话说:“每个周期不能提供一个以上的结果?我们会看看的!”。
例如,要获得有关Haswell架构的良好介绍,您可以单击以下链接http://www.realworldtech.com/haswell-cpu/,或者直接访问Intel网站,并在那里找到一些文档。
Haswell处理器的每个核心都有大量执行单元,它们可以彼此独立地执行操作,因此可以并行执行多个操作。接下来,Haswell处理器具有多个执行单元,可处理最大为256位的向量运算。向量运算可以例如在一个向量运算中执行四个双精度浮点运算或八个单精度浮点运算。最后,Haswell处理器支持“融合乘法加法”,这意味着计算时间b加c只是一个操作。
由于Haswell具有两个能够进行融合乘法加法运算的单位,因此理论上的最大值是每个周期两个融合乘法加法运算,每个运算执行8个单精度乘法加法或32个单精度浮点运算。
3630处理器不在Intel最新价格表中,但有些型号具有3740QM(具有四个内核)。因此,每个时钟周期可以获得32个浮点运算,而不是32个。这是理论上的最大值。在现实生活中实现一半的挑战是一个挑战,但对于合适的任务并非不可能。还有其他可用的处理器,最多具有15个内核(即使最狂热的游戏狂热者也不会支付的价格)。
因此,您有几个乘数的组合:
每个周期8.6个操作并不是很难实现。每个内核每个周期甚至8.6次操作也不太困难。
ADD基于溢出是不受影响还是应该在溢出发生时设置(如果没有发生则设置)的不同版本的指令。
                    我从Ars Technica的Jon“ Hannibal” Stokes中学到了很多关于微处理器体系结构的优秀文章。文章有些过时(它们似乎来自2004年左右),但仍然非常相关。
文章m-下半部分的某些链接已断开,但是您似乎可以通过仔细比较第一部分的URL和下一页的断开URL(例如,在URL中添加somwehere)自行修复它们。
(是的,这是一个仅链接的美化回答,对不起;文章太好了,更不用说了)