先区分一下概念:并发执行是指多个任务或指令同时执行的能力,而并行执行则是指利用多核处理器的多个核心来同时处理不同的任务或指令。
书中介绍的并发执行的三种不同类型的并行执行有以下三种:
1. 应用程序的并行执行
应用程序的并行执行是指将一个应用程序分割成多个子任务,这些子任务可以在不同的处理器核心上同时执行。这种并行化通常涉及到将应用程序的设计和实现分解成多个独立的模块或组件,每个模块可以独立运行。
例如开发一个自动驾驶汽车的控制软件,该软件需要处理来自多个传感器的数据。我们可以将软件分为几个模块,例如图像处理模块、雷达数据处理模块和决策制定模块。每个模块都可以在不同的核心上运行,从而加快整体处理速度。
2. 函数的并行执行
函数的并行执行是指将一个应用程序中的函数或子程序分解成多个部分,这些部分可以在不同的核心上同时执行。这种并行化通常涉及到将一个大的函数拆分成多个较小的函数,每个函数可以独立运行。
书中以冒泡排序算法为例,展示了在单核和多核处理器上执行时的区别。
单核处理器上的排序
在单核处理器上,冒泡排序算法可以被简单地实现,只需要一个函数调用就可以启动排序过程。这个过程是串行的,即每次只能处理一个元素,直到整个列表被排序完毕。
多核处理器上的排序
在多核处理器上,为了实现函数的并行执行,可以尝试将原始数组分割成若干子数组,并将每个子数组分配给不同的处理器核心进行排序。一旦所有子数组被排序,就需要将它们合并成一个有序的完整数组。
- 子数组排序:每个子数组可以独立地被排序,这通常比单核排序快,但仍然受限于冒泡排序的时间复杂度。
- 子数组合并:排序后的子数组需要被合并成一个有序数组。这可以通过多次合并操作完成,其中每次合并都需要比较和重新组织数据。
同时书中7.2.2.2 小节还提到了双重并行与流水线并行也有些意思,展示一下内容:
- 双重并行:在这种方法中,将整个任务(如 A 和 B 两个阶段)在两个核心上轮流执行。这种方法减少了核心间的通信,使得调度更为简单且易于预测。
- 流水线并行:这种方法将任务的不同阶段分配给不同的核心,形成流水线。这种方法可以在理论上达到更高的吞吐量,但可能需要更多的协调和通信。
3. 指令的并行执行
指令的并行执行是指在单个处理器核心内部,通过指令级并行(ILP, Instruction-Level Parallelism)来同时执行多个指令。这通常是通过现代处理器的流水线技术和超线程技术实现的。
在单个核心上,处理器可以同时执行多个指令,例如加载数据、执行计算和写回结果。通过使用流水线技术,处理器可以在同一时间内处理多个指令的不同阶段,从而提高处理效率。
|