并行编程模型中的并行级别解析
1. 并行编程基础
在并行编程里,程序的整体执行时间(也称作总时间跨度)需要被最小化,它指的是从第一个任务开始到最后一个任务完成所历经的时间。在实际情况中,寻找最优调度方案的问题属于NP完全问题或者NP困难问题。
通常,进程或线程的数量会根据执行单元的数量进行调整,从而让每个执行单元恰好执行一个进程或线程,并且在执行期间,进程或线程不会从一个执行单元迁移到另一个执行单元。在这些情形下,“进程”和“处理器”,或者“线程”和“核心”这些术语可以互换使用。
2. 不同层次的并行性
程序所进行的计算能够在不同层次上实现并行执行,具体包括指令级、语句级、循环级和函数级。依据所考虑的层次不同,会产生不同粒度的任务。
- 细粒度任务 :当把少量的指令或语句组合成一个任务时,就会形成细粒度任务,例如在指令级或语句级的情况。
- 粗粒度任务 :要是用于构成任务的函数包含大量的计算,那么这些任务就是粗粒度任务,像在函数级的情形。
- 中等粒度任务 :在循环级,通常是中等粒度任务,因为一次循环迭代一般由多条语句组成。
不同粒度的任务需要不同的调度方法,以此来充分利用并行性的潜力。下面将详细介绍不同层次的并行度以及在不同编程模型中如何利用这些并行度。
3. 指令级并行
如果程序中的多条指令相互独立,那么它们就可以同时并行执行。不过,指令I1和I2之间存在以下几种数据依赖关系时,会阻碍它们的并行执行:
- 流依赖(也叫真
超级会员免费看
订阅专栏 解锁全文
2579

被折叠的 条评论
为什么被折叠?



