- 划分(Partitioning):分解成小的任务,开拓并发性
- 通讯(Communication):确定诸任务间的数据交换,监测划分的合理性
- 组合(Agglomeration):依据任务的局部性,组合成更大的任务
- 映射(Mapping):将每个任务分配到处理器上,提高算法的性能
划分
- 充分开拓算法的并发性和可扩放性
- 先进行数据分解(称域分解),再进行计算功能的分解(称功能分解)
- 使数据集和计算集互不相交
- 划分阶段忽略处理器数目和目标机器的体系结构
域分解:将数据分解成大致相等的小数据片,划分时考虑数据上的相应操作。
功能分解:将计算划分为不同的 任务,其出发点不同于域分解。划分后,研究不同任务所需的数据。如果这些数据不相交的,则划分是成功的;如果数据有相当的重叠,意味着要重新进行域分解和功能分解。
通讯
功能分解确定了诸任务之间的数据流,诸任务是并发执行的,通讯则限制了这种并发性。
通讯判据
- 所有任务是否执行大致相当的通讯
- 是否尽可能的局部通讯
- 通讯操作是否能并行执行
- 同步任务的计算能否并行执行
组合
组合是由抽象到具体的过程,是将组合的任务能在一类并行机上有效的执行。
-
合并小尺寸任务,减少任务数。如果任务数恰好等于处理器数,则也完成了映射过程。
-
通过增加任务的粒度和重复计算,可以减少通讯成本。
-
保持映射和扩展的灵活性,降低软件工程成本
表面-容积效应
通讯量与任务子集的表面成正比,计算 量与任务子集的体积成正比,即增加重复计算有可能减少通讯量。
Case1求数列和
如果需要求N个处理器的和,且结果分配到每个处理器上,则使用二叉树需要两次遍历(正向遍历求和,反向遍历广播),耗时为 2 l o g n 2logn 2logn。
如果使用蝴蝶结构,则可以通过重复计算将耗时降低为 l o g n logn logn:
如图中蝴蝶结构,实际上可看作n个二叉树,即每个处理器都作为一个二叉树的根节点直接接收计算结果。
映射
每个任务要映射到具体的处理器,定位到运行机器上。