§3多处理机的并行和性能
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Biblioteka Baidu
并行算法一般设计过程
问题 划分
通信
组合
映射
并行算法的性能分析
并行算法的基本性能指标
执行时间t(n)和所使用的处理器数p(n) 计算成本c(n)=t(n)*p(n) 加速比 算法运行在单处理器上 的时间
s p ( n) 算法运行在p个处理器上的时间
效率
E p (n)=S p (n) / p, 0 E p (n) 1
并行计算的功能
降低单个问题求解的时间 增加问题求解规模、提高问题求解精度 (多机同时执行多个串行程序)容错、更高的可 用性、提高吞吐率
如何实现并行计算?
分而治之!
分而治之
并行化的主要方法:分而治之 根据问题的求解过程,把任务分成若干子任 务(任务级并行或功能并行) 根据处理数据的方式,形成多个相对独立的 数据区,由不同的处理器分别处理(数据并 行)
所以加速几乎是线性的。
性能损失的原因
顺序计算不需要的付出的开销 不可并行化的计算部分 空闲的处理器 对资源的竞争
多处理机并行算法的研究思路
将大的程序分解成可由足够的并行处理 的过程(进程、任务、程序段)
举例1
E1=a+bx+cx2+dx3
+
a
x
*
+ b x
利用Horner法: E1=a+x(b+x(c+x(d))) 需3个乘加循环,6级运 算 适合于单处理机 用树形流程图
递归程序的并行性
是研究并行算法的重要课题 这里只讨论线性递归
线性递归的例子
给定向量 A ( a1 , a2 ,..., an ), B (b1 , b2 ,..., bn ) 求欧几里得内积 A * B a1b1 a2b2 ... anbn 这可归结为下列递归关系: x0 0 xi xi 1 ai bi ,1 i n
线性递归的例子(续)
计算多项式 pn a0 x a1 x ... an1 x an
n n 1
写成Horner法则形式,归结为下列递归关系: p0 a0 pi ai xpi 1 ,1 i n
线性递归的例子(续)
计算Fibonacci数列, f1 f 2 1 f i f i 1 f i 2 ,3 i n 计算n位二进制数a an ...a1和b bn ...b1相加时的进位 c0 0 ci ai bi (ai bi ) ci 1 ,1 i n
列扫算法
1.先算x1 c1 , 并将x1播送到其余各式,用( n 1)个 处理机计算a21 x1 , a31 x1 ,..., an1 x1 ; 2.用( n 1)个处理机计算 x2 c2 a21 x1 , c3 a31 x1 ,...cn an1 x1 3.把x2播送到其余各式,用( n 2)个处理机计算 a32 x2 , a42 x2 ,..., an 2 x2 ; 4.用( n 2)个处理机计算 x3 c3 a31 x1 a32 x2 ,...cn an1 x1 an 2 x2 ; ....... 知道计算全部结果。
e
f
举例2(续)
利用分配律降低树高。 E2=(a+h)+(bc+bg)+b + def * * 需4级运算 P=3 a c b g + Tp=4 a h Sp=7/4 Ep=7/12
+ + * * b d e * f
说明
表达式运算并行性的识别,除依靠算法 可以依靠编译程序 可以经过或不经过逆波兰后缀表达式产 生并行指令
所以即使使用无穷多的处理器,加速也只能是1/f
Gustafson定律
计算时间不变,增加处理器的同时亦要增加 计算负载以提高计算精度,则Gustafson加速 定律
Ws pWp W p pWp S p f (1 p) p f ( p 1) Wp Ws W p Ws p * p
需用(n-1)个处理机计算2(n-1)步 例如:如n=4,则需3个处理机,用6步
乘积形式递归算法
c1 x1 x c a c 2 21 1 2 x3 (c3 a31c1 ) a32 (c2 a21c1 ) x4 (c4 a41c1 ) a43 (c3 a31c1 ) (a42 a43 a32 )(c2 a21c1 ) ...... .
3
F P
1 D 2 E 3 B D Q
语句1提到循环前,2、3构 成循环
数据相关图
程序的并行性分析
假定一个程序包含P1,P2,…,Pi,…Pj,…Pn 等n个程序段,设Pi和Pj程序段都是一条 语句,Pi在Pj之前执行。
数据相关 数据反相关 数据输出相关
数据相关
如果Pi的左部变量在Pj的右部变量集内,且Pj必须取出 Pi运算的结果来作为操作数,称Pj”数据相关”于Pi, 例: Pi: A=B+D Pj: C=A*E 相当于流水中的“先写后读”相关。顺序执行的正确 结果是: Pi A新=B原+D原 Pj C新=A新*E原=(B原+D原)* E原
破对称法(Symmetry Breaking)
并行算法常用的设计策略
串行算法的直接并行化
检测串行算法中固有并行性而直接将其并行化。 直接并行化的关键是分析数据执行时的相关性,为 此有时需要调整原程序的执行顺序和复制共享变量 等。 直接并行化并非对所有问题均可行,但对很多应用 问题仍不失为一种有效的方法。 并非任何优秀的串行算法都可以产生最好的并行算 法;相反一个不太好的串行算法则有可能产生很优 秀的并行算法。
+
举例2
h a
+
*
b g c + + * d e * f
E2=a+b(c+def+g)+h 需7级运算
举例2(续)
利用交换律和结合律 E2=(a+h)+b((c+g)+def) 需5级运算 P=2 Tp=5 Sp=7/5 Ep= Sp/p=0.7
+ + a + h b + c g d + + +
Amdahl定律
计算负载固定,随着处理器数的增加计算 时间将减少。令W是计算负载,Ws是W中 的串行分量,Wp是W中的并行分量, f=Ws/W是串行分量比率,则Amdahl加速定 律
W f (1 f ) 1 S ( p ) 1 f W p / p Ws f f p
*
+
c
d
*
x
举例1(续)
E1=a+bx+cx2+dx3 用3台处理机,需4级 运算 级数(高度)Tp=4 处理机数P=3 加速比Sp=顺序运算级 数/高度=6/4=3/2 效率Ep=Sp/P=1/2
+
+ + * * b c x x *
d
*
* x x x * x
a
说明
降低树高,增加并行性 用交换律、结合律、分配律来变换 先利用交换律把相同的运算集中起来, 再用结合律把参加运算的操作数配对, 尽可能并行运算,最后再把子树结合起 来。
倍增法(Doubling)/指针跳跃法(Pointer Jumping)
并行计算基本设计技术(续)
流水线法(Piplining)
将原任务t分成一系列子任务t1,t2,…,tm, 使得一旦ti完成,后继的子任务就立即开始, 并以同样的速率计算之。 例如systolic计算。 打破某些问题的对称性,使原问题可并行计 算。 例如有向环图的顶点着色。
线性递归的例子(续)
xi 0, i 0 xi ci
j i n 1
i 1
aij x j ,1 i n
用矩阵形式: x1 c1 0 x c a 2 2 21 x3 c3 a31 . . . xn cn an1 0 0 a32 . an 2 0 0 0 . an 3 . . . . . 0 x1 x 0 2 0 x3 . . 0 xn
并行计算基本设计技术
划分法(Partitioning)
首先,将原问题分成p个独立的近乎大小相等的子问题;其次, 用p台处理器并行求解诸子问题。 划分的难点在于要留心分解子问题,使得子问题的解很容易 被组合成原问题的解。 例如(m, n)-selection网络。 将原问题规模从大到小逐渐分解成一些特性相同的子问题; 直到子问题很容易求解为止。 分治很自然地导致递归过程,其注意力集中在子问题地合并 上。 例如FFT的计算。
按运算基本对象:数值型(基于代数运 算),非数值型(基于关系运算) 按并行进程间的操作顺序不同:同步型, 异步型,独立型 按计算任务的大小:细粒度,中粒度, 粗粒度
并行计算的模型
PRAM(Parallel Random Access Machine) APRAM(Asychromous PRAM) BSP(Bulk Synchronous Parallel) logP(Latency, Overhead, Gap, Processor)
借用已有的算法求解新的一类问题
并行算法的一般设计过程
划分(Partitioning):将整个计算分解成一些 小的任务,目的是尽量开拓并行性。 通信(Communication):确定诸任务并行执 行中通信情况,以检测上述划分粒度的合理性。 组合(Agglomeration):根据性能和代价来考 察上两步的结果,必要时组合一些小任务以减 小通信开销。 映射(Mapping):将每个任务指派给个处理 器,目的是最小化执行时间和最大化处理器利 用率。
§3 多处理机的并行和性能
并行算法
程序并行性分析 并行语言与并行编译 多处理性能
并行算法
并行算法的定义和分类
多处理机并行算法的研究思路
并行算法的定义
算法规定了求解某一特定问题时的有穷 的运算处理步骤 并行算法是指可同时执行的多个进程的 集合,各进程可相互作用、协调和并发 操作
并行算法的分类
并行算法常用的设计策略(续)
设计全新的并行算法
从问题本身的描述出发,根据问题的固有属性,从 头开始设计一个全新的并行算法,而不管其相关的 串行算法。 此方法有难度,但通常可产生高效的并行算法。 仔细研究两类不同问题求解方法的内在的、直接或 间接的相似性,借用已有的求解某问题的并行算法 来求解新的一类问题。 此方法对初学者有一定难度,但一个好的借用法所 设计的算法,往往给人带来深刻的影响,广为传颂。
当n=4时,右边只有4种是不同,需用4个处理 机经2步算出,再用2个处理机经3步算出 比上一算法,少用1步,多用1个处理机 N较大时,快速。
程序举例
DO 4 I=1,N
1 2 3 4 E(I)=3*F(I)+SIN(P(I)) B(I)+D(I-1)+Q(I) D(I)=E(I)+B(I) CONTINUE
分治法(Divide-and-Conquer)
并行计算基本设计技术(续)
平衡树法(Balanced Tree)
将输入元素作为叶节点构筑一棵平衡二叉树;然后自叶向根 往返遍历。 此法的优点是在树中能快速存取所需的信息。 例如数据播送、求最大/最小值以及求和/前缀计算等。 使用递归计算,将需要处理的数据间的距离逐步加倍,经k步 后就可以完成距离为2k的所有数据的计算。 此法特别适合于处理以链表或有根树之类为数据结构的问题。 例如表序问题的计算和求森林根等。
举例3
算术表达式 Z=E+A*B*C/D+F 利用串行编译算法,产生三元指令组 1 *AB 4 + 3E 2 *1C 5 + 4F 3 / 2D 6 =5Z 需5级运算
举例3(需)
利用并行编译算法 1 *AB 4 + EF 2 /CD 5 + 34 3 *12 6 = 5Z 分配给2个处理机,需3级运算
并行算法一般设计过程
问题 划分
通信
组合
映射
并行算法的性能分析
并行算法的基本性能指标
执行时间t(n)和所使用的处理器数p(n) 计算成本c(n)=t(n)*p(n) 加速比 算法运行在单处理器上 的时间
s p ( n) 算法运行在p个处理器上的时间
效率
E p (n)=S p (n) / p, 0 E p (n) 1
并行计算的功能
降低单个问题求解的时间 增加问题求解规模、提高问题求解精度 (多机同时执行多个串行程序)容错、更高的可 用性、提高吞吐率
如何实现并行计算?
分而治之!
分而治之
并行化的主要方法:分而治之 根据问题的求解过程,把任务分成若干子任 务(任务级并行或功能并行) 根据处理数据的方式,形成多个相对独立的 数据区,由不同的处理器分别处理(数据并 行)
所以加速几乎是线性的。
性能损失的原因
顺序计算不需要的付出的开销 不可并行化的计算部分 空闲的处理器 对资源的竞争
多处理机并行算法的研究思路
将大的程序分解成可由足够的并行处理 的过程(进程、任务、程序段)
举例1
E1=a+bx+cx2+dx3
+
a
x
*
+ b x
利用Horner法: E1=a+x(b+x(c+x(d))) 需3个乘加循环,6级运 算 适合于单处理机 用树形流程图
递归程序的并行性
是研究并行算法的重要课题 这里只讨论线性递归
线性递归的例子
给定向量 A ( a1 , a2 ,..., an ), B (b1 , b2 ,..., bn ) 求欧几里得内积 A * B a1b1 a2b2 ... anbn 这可归结为下列递归关系: x0 0 xi xi 1 ai bi ,1 i n
线性递归的例子(续)
计算多项式 pn a0 x a1 x ... an1 x an
n n 1
写成Horner法则形式,归结为下列递归关系: p0 a0 pi ai xpi 1 ,1 i n
线性递归的例子(续)
计算Fibonacci数列, f1 f 2 1 f i f i 1 f i 2 ,3 i n 计算n位二进制数a an ...a1和b bn ...b1相加时的进位 c0 0 ci ai bi (ai bi ) ci 1 ,1 i n
列扫算法
1.先算x1 c1 , 并将x1播送到其余各式,用( n 1)个 处理机计算a21 x1 , a31 x1 ,..., an1 x1 ; 2.用( n 1)个处理机计算 x2 c2 a21 x1 , c3 a31 x1 ,...cn an1 x1 3.把x2播送到其余各式,用( n 2)个处理机计算 a32 x2 , a42 x2 ,..., an 2 x2 ; 4.用( n 2)个处理机计算 x3 c3 a31 x1 a32 x2 ,...cn an1 x1 an 2 x2 ; ....... 知道计算全部结果。
e
f
举例2(续)
利用分配律降低树高。 E2=(a+h)+(bc+bg)+b + def * * 需4级运算 P=3 a c b g + Tp=4 a h Sp=7/4 Ep=7/12
+ + * * b d e * f
说明
表达式运算并行性的识别,除依靠算法 可以依靠编译程序 可以经过或不经过逆波兰后缀表达式产 生并行指令
所以即使使用无穷多的处理器,加速也只能是1/f
Gustafson定律
计算时间不变,增加处理器的同时亦要增加 计算负载以提高计算精度,则Gustafson加速 定律
Ws pWp W p pWp S p f (1 p) p f ( p 1) Wp Ws W p Ws p * p
需用(n-1)个处理机计算2(n-1)步 例如:如n=4,则需3个处理机,用6步
乘积形式递归算法
c1 x1 x c a c 2 21 1 2 x3 (c3 a31c1 ) a32 (c2 a21c1 ) x4 (c4 a41c1 ) a43 (c3 a31c1 ) (a42 a43 a32 )(c2 a21c1 ) ...... .
3
F P
1 D 2 E 3 B D Q
语句1提到循环前,2、3构 成循环
数据相关图
程序的并行性分析
假定一个程序包含P1,P2,…,Pi,…Pj,…Pn 等n个程序段,设Pi和Pj程序段都是一条 语句,Pi在Pj之前执行。
数据相关 数据反相关 数据输出相关
数据相关
如果Pi的左部变量在Pj的右部变量集内,且Pj必须取出 Pi运算的结果来作为操作数,称Pj”数据相关”于Pi, 例: Pi: A=B+D Pj: C=A*E 相当于流水中的“先写后读”相关。顺序执行的正确 结果是: Pi A新=B原+D原 Pj C新=A新*E原=(B原+D原)* E原
破对称法(Symmetry Breaking)
并行算法常用的设计策略
串行算法的直接并行化
检测串行算法中固有并行性而直接将其并行化。 直接并行化的关键是分析数据执行时的相关性,为 此有时需要调整原程序的执行顺序和复制共享变量 等。 直接并行化并非对所有问题均可行,但对很多应用 问题仍不失为一种有效的方法。 并非任何优秀的串行算法都可以产生最好的并行算 法;相反一个不太好的串行算法则有可能产生很优 秀的并行算法。
+
举例2
h a
+
*
b g c + + * d e * f
E2=a+b(c+def+g)+h 需7级运算
举例2(续)
利用交换律和结合律 E2=(a+h)+b((c+g)+def) 需5级运算 P=2 Tp=5 Sp=7/5 Ep= Sp/p=0.7
+ + a + h b + c g d + + +
Amdahl定律
计算负载固定,随着处理器数的增加计算 时间将减少。令W是计算负载,Ws是W中 的串行分量,Wp是W中的并行分量, f=Ws/W是串行分量比率,则Amdahl加速定 律
W f (1 f ) 1 S ( p ) 1 f W p / p Ws f f p
*
+
c
d
*
x
举例1(续)
E1=a+bx+cx2+dx3 用3台处理机,需4级 运算 级数(高度)Tp=4 处理机数P=3 加速比Sp=顺序运算级 数/高度=6/4=3/2 效率Ep=Sp/P=1/2
+
+ + * * b c x x *
d
*
* x x x * x
a
说明
降低树高,增加并行性 用交换律、结合律、分配律来变换 先利用交换律把相同的运算集中起来, 再用结合律把参加运算的操作数配对, 尽可能并行运算,最后再把子树结合起 来。
倍增法(Doubling)/指针跳跃法(Pointer Jumping)
并行计算基本设计技术(续)
流水线法(Piplining)
将原任务t分成一系列子任务t1,t2,…,tm, 使得一旦ti完成,后继的子任务就立即开始, 并以同样的速率计算之。 例如systolic计算。 打破某些问题的对称性,使原问题可并行计 算。 例如有向环图的顶点着色。
线性递归的例子(续)
xi 0, i 0 xi ci
j i n 1
i 1
aij x j ,1 i n
用矩阵形式: x1 c1 0 x c a 2 2 21 x3 c3 a31 . . . xn cn an1 0 0 a32 . an 2 0 0 0 . an 3 . . . . . 0 x1 x 0 2 0 x3 . . 0 xn
并行计算基本设计技术
划分法(Partitioning)
首先,将原问题分成p个独立的近乎大小相等的子问题;其次, 用p台处理器并行求解诸子问题。 划分的难点在于要留心分解子问题,使得子问题的解很容易 被组合成原问题的解。 例如(m, n)-selection网络。 将原问题规模从大到小逐渐分解成一些特性相同的子问题; 直到子问题很容易求解为止。 分治很自然地导致递归过程,其注意力集中在子问题地合并 上。 例如FFT的计算。
按运算基本对象:数值型(基于代数运 算),非数值型(基于关系运算) 按并行进程间的操作顺序不同:同步型, 异步型,独立型 按计算任务的大小:细粒度,中粒度, 粗粒度
并行计算的模型
PRAM(Parallel Random Access Machine) APRAM(Asychromous PRAM) BSP(Bulk Synchronous Parallel) logP(Latency, Overhead, Gap, Processor)
借用已有的算法求解新的一类问题
并行算法的一般设计过程
划分(Partitioning):将整个计算分解成一些 小的任务,目的是尽量开拓并行性。 通信(Communication):确定诸任务并行执 行中通信情况,以检测上述划分粒度的合理性。 组合(Agglomeration):根据性能和代价来考 察上两步的结果,必要时组合一些小任务以减 小通信开销。 映射(Mapping):将每个任务指派给个处理 器,目的是最小化执行时间和最大化处理器利 用率。
§3 多处理机的并行和性能
并行算法
程序并行性分析 并行语言与并行编译 多处理性能
并行算法
并行算法的定义和分类
多处理机并行算法的研究思路
并行算法的定义
算法规定了求解某一特定问题时的有穷 的运算处理步骤 并行算法是指可同时执行的多个进程的 集合,各进程可相互作用、协调和并发 操作
并行算法的分类
并行算法常用的设计策略(续)
设计全新的并行算法
从问题本身的描述出发,根据问题的固有属性,从 头开始设计一个全新的并行算法,而不管其相关的 串行算法。 此方法有难度,但通常可产生高效的并行算法。 仔细研究两类不同问题求解方法的内在的、直接或 间接的相似性,借用已有的求解某问题的并行算法 来求解新的一类问题。 此方法对初学者有一定难度,但一个好的借用法所 设计的算法,往往给人带来深刻的影响,广为传颂。
当n=4时,右边只有4种是不同,需用4个处理 机经2步算出,再用2个处理机经3步算出 比上一算法,少用1步,多用1个处理机 N较大时,快速。
程序举例
DO 4 I=1,N
1 2 3 4 E(I)=3*F(I)+SIN(P(I)) B(I)+D(I-1)+Q(I) D(I)=E(I)+B(I) CONTINUE
分治法(Divide-and-Conquer)
并行计算基本设计技术(续)
平衡树法(Balanced Tree)
将输入元素作为叶节点构筑一棵平衡二叉树;然后自叶向根 往返遍历。 此法的优点是在树中能快速存取所需的信息。 例如数据播送、求最大/最小值以及求和/前缀计算等。 使用递归计算,将需要处理的数据间的距离逐步加倍,经k步 后就可以完成距离为2k的所有数据的计算。 此法特别适合于处理以链表或有根树之类为数据结构的问题。 例如表序问题的计算和求森林根等。
举例3
算术表达式 Z=E+A*B*C/D+F 利用串行编译算法,产生三元指令组 1 *AB 4 + 3E 2 *1C 5 + 4F 3 / 2D 6 =5Z 需5级运算
举例3(需)
利用并行编译算法 1 *AB 4 + EF 2 /CD 5 + 34 3 *12 6 = 5Z 分配给2个处理机,需3级运算