本节书摘来自华章出版社《多核与GPU编程:工具、方法及实践》一书中的第2章,第2.5节, 作 者 Multicore and GPU Programming: An Integrated Approach[阿联酋]杰拉西莫斯·巴拉斯(Gerassimos Barlas) 著,张云泉 贾海鹏 李士刚 袁良 等译, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2.5 匹配分解模式和程序结构模式
一个自然出现的问题是,给定分解模式,如何最好地构造程序?问题的答案高度依赖于具体应用。另外,一些平台给开发者强加了特定的程序结构模式。例如,MPI使用SPMD/MPMD模式,而OpenMP促进循环并行模式。
尽管如此,给定一个特定的分解模式,一些特定的程序结构模式更适合实现。表2-1总结了这些配对。
习题
- 对2.2节的图像卷积问题执行2D聚集步骤。最终的通信操作数量是多少?
- 对2.3.3节的热扩散例子比较1D和2D分解,假设只有一半的双向通信连接可用,且n端口通信是可行的,即所有连接上的所有通信都可以在相同时间发生。
- 通信开销如何影响流水线性能?考虑在流水线各级的常数通信开销,推出式(2.16)~(2.18)的变种。
- 2.4.5节代码清单2-8的并行快速排序所计算出的任务数,是基于每次调用PartitionData函数时输入会均分成两半这种最优情况假设。如果考虑最差情况(即一部分包括N-1个元素,另一部分包括0个元素),结果会怎样呢?
- 使用一个简单问题实例(例如一个小的整型数组)来追踪代码清单2-8并行快速排序的执行。对产生的任务创建甘特图,假设有无限的可用计算节点来执行它们。可以计算出可获得的加速比上限吗?