为什么新一代处理器以相同的时钟速度更快?


38

例如,为什么2.66 GHz双核Core i5会比2.66 GHz Core 2 Duo(也是双核)更快?

是否因为更新的指令可以在更少的时钟周期内处理信息?还涉及其他哪些体系结构更改?

这个问题经常出现,答案通常是相同的。这篇文章旨在为这个问题提供一个确定的,规范的答案。随时编辑答案以添加其他详细信息。



哇,突破和大卫都是不错的答案...我不知道该选哪一个
才对

更好的指令集和更多的寄存器。例如MMX(现在已经很旧了)和x86_64(当AMD发明x86_64时,它们在64位模式下增加了一些兼容性突破性改进。他们意识到可比性仍然会被破坏)。
ctrl-alt-delor

为了对x86体系结构进行真正的重大改进,需要一个新的指令集,但是如果这样做,那么它将不再是x86。它可能是PowerPC,mips,Alpha或ARM。
ctrl-alt-delor

Answers:


30

通常不是因为更新了指令。仅仅是因为处理器需要更少的指令周期来执行相同的指令。原因可能有很多:

  1. 大容量缓存意味着更少的时间浪费在等待内存上。

  2. 更多的执行单元意味着更少的时间等待开始对一条指令进行操作。

  3. 更好的分支预测意味着更少的时间浪费在推测性地执行从未真正需要执行的指令上。

  4. 执行单元的改进意味着更少的时间等待指令完成。

  5. 较短的管线意味着管线填满更快。

等等。


我相信Core架构具有14-15级的流水线(ref),而Nehalem / Sandy Bridge大约具有14-17级的流水线(ref)。
2013年

较短的管道更容易保持满满,并减少了管道冲洗的损失。更长的流水线通常允许更高的时钟速度。
David Schwartz 2013年

这就是我的意思,我认为管道深度本身保持不变或已经增加。同样在《Intel 64和IA-32 SW开发手册》中,对流水线更改的最后提及是在Vol.1中。1章 2.2.3 / 2.2.4(Intel Core / Atom微体系结构)。
2013年

2
提高时钟速度的努力导致了更长的流水线。到NetBurst时代快结束时,这太荒谬了(多达31个阶段!)。如今,这是一个微妙的工程决策,兼顾了两种方法的优缺点。
David Schwartz

还改进了分支预测,改进了指令排序/优化/多工器单元,小型化(降低了热量)和芯片设计(改进了单芯片路径/电路等),...
Shaun Wilson

40

设计处理器以提供高性能远远不只是增加时钟速率。还有许多其他提高性能的方法,这些方法可以通过摩尔定律实现,并有助于现代处理器的设计。

时钟频率不能无限增加。

  • 乍一看,似乎处理器只是简单地一个接一个地执行指令流,而通过更高的时钟速率可以获得更高的性能。但是,仅增加时钟速率是不够的。功耗和热量输出随时钟速率的增加而增加。

  • 由于时钟速率非常高,因此有必要大幅提高CPU内核电压。由于TDP与V 的平方成正比,因此最终我们达到了这样的地步,即功耗,热量输出和冷却要求过多,从而无法进一步提高时钟速率。在Pentium 4 Prescott时代,这一极限在2004年达到。尽管最近在功率效率方面的改进有所帮助,但时钟速率的大幅提高不再可行。请参阅:为什么CPU制造商停止增加其处理器的时钟速度?

多年来,发烧级个人电脑的股票时钟速度图。
多年来,发烧级个人电脑的股票时钟速度图。图片来源

  • 根据摩尔定律,一项观察结果指出,集成电路上的晶体管数量每18到24个月就会增加一倍,这主要是由于芯片尺寸的缩小所致,因此已经实现了多种提高性能的技术。这些年来,这些技术已经得到完善和完善,可以在给定的时间内执行更多的指令。这些技术将在下面讨论。

似乎顺序指令流通常可以并行化。

  • 尽管程序可能仅由一系列指令组成,以一个接一个地执行,但这些指令或其部分经常可以同时执行。这称为指令级并行性(ILP)。利用ILP对获得高性能至关重要,现代处理器使用多种技术来实现这一点。

