并行算法

Download Report

Transcript 并行算法

并行算法简介
解决方案中心
高性能计算部
姜金良
目录
并行算法基本概念
并行算法分类
并行化方法
并行算法的一般设计方法
并行算法的基本设计技术
并行算法的一般设计过程
并行程序设计方法
并行编程模型
并行算法的概念
• 并行算法:是一些可同时执行的诸进程的集合,这些进程相互作
用和协调动作从而达到给定问题的求解。
 并行性条件
数据相关性:流相关、反相关、输出相关
 相关性判别条件
输入集合I1,I2, 输出集合U1,U2,
I1ΛU2=Φ;
I2ΛU1=Φ;
U1ΛU2=Φ;
数据相关
• P1: A=B+C
• P2: D=A×B
其中变量A是导致P1和P2发生数据相关的原因。
P1和P2不能并行执行
数据反相关
• P1: A=B×C
• P2: C=E+D
P1通过变量C数据相关于P2。
不可以并行化
数据输出相关
• P1: A=B+C
• P2: A=D×E
并行算法的分类
 数值并行算法:数值计算
 非数值并行算法:符号运算
 同步并行算法:向量算法、SIMD、MIMD同步
 异步并行算法:不需相互等待
 独立并行算法:进程间完全独立
 细粒度并行算法:基于向量和循环系级并行
 中粒度并行算法:较大的循环级并行
 大粒度并行算法:任务级并行(区域分解)
并行算法的发展
•
•
•
•
•
基于向量运算的并行算法设计阶段
基于多向量处理机的并行算法设计阶段
SIMD类并行机上的算法设计阶段
MIMD类并行机上的并行算法设计阶段
现代并行算法设计——以MIMD为主,要求
可扩展性、可移植性
并行化方法
• 分而治之
模型并行、算法并行、程序并行
自然并行:数据并行、功能分割
任务主从型、SPMD型、管道型(流水线)、
二叉树型(分解与递归)
分而治之
Y=(A+B(C+DEF))+G
6
Y=(A+G)+B(C+DEF)
5
Y=(A+G+BC)+BD*EF
3
并行化方法
红黑格法
P1
mem1
communication
mem2
P2
并行化方法
• 并行二叉树技术:解决通信瓶颈问题,通信复
杂度O(P)下降到O(log P)
0
0
0
0
4
1
0
2
4
6
2
3
1
4
5
6
7
0
3
2
5
4
7
6
并行化方法
• 并行流水线技术:解决串行算法中不可避免的数据相关性,例
如Gauss-Seidel迭代、双曲型方程中的上下游流场数据依赖问题等
如何做并行应用?
 串行算法分析:模块化
 串行软件测试:找消耗90%CPU的hot
 选择并行方法:分而治之——从物理模型开始
 并行软件框架设计:流水线/主从/平等
 并行程序设计:MPI/PVM/OPEN MP等
 性能测试与分析:正确性、效率
 进一步优化:应用
并行算法设计的基本原则
•
•
•
•
•
与体系结构相结合
具有可扩展性
粗粒度
减少通信
优化性能
并行算法的一般设计方法
• 串行算法的直接并行化
• 从问题描述开始设计并行算法
• 借用已有算法解新问题
并行算法的一般设计方法
• 串行算法的直接并行化
检测和开拓串行算法中固有的并行性而直接将其并行化。
 由串行算法直接并行化是并行算法设计最常用的方法之一
 对于一类具有内在顺序性的串行算法,难以直接并行
 并非任何优秀的串行算法都可以产生好的并行算法,相反
一个不好的串行算法可能产生很优秀的并行算法
 许多数值串行并行算法可以并行化为有效的数值并行算法
