并行编程模型全解析
1. 任务并行性的语言支持
任务并行性可在语言层面通过合适的语言构造来实现,这些构造能指定可用的任务并行度。编译器和运行时系统负责管理和映射任务。这种方式的优势在于,程序员只需关注任务并行度的指定,实际的映射和对执行平台具体细节的适配由编译器和运行时系统完成,实现了关注点的清晰分离。
部分语言方法基于协调语言来指定任务并行度和任务间的依赖关系,例如 TwoL(两级并行性)、P3L(比萨并行编程语言)和 PCN(程序组合表示法)。
2. 并行性的显式与隐式表示
并行编程模型可根据程序中是否显式表示可用并行性(包括任务划分、通信和同步的指定)来区分。不显式表示并行性有助于并行程序的开发,但需要高级编译器来生成高效的并行程序;显式表示则在程序开发上更费力,但编译器可以更简单。
2.1 隐式并行性
对于程序员来说,当不需要显式表示并行性时,编程模型最为简单。此时,程序主要是对要执行的计算进行规范,而不指定并行执行顺序。程序员可以专注于(顺序)算法的细节,无需关心并行执行的组织。以下是两个相关方法:
- 并行化编译器 :通过合适的编译器技术将顺序程序转换为高效的并行程序,也称为自动并行化。编译器首先要分析计算之间的依赖关系,然后将计算分配给处理器执行以实现良好的负载平衡,并尽量减少分布式地址空间中的通信量。然而,由于基于指针的计算或间接寻址的依赖分析困难,以及函数调用或未知边界循环的执行时间在编译时难以预测,自动并行化在实践中往往难以实现,生成的并行程序运行时性能也不理想,因此实际应用较少。
- 函数式编程语言
超级会员免费看
订阅专栏 解锁全文

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