流水线将指令分成较小的部分,这些部分可以并行执行。

  • 每个指令可以分解为一系列步骤,每个步骤都由处理器的单独部分执行。指令流水线操作允许多个指令一个接一个地执行这些步骤,而不必等待每个指令完全完成。流水线化可提高时钟速率:通过在每个时钟周期中完成每一条指令的一步,与如果必须一次完成一条完整指令相比,每个周期所需的时间更少。

  • 经典的RISC流水线包含五个阶段:取指令,指令译码,指令执行,内存访问,和回写。现代处理器将执行分解为更多的步骤,从而产生了具有更多阶段的更深层次的流水线(并且随着每个阶段的变小和完成时间的减少,可达到的时钟速率也会提高),但是该模型应该提供对流水线工作原理的基本了解。

五阶段指令流水线图
图片来源

但是,流水线会带来危害,必须解决这些危害才能确保正确执行程序。

  • 由于每个指令的不同部分正在同时执行,因此可能会发生冲突,从而干扰正确的执行。这些被称为危害。危险分为三种:数据,结构和控制。

  • 当指令同时或以错误的顺序读取和修改相同的数据时,会发生数据危害,从而可能导致错误的结果。当多个指令需要同时使用处理器的特定部分时,会发生结构性危害。遇到条件转移指令时会发生控制危险

  • 这些危害可以通过多种方式解决。最简单的解决方案是简单地暂停流水线,暂时搁置流水线中的一条或一条指令的执行以确保正确的结果。尽可能避免这种情况,因为它会降低性能。对于数据危险,使用诸如操作数转发之类的技术来减少停顿。控制危险通过分支预测处理,需要特殊处理,下一节将进行介绍。

分支预测用于解决可能破坏整个管道的控制危害。

  • 遇到条件分支时发生的控制危害特别严重。分支基于特定条件是对还是错,引入了执行将继续在程序中其他位置而不是仅在指令流中继续执行下一条指令的可能性。

  • 由于在评估分支条件之前无法确定要执行的下一条指令,因此如果没有分支,则无法在分支之后将任何指令插入到管道中。因此,将管道清空(清空),这可能浪费几乎与管道中各个阶段一样多的时钟周期。分支往往在程序中经常发生,因此控制危险会严重影响处理器性能。

  • 分支预测通过猜测是否将采用分支来解决此问题。做到这一点的最简单方法是简单地假设分支总是被采用或从未被采用。但是,现代处理器使用更为复杂的技术来获得更高的预测精度。本质上,处理器会跟踪先前的分支,并以多种方式使用此信息来预测要执行的下一条指令。然后可以根据预测从正确的位置向管道提供指令。

  • 当然,如果预测错误,则必须删除分支之后通过管道放置的所有指令,从而刷新管道。结果,随着管线越来越长,分支预测器的准确性变得越来越关键。具体的分支预测技术超出了此答案的范围。

高速缓存用于加速内存访问。

  • 现代处理器执行指令和处理数据的速度远快于它们在主存储器中的访问速度。当处理器必须访问RAM时,执行可能会停滞很长时间,直到数据可用为止。为了减轻这种影响,处理器中包括称为高速缓存的小型高速存储区。

  • 由于处理器芯片上可用的空间有限,因此缓存的大小非常有限。为了充分利用这种有限的容量,缓存仅存储最近或最常访问的数据(时间局部性)。由于内存访问倾向于聚集在特定区域(空间局部性)内,因此最近访问的数据附近的数据块也存储在缓存中。请参阅:参考位置

  • 高速缓存还按大小不同的多个级别进行组织,以优化性能,因为较大的高速缓存往往比较小的高速缓存慢。例如,处理器可能具有大小仅为32 KB的1级(L1)高速缓存,而其3级(L3)高速缓存则可能是几兆字节。缓存的大小以及缓存的关联性会影响处理器如何管理完整缓存上的数据替换,从而极大影响通过缓存获得的性能提升。

无序执行通过允许首先执行独立指令来减少由于危险而导致的停顿。

  • 并非指令流中的每条指令都相互依赖。例如,尽管a + b = c必须在之前执行c + d = ea + b = c并且d + e = f是独立的并且可以同时执行。

  • 乱序执行利用了这一事实,允许在一条指令停顿时执行其他独立的指令。代替要求指令以锁步的方式逐个执行,而是添加了调度硬件以允许以任何顺序执行独立的指令。指令被分派到一个指令队列和颁发给时所需的数据变得可用的处理器的适当部分。这样,停留在等待来自较早指令的数据的指令不会阻塞独立的后续指令。