并行算法的一般设计方法
• 从问题描述开始设计并行算法
从问题的描述出发,寻求可能的新途径,设计出一个新
的并行算法。不是完全排除串行算法设计的基本思想,而
是更着重从并行化的具体实现上开辟新的设计方法
--设计全新的并行算法是一个挑战性和创新性的工作
并行算法的一般设计方法
• 借用已有算法解新问题:
借用已知的某类问题的求解算法求解另一问题。
例:利用矩阵乘法求所有点对间最短路径。
n个顶点加权有向图G(V,E),矩阵Wnxn,构造矩阵D,di,j
从vi到vj 的最短路径长度。
dkij表示vi到vi 的经过至多-1个点的最短路径长度Dkij=wi,j
dkij=min{dk/2il,dk/2lj}。因此D可以经由D1逐次计算D2,
D4,… Dn-1,然后由D= Dn-1即可。由Dk/2求Dk ,可以使用
标准矩阵乘法,只是将原改为‘+’;求和运算改为“min”
操作。
并行算法的基本设计技术
•
•
•
•
•
区域分解
功能分解
流水线技术
同步并行算法
异步并行算法
并行算法的基本设计技术
• 区域分解法
按区域进行分解的一种方法,早期应用于求解椭圆型偏微
分方程
例:求解矩形区域上的Lapalace问题

 u ( x, y )  f ( x, y ) ( x, y )    (0, a)  (0, b)


u ( x, y )   g ( x, y )
其中,f(x,y) 和个g(x,y)为已知函数分别定义在区域的内部
和边界
• 非重叠区域的分解
• 将离散化后的方程化成一些独立的小规模问题和一个与每
个小问题关联的全局问题
并行算法的基本设计技术
•
功能分解方法
将不同功能组成的问题,按照其功能进行分解的一种手
段,其目的是逐一解决不同功能的问题,从而获得整个问
题的解
假设 F(x)是D  R n到D的一个映射, 要求解x* , 使得x*是
方程F(x)=0的一个解.记F(x)的Jacobi矩阵为G(x)=F' ( x
), 对给定的初始值x (0) , 则Newton迭代法如下 :
x (k+1)  x (k)  G 1 ( x (k) ) F ( x (k) ), k  0,..........
并行算法的基本设计技术
• 流水线技术
流水线(pipelining)技术是一项重要的并行技术,基本
思想:将一个任务t分成一系列子任务t1,t2,…,tm,使得一
旦t1完成,后继的子任务就立即开始,并以同样的速率进
行计算
以求解一簇递推问题为例:
a0, j 给定, ai, j  F (ai 1, j ), i  1,....., n, j  1,......, m
并行算法的基本设计技术
• 分而治之方法
将一个大而复杂的问题分解成若干特征相同的子问题分而
治之
n 1
3
例:假设在 q  2 个处理机上计算:s   ai
i 0
并行算法的基本设计技术
• 从上至下是分解过程,从下至上是求部分和的过程,
是一个简单的有分有治的过程
并行算法的基本设计技术
• 同步和异步并行算法
同步并行算法需要在某一时刻需要与其它的处理机进行数
据交换,然后才能继续进行.异步并行算法进行数据交换不
需要严格确定在某一时刻,每个处理机按照预定的计算任
务持续执行,但通常需要在一定的时候必须进行一次数据
交换,以保证算法的正确性
例:
x ( k 1)  b  Ax ( k )
x(0)已知; A是n  n矩阵; b, x( k )是n维向量;
矩阵在处理机中是按照行分块存储
并行算法的一般设计过程
• PCAM设计方法学
1) 首先尽量开拓算法的并发性和满足算法的可扩放性(与算
法相关的特性)
2) 然后着重优化算法的通信成本和全局执行时间(与机器相
关的特性)
3) 同时通过必要的整个过程的反复回溯,以期望达到一个满
意的设计选择
PCAM方法设计
• PCAM分为四步
1)
2)
3)
4)
任务的划分
通信
任务组合
处理器映射
并行算法的一般设计过程:划分
 使用域分解或者功能分解将整个计算分解成一些小的任务,
