![超标量和并行之间的主要区别](https://linux22.com/image/1483147/%E8%B6%85%E6%A0%87%E9%87%8F%E5%92%8C%E5%B9%B6%E8%A1%8C%E4%B9%8B%E9%97%B4%E7%9A%84%E4%B8%BB%E8%A6%81%E5%8C%BA%E5%88%AB.png)
在超标量处理中,每个核心并行执行多条指令,那么这与并行处理有何不同?
谢谢。
答案1
超标量是指 CPU 或单核的架构的术语。
要执行一条指令,CPU 必须执行多个步骤,每个步骤由 CPU 的特定专用部分或“执行单元”处理。非超标量 CPU 从步骤 0 开始到步骤 X(X 可能因指令类型而异),并在开始下一条指令之前完成所有步骤。
例如,超标量 CPU 会尝试在前一条指令完成所有步骤之前,在步骤 0 处将新指令放入“流水线”。因此,由于 CPU 的执行单元始终在工作,因此 CPU 的利用率更高、速度更快(也更复杂)。
如果工作负载可以划分为多个单元,以便多个单元可以有效地处理该工作负载,则该工作负载可实现并行性。超标量架构尝试在单个核心/CPU 中并行执行单个指令流。
并行处理在概念上类似,但我们不再讨论 CPU 的指令流,而是讨论需要处理的某些(可能很大的)数据集。如何将工作负载分配到 X 个 CPU 或通过网络连接的独立节点,运行相同或不同的程序,以便最有效地处理工作负载?需要什么来确保 CPU 或系统不会相互干扰并破坏数据?这就是并行处理提出的问题。
答案2
超标量架构只是众多并行技术中的一种。维基百科上有关超标量处理器的页面解释得很好。
超标量处理器可以并行启动 2 条(或更多)指令,这意味着它有多个物理执行单元。这种并行性完全由处理器级别的硬件管理:处理器获取指令并自行决定哪些指令可以同时启动(可能无序启动)。编译器不必生成特定的二进制代码。
这与多核/多线程并行不同,后者在软件层面进行管理:编译器必须创建多个执行线程,这些线程可能在不同内核/不同 CPU 上执行。相比之下,超标量并行在内核内部运行,但这并不是唯一的:CPU 可以是多核的,每个内核都具有超标量架构。
正如另一个答案中所述,流水线也是一种完全由硬件级别管理的并行性:一次只能启动一条指令,但下一条指令可以在前一条指令完成之前启动。
许多处理器还具有矢量功能,即 SIMD 并行性(单指令、多数据):处理器具有矢量寄存器,可以在其中加载多个变量(通常为 4、8……),而不是通常的寄存器中的一个变量,并且矢量指令可以同时对寄存器的所有变量应用相同的操作(加法、乘法……)。在这里,编译器必须生成明确包含这些指令的二进制文件。