乱序执行图
图片来源

  • 执行乱序执行需要几个新的和扩展的数据结构。上述指令队列,即保留站,用于保存指令,直到执行所需的数据可用为止。在重新排序缓冲器(ROB)用于跟踪在建状态指示的,在他们接到命令,让指令以正确的顺序完成。甲寄存器文件,其延伸超出由架构需要用于本身提供的寄存器的数目的寄存器重命名,这有助于防止从变得依赖由于需要共享有限集合由该架构提供的寄存器否则独立的指令。

超标量体系结构允许指令流中的多个指令同时执行。

  • 上面讨论的技术只会提高指令流水线的性能。仅这些技术就不允许每个时钟周期完成一条以上的指令。但是,通常有可能在一条指令流中并行执行各个指令,例如当它们彼此不依赖时(如上文乱序执行部分所述)。

  • 超标量体系结构通过允许将指令一次发送到多个功能单元来利用这种指令级并行性。处理器可以具有特定类型的多个功能单元(例如整数ALU)和/或可以同时向其发送指令的不同类型的功能单元(例如浮点和整数单元)。

  • 在超标量处理器中,指令按照无序设计进行调度,但是现在有多个发布端口,可以同时发布和执行不同的指令。扩展的指令解码电路允许处理器在每个时钟周期一次读取多个指令并确定它们之间的关系。现代的高性能处理器每个时钟周期最多可以调度8条指令,具体取决于每个指令的功能。这就是处理器在每个时钟周期完成多条指令的方式。请参阅:AnandTech上的Haswell执行引擎

Haswell执行引擎图
图片来源

  • 但是,超标量架构很难设计和优化。检查指令之间的依赖关系需要非常复杂的逻辑,随着同时指令数量的增加,逻辑的大小可以成倍地增长。此外,根据应用程序的不同,每个指令流中只能同时执行有限数量的指令,因此,利用ILP更大优势的努力会导致收益递减。

添加了更高级的指令,可以在更短的时间内执行复杂的操作。

  • 随着晶体管预算的增加,有可能实施更高级的指令,从而使复杂的操作能够在原本需要的时间的一小部分内执行。例如,矢量指令集(例如SSEAVX)可同时对多条数据执行计算,而AES指令集可加速数据加密和解密。

  • 为了执行这些复杂的操作,现代处理器使用微操作(μops)。复杂指令被解码为μop序列,这些序列存储在专用缓冲​​区内,并计划单独执行(在数据依赖性所允许的范围内)。这为处理器提供了更多利用ILP的空间。为了进一步提高性能,可以使用特殊的μop缓存来存储最近解码的μop,以便可以快速查找最近执行的指令的μop。

  • 但是,添加这些说明不会自动提高性能。仅当编写应用程序以使用新指令时,它们才能提高性能。由于使用这些指令的应用程序无法在不支持它们的较旧处理器上运行,因此妨碍了采用这些指令。


