我似乎无法理解这一点,超标量和多核处理器有什么区别?
我一直把它们混在一起,所以关于它们所做的一些简单的点会很棒。
我似乎无法理解这一点,超标量和多核处理器有什么区别?
我一直把它们混在一起,所以关于它们所做的一些简单的点会很棒。
超标量处理器意味着您在单个时钟周期内调度多条指令。这与多核不同的原因是您只能获得一个指令计数器。因此,您可以跟踪执行中的多条指令,但所有指令都来自一个程序。这仍然只是一个过程。现在我说“你得到一个指令计数器”,从技术上讲,这是正确的,因为除了使用一些分支预测方案(推测执行:您同时执行两个分支并丢弃“错误”预测的结果)。
当您进入多核时,您会同时执行多个指令流。重要的部分是每个核心(使用自己的指令计数器执行)也可以是超标量,以便更快地执行每个单独的进程!
通过拥有所谓的非常长的指令字或“VLIW”,可以在没有流水线或乱序执行的情况下拥有超标量。这也称为“静态”超标量(即它在代码本身中)。这是你基本上有足够的组件来同时执行多条指令的地方,你一次获取多条指令然后运行它们。以最简单的形式,假设您说“此处理器将始终同时获取并执行两条指令”。那么只要编码人员可以在同一进程中找到要同时完成的工作,您的吞吐量就会翻倍!如果您找不到两条指令放在一起,您只需将一条指令和一条 NOP 配对即可。这个想法不是很好,主要是因为如果你制作一个可以同时执行 3、4 或更多指令的更好版本的处理器,你所有的旧代码都会中断!但是他们以一种非常巧妙的方式解决了这个问题,如果您想了解更多信息,您应该查看明确的并行指令计算或“EPIC”内容。
带有流水线的动态超标量可以利用数据独立指令以及指令级并行性,这就是它如此强大的组合的原因。从本质上讲,它允许您使用足够的硬件同时执行尽可能多的独立指令。
具有流水线和乱序执行的动态超标量本质上是指令级并行性的限制:您将尝试在同一阶段同时执行多条指令,试图找到在没有数据依赖性的情况下运行的操作。你可能会乱序完成,你会开始乱序,在做超标量的事情时,你需要做各种各样的事情来保持头脑清醒。多核说“嘿程序员!给我多个问题,我可以同时解决!” 然后由于程序员能够在编译后的程序集中看到几行之外的独立可解决问题,他们可以更有效地为多核编程这些解决方案。
超标量甚至无法解决诸如“我如何更快地执行这两个程序”之类的问题。它只能更快地执行每个独立的程序。
希望对您有所帮助,如果有点脱节,请见谅。
- 编辑 -
修改以考虑到 ajs410 的观点,即我混淆了多个想法。
如果您回顾早期的处理器,例如 80486 或 Pentium,那么 CPU 就是一个单一的逻辑处理单元。它一次执行一个指令流。单个 CPU 也是单个硅芯片。如果您想要更多的处理能力,那么您可能会购买昂贵的服务器主板,该主板具有可安装两个独立 CPU 的插槽。然后你有一个两个 CPU 机器和两个处理核心。
在某些时候,摩尔定律意味着我们在硅片中有如此多的晶体管可用,以至于您可以将两个 CPU 的所有电路放在一个芯片中。现在你有命名混淆的可能性。说你有两个 CPU 可能意味着你有老式的两个硅封装或更新的单硅封装,但有两个处理器的处理设置。为了解决这个问题,我们现在将 CPU 定义为单个硅封装,而内核是其中的单个逻辑处理单元。
超标量是指在内核中使用的一种技术,用于尝试提高性能并允许其平均每个周期处理更多指令。标量处理器每个周期最多执行一条指令,超标量意味着它每个周期可能执行多条指令。例如,如果处理器有一个用于整数运算的功能单元和另一个用于浮点的功能单元,那么为什么不同时使用这两个功能单元来同时执行两条指令。如果你有三个整数单位和两个浮点单位怎么办?现在,您拥有更大的并行执行潜力。但是您还需要更多的晶体管来实现,并且需要更复杂的逻辑才能使其可靠地工作。在现实世界中,您倾向于将超标量与乱序设计结合使用,因为它们相互补充。