以便充分利用其潜在的并行性和可扩放性。
 先集中数据的分解(域分解),然后是计算功能的分解
(功能分解),两者互为补充。
 要点:计算集、数据集互补相交,以避免数据和计算的复
制
并行算法的一般设计过程:划分
• 划分标准
 任务数,是否至少高于目标机上处理器数的一个量级。
(灵活性)
 是否避免了冗于的计算和存储要求。(扩放)
 划分的任务是否尺寸大致相当。(均衡)
 任务数是否与问题尺寸成比例。
 是否采用了几种不同的划分法,多考虑几种选择可提高灵
活性,同时既考虑域分解,又要考虑功能分解。
并行算法的一般设计过程:通信
四种模式
局部通信vs.全局通信
结构化通信vs.非结构化通信
静态通信vs.动态通信
同步通信vs.异步通信
并行算法的一般设计过程:通信
• 通信标准




所有任务是否执行大致同样多的通信。(可扩放性)
每个任务是否只与少许近邻通信
诸通信操作是否能并行执行
不同任务的计算能否并行执行
并行算法的一般设计过程:组合
 目的:合并小尺寸的任务以减少任务数,理想情况每个处
理器一个任务,得到SPMD程序。
 增加粒度:
 在划分阶段,致力于尽可能多的任务以增大并行执行的机
会.但定义大量的细粒度任务不一定产生一个有效的算法,
因为这有可能增加通信的代价和任务创建的代价
 表面-容积效应:通信量比例于子域的表面积,计算比例
于容积,通信/计算之比随任务的尺寸的增加而减少->增
加粒度
 重复计算(Replication Computation),也叫冗余计算,
有时可用冗余计算来减少通信。
 同时也要保持灵活性和减少软件成本,降低软件工程代价
并行算法的一般设计过程:组合
• 组合标准
 组合造成的重复计算,是否平衡了其收益?
 造成重复数据,是否已证实不会因限制问题尺寸和处理机
数目而影响可扩放性?
 组合产生的任务是否具有类似的计算、通信代价?
 任务数目是否仍与问题尺寸成比例?
并行算法的一般设计过程:映射
• 指定每个任务到哪里执行,目的,减少算法的总
的执行时间
• 策略
1)可并发执行的任务放在不同的处理器上,增强并行度
2)需要频繁通信的任务置于同一处理器上以提高局部性。
3)采用域分解技术,当分解算法复杂,工作量不一样,通
信也许是非结构化的,此时需要负载平衡算法。
4)基于功能分解,会产生一些由短暂任务组成的计算,它
们在开始与结束时需与别的任务协调,此时可采用任务调
度算法。
并行算法的一般设计过程:映射
• 标准
 采用集中式负载平衡方案,管理者是否会成为瓶颈?
 动态平衡方案,是否衡量过不同策略的成本?
 采用概率或者循环法,是否有足够多的任务保证负载平
衡?
 设计SPMD程序,是否考虑过基于动态任务创建和消除的
算法?后者可以得到简单的算法,但性能可能有问题。
并行程序设计方法
应用领域
科学和工程计算,数据处理,商务应用等
串
行
程
序
设
计
并行程序设计
算法范例
分而治之,分支界限
动态规划,回,贪心
计算交互、工作池、异步迭代
流水线、主-从,细胞子动机
编程模型
冯诺依曼
隐式并行、数据并行
共享变量、消息传递
Fortran,C,Cobol,4GL
Fortran90,HPF,X3H5、PVM\MPI
不同类型的单处理机
共享内存(PVP、SMP、DSM)
数据并行(SIMD)、
消息传递(MPP、Clusters)
编程语言

体系结构
并行程序设计方法
 隐式并行程序设计
1)常用传统的语言编程成顺序源码,把”并行”交给编译器
实现自动并行
2)程序的自动并行化是一个理想目标,存在难以克服的困难
3)语言容易,编译器难
 显示并行程序设计