那么这些技术如何随着时间的推移提高处理器性能?

  • 这些年来,流水线变得越来越长,减少了完成每个阶段所需的时间,因此可以提高时钟频率。但是,尤其是较长的流水线会增加分支预测错误的代价,因此流水线不能太长。为了达到很高的时钟速度,奔腾4处理器使用了非常长的流水线,在Prescott中最多使用31级。为了减少性能缺陷,即使指令可能失败,处理器也会尝试执行指令,并且将继续尝试直到指令成功为止。这导致非常高的功耗,并降低了从超线程获得的性能。较新的处理器不再使用流水线这么长时间了,尤其是由于时钟速率缩放已经到了极限。Haswell使用的管线长度在14到19级之间变化,而低功耗的架构则使用较短的管线(Intel Atom Silvermont有12到14级)。

  • 分支预测的准确性已通过更高级的体系结构得到了改善,从而减少了因错误预测导致的流水线刷新的频率,并允许更多指令同时执行。考虑到当今处理器中管线的长度,这对于保持高性能至关重要。

  • 随着晶体管预算的增加,可以在处理器中嵌入更大,更有效的缓存,从而减少了由于访问存储器而造成的停顿。在现代系统上,内存访问可能需要200多个周期才能完成,因此重要的是尽可能减少对主内存的访问。

  • 较新的处理器通过更高级的超标量执行逻辑和“更广泛”的设计(可以同时解码和执行更多指令),能够更好地利用ILP。所述的Haswell架构可以解码四条指令和每个时钟周期分派8分的微操作。晶体管预算的增加允许在处理器内核中包含更多的功能单元,例如整数ALU。乱序和超标量执行中使用的关键数据结构(如保留站,重排序缓冲区和寄存器文件)在较新的设计中得到了扩展,这使处理器可以搜索更大的指令窗口以利用其ILP。这是当今处理器性能提升的主要推动力。

  • 较新的处理器中包含更复杂的指令,并且越来越多的应用程序使用这些指令来提高性能。编译器技术的进步,包括指令选择自动矢量化的改进,使这些指令的使用更加有效。

  • 除了上述内容以外,以前在CPU外部的部件(例如北桥,内存控制器和PCIe通道)的更大集成度还减少了I / O和内存延迟。通过减少由于从其他设备访问数据的延迟而导致的停顿,从而提高了吞吐量。


6
这可能是一篇不错的博客文章。
Mokubai

给定功率壁,提高能效也是一个因素。
保罗·克莱顿

它不再是时钟的速度,而是每个时钟周期可以处理多少指令。如果处理器具有处理从内存到高速缓存的4倍数据的带宽,则即使时钟速度较慢,该处理器实际上也要快4倍。这就是为什么AMD难以与英特尔的产品性能
相提并论的原因

18

绝对的权威参考是《Intel 64和IA-32体系结构软件开发人员手册》。他们详细介绍了架构之间的变化,并且它们是了解x86架构的重要资源。

我建议您下载1至3C合并的卷(该页面上的第一个下载链接)。第1卷第2.2章提供了所需的信息。


从核心到Nehalem / Sandy Bridge微体系结构,我在本章中列出了一些一般差异:

  • 改进分支预测,更快地从错误预测中恢复
  • 超线程技术
  • 集成内存控制器,新的缓存级别
  • 更快的浮点异常处理(仅适用于Sandy Bridge)
  • LEA带宽改善(仅适用于Sandy Bridge)
  • AVX指令扩展(仅适用于Sandy Bridge)

完整的列表可以在上面提供的链接中找到(第1卷,第2.2章)。


0

前面所说的一切都是正确的,但一定程度上是正确的。我的回答很简短:新一代处理器之所以“更快”,主要是因为它们具有更大,更好的组织缓存。这是影响计算机性能的主要因素。有关更多定量方面的考虑,请参阅“ Linux杂志:驱动HPC性能的因素

简而言之,对于大多数常见的应用程序(如SPEC集合),限制因素是内存。当运行真正的持续计算时,所有高速缓存都加载了数据,但是每次高速缓存未命中都会导致CPU执行管道停止并等待。问题是,无论CPU管道多么复杂或指令质量更好,指令级并行性仍然非常有限(某些特殊的高度优化的预取情况除外)。一旦发现关键的依赖关系,所有的并行处理都将以五到十个CPU时钟结束,而驱逐一只caheline并从主内存中加载新的并行时钟则需要数百个CPU时钟。因此,处理器等待什么都不做。整个概念也适用于多核。

因此,如果您想要一台“更快”的PC,请购买具有最大缓存能力的CPU。


-1

因为它们改善了每个周期(时钟)的大量指令的处理能力,所以CPU可以通过包含更高的执行单元(计算单元)来执行此操作,因此增强了IPC,此外,它们还减少了缓存,内存,解码,获取延迟,从而提高了性能。乱序操作和分支预测,之后添加更多缓存,同时降低延迟。更高带宽的缓存。一次又一次添加新的说明。减少每条指令所需的周期(CPI)

时钟速度只是CPU性能的一部分,CPU是必不可少的组成部分,但不幸的是,在过去的十年左右的时间里,方法节点都碰到了墙,尽管水冷却质量很高,但任何事物都无法超过5.0-5.2Ghz ,而不求助于干冰或液氮。

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.