并行算法的设计模式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请求任务,同时可能提交新任务;
进程 分配任务
2020/6/1
6
基于主从模式的并行算法
❖ 进程分为两类:一类是主进程,另一类是从进程
❖ 主进程生成需要做的任务,并将任务分配给从进
程去执行。如果可以确保负载平衡,则可以事先 对子任务进行分配
❖ 当主进程需要很长时间来生成任务时,主进程可
以每次为从进程分配计算量较小的子任务,并且 分配多次
❖ 可以让任何一个从进程来做任何子任务
❖ 整个任务分成多个阶段时,主进程可以要求从进 程在每一个阶段后进行同步
2020/6/1
7
基于主从模式的并行算法(续)
主进程
主进程
从进程
从进程
•••
请求任务;
分配任务
❖ 主从模式可以推广到多层主从模式
从进程
2020/6/1
8
基于流水线模式的并行算法
❖ 一组数据流过一系列进程,每个进程对数据进行部 分操作
2020/6/1
1
基于数据并行的并行算法(续)
❖ 求Euclid范数的例子
x0, x1, x2 算s=x02+ x12+ x22
x0, x1, x2 算s=x02+ x12+ x22
x0, x1, x2 算s=x02+ x12+ x22
多进程归 约求和
算result=sqrt(s)
算result=sqrt(s)
算result=sqrt(s)
2020/6/1
2
基于任务图的并行算法
❖ 有的问题对应的任务可以分成很多个子任务,各子 任务之间存在相关性,这时采用基于任务图的并行 算法比较合适
❖ 一般对任务进行静态调度,以尽量提高数据访问的 局部性,减少进程间的数据移动;有时候,也采用 集中式动态调度方法,但也必须以任务依赖ห้องสมุดไป่ตู้为基 础
2020/6/1
9
基于流水线模式的并行算法(续)
2020/6/1
10
混合模式并行算法
❖ 在有些情况下,并行算法需要分为多个阶段, 在每个阶段,可能需要采用不同的设计模式 来进行设计
2020/6/1
11
基于数据并行的并行算法
❖ 任务静态地映射到进程上,每个任务针对 不同的数据集进行相同或类似的操作,常 采用SIMD与SPMD的模式来编写程序
❖ 整个计算过程可能分为多个阶段,同一进 程在每个阶段上处理的数据可能不同。在 每个阶段之间,可能需要同步与通信
❖ 对基于数据并行模式的并行算法,在进行
任务分解时,只要对数据域进行分解一般 就可以充分保证负载平衡
❖ 每个进程接收到一组新数据时,都会触动一个新的 任务
❖ 在流水线中,每个进程可看成前一进程生成的数据 的消费者,又可看成后一进程需要的数据的生产者
❖ 任务粒度越大,装满流水线的时间就越长;任务粒
度太小,进程在进行很小的计算量后就需要接收新 的数据,导致交互开销增加
❖ 为减少交互开销的影响,经常采用将交互开销与计 算重叠的技术。例如稠密矩阵的LU分解
2020/6/1
4
基于工作池的并行算法
❖ 适合采用工作池设计模式的问题:
将整个任务分解为子任务时,子任务的工作量 难以预测
在执行某个子任务时,会动态地生成另外的子 任务
❖ 一般采用动态负载平衡的方法来调度
2020/6/1
5
基于工作池的并行算法(续)
工作池:可能是集中式也可能是分布式
进程
进程
•••
❖ 并行快速排序、稀疏矩阵分解、以及许多基于分治 策略的并行算法都采用这种设计模式
2020/6/1
3
基于任务图的并行算法(续)
将长为n的数组分为两段s0与s1,使 s0中的每个元素比s1中每个元素都小
将s0分为s00与s01
将s1分为s10与s11
对s00排序
对s01排序
对s10排序
对s11排序
4个处理器上的快速排序示意图