1)在用户程序中出现”并行”的调度语句
2)显示的并行程序开发是解决并行程序开发困难的切实可
行的方法
3)语言难,编译器容易
并行程序设计模型
隐式并行
数据并行
共享变量
消息传递
隐式并行
 概况
1) 程序员用熟悉的串行语言编程(未作明确的指定并行性)
2) 编译器和运行支持系统自动转化为并行代码
 特点
1) 语义简单
2) 可移植性好
3) 单线程,易于调试和验证正确性
4) 细粒度并行
5) 效率很低
数据并行
 概况
1) SIMD的自然模型
2) 局部计算和数据选路操作
 特点
1) 单线程
2) 并行操作于聚合数据结构(数组)
3) 松散的同步
4) 单一地址空间
5) 隐式交互作用
6) 显示数据分布
 优点:编程相对简单,串并行程序一致
 缺点:程序的性能依赖于所用的编译系统及用户对编译系
统的了解,并行粒度局限于数据级并行,粒度较小
共享变量
 概况
PVP,SMP,DSM的自然模型
 特点
1) 多线程:SPMD,MPMD
2) 异步
3) 单一地址空间
4) 显示同步
5) 隐式数据分布
6) 隐式通信
 典型代表
OpenMP
消息传递
 概况
MPP的自然模型
 特点
1) 多线程
2) 异步
3) 多地址空间
4) 显示同步
5) 显式数据映射和负载分配
6) 显示通信
 典型代表
MPI,PVM
并行编程风范
• 并行编程风范(Parallel





Programming Paradigms):
构造运行在并行机上的并行算法的方法
相并行(Phase Parallel),也叫松散并行
分治并行(Divide and Conquer Parallel)
流水线并行(Pipeline Parallel)
主-从并行(Master-Slave Parallel)
工作池并行(Work Pool Parallel)
相平行
•
•
•
•
一组超级步(相)
步内各自计算
步间通信同步
方便差错和性能分
析
• 计算和通信不能重
叠
流水线并行
• 将一个任务t分成一系
列子任务t1,t2,…,tm,
使得一旦t1完成,后继
的子任务就立即开始,
并以同样的速率进行计
算
• 一组进程
• 流水线作业
• 流水线设计技术
主-从并行
• 主进程:串行,协调
任务
• 子进程:计算子任
务
• 划分设计技术
• 与相并行结合
• 主进程易成为瓶颈
分治并行
• 将一个大而复杂的问题分
解成若干特征相同的子问
题分而治之
• 父进程把负载分割并指派
给子进程
• 重点在于归并
• 分治设计技术
• 难以负载平衡
工作池并行
• 初始状态:一件工作
• 进程从池中取任务执
行
• 可产生新任务放回池
中
• 直至任务池为空
• 易于负载平衡
参考文献
• 黄铠,徐志伟著,陆鑫达等译. 可扩展并行计算技术,结构与编程. 北京:机
械工业出版社, P.33~56,P.227~237, 2000.
• 陈国良著.并行计算—结构、算法、编程. 北京:高等教育出版社,1999.
• Barry Wilkinson and Michael Allen. Parallel Programming(Techniques
and Applications using Networked Workstations and Parallel Computers).
Prentice Hall, 1999.
• 李晓梅,莫则尧等著. 可扩展并行算法的设计与分析. 北京:国防工业出
版社,2000.
• 张宝琳,谷同祥等著. 数值并行计算原理与方法. 北京:国防工业出版
社,1999.
• 都志辉著. 高性能计算并行编程技术—MPI并行程序设计. 北京:清华大
学出版社, 2001.
2015年4月
52
相关网址
• MPI: http://ww.mpi-forum.org,
http://www.mcs.anl.gov/mpi
• Pthreads: http://www.oreilly.com
• PVM: http://www.epm.ornl.gov/pvm/
• OpemMP: http://www.openmp.org
• 网上搜索:www.google.com
2015年4月
53
谢谢!