![处理器如何能执行比其频率更多的 IPS?](https://linux22.com/image/1457506/%E5%A4%84%E7%90%86%E5%99%A8%E5%A6%82%E4%BD%95%E8%83%BD%E6%89%A7%E8%A1%8C%E6%AF%94%E5%85%B6%E9%A2%91%E7%8E%87%E6%9B%B4%E5%A4%9A%E7%9A%84%20IPS%EF%BC%9F.png)
答案1
这是由于现代处理器的多种特性的结合。
IPS 较高的第一个原因是现代处理器具有多个可独立运行的执行单元。下图(借自维基百科:英特尔酷睿微架构) 您可以在底部看到有 8 个执行单元(以黄色显示),它们可以同时执行指令。并非所有这些单元都可以保护相同类型的指令,但其中至少有 5 个可以执行 ALU 操作,并且有三个支持 SSE 的单元。
结合长指令流水线它可以高效地堆叠指令,以供这些单元执行指令(失灵(如果需要的话)意味着现代处理器可以在任何给定时间动态执行大量指令。
每条指令可能需要几个时钟周期才能执行,但如果您可以有效地并行化它们的执行,那么您就可以以处理器复杂性和热输出为代价大幅提升 IPS。
要让这些大型管道充满指令,还需要一个可以预先填充指令和数据的大型缓存。这会增加芯片的尺寸,也会增加处理器产生的热量。
小型处理器之所以不这样做,是因为它大大增加了处理核心周围所需的控制逻辑量,以及所需的空间量和产生的热量。如果您想要一个小型、低功耗、高响应度的处理器,那么您需要一个短管道,而实际功能核心周围没有太多“额外”的东西。因此,它们通常会最小化缓存,将其限制为处理指令所需的每种类型的单元中只有一个,并降低每个部分的复杂性。
他们可以使小型处理器与大型处理器一样复杂,并实现类似的性能,但功耗和冷却要求将成倍增加。
答案2
这不难想象。一个周期就足以切换数千个晶体管。只要指令并行排列,一个周期就足以执行所有指令。
比亲自解释要好得多,这是一个很好的起点。
答案3
比 Mokubai 的答案更基本一点:
超标量 CPU 分析指令流,了解指令之间的数据(和其他)依赖关系。互不依赖的指令可以并行运行。
典型的 x86 台式机 CPU 每个时钟周期获取 16 或 32B 条指令。英特尔设计自 Core2 以来,每个周期最多可以发出 4 条指令。(或者 5 条,如果有可以宏融合的比较和分支)。
请参阅 Mobukai 的精彩回答,获取有关 CPU 在实践中如何从其运行的代码中提取尽可能多的指令级并行性的任务的链接和详细信息。
另请参阅http://www.realworldtech.com/sandy-bridge/以及其他 CPU 架构的类似文章,以深入了解其内部原理。
答案4
先前的答案显示了如何通过处理器对“指令”的定义来执行更多指令,人们想象这实际上是提问者的意图。
但另一个原因可能是,每条“指令”实际上都是处理器视为指令输入的一定量的数据。如果他的源计数仅计算处理器视为指令的内容,则以下内容没有任何意义。但如果他的源计算人类称之为“指令”的所有内容,那么:添加并非每条指令在物理上都与其他指令一样长(一条可能是 12 个字节,另一条可能是 56 个字节,等等)。因此,如果它每个周期将 64 个字节的材料加载为“一条指令”(或在达到 64 个字节之前加载尽可能多的完整指令),并且一个人在 64 个字节中有六条指令,那么六条指令(正如你和我可能认为的那样)将在该周期内完成。
由于许多非常基本的指令(我们的“合理”定义)是早期遗留下来的,具有 8 字节指令长度,并且根据定义,非常基本的指令可能被不成比例地使用,因此这将大大有助于执行比频率似乎允许的更多的“指令”。