Post on 22-Jan-2016
description
§3 多处理机的并行和性能 并行算法
程序并行性分析
并行语言与并行编译
多处理性能
并行算法 并行算法的定义和分类
多处理机并行算法的研究思路
并行算法的定义 算法规定了求解某一特定问题时的有穷的运算处理步骤
并行算法是指可同时执行的多个进程的集合,各进程可相互作用、协调和并发操作
并行算法的分类 按运算基本对象:数值型(基于代数运算),非数值型(基于关系运算)
按并行进程间的操作顺序不同:同步型,异步型,独立型
按计算任务的大小:细粒度,中粒度,粗粒度
并行计算的模型 PRAM ( Parallel Random Access Ma
chine ) APRAM(Asychromous PRAM) BSP(Bulk Synchronous Parallel) logP(Latency, Overhead, Gap, Processor)
并行计算的功能 降低单个问题求解的时间
增加问题求解规模、提高问题求解精度
( 多机同时执行多个串行程序 )容错、更高的可用性、提高吞吐率
如何实现并行计算 ? 分而治之 !分而治之 !
分而治之 并行化的主要方法 : 分而治之
根据问题的求解过程,把任务分成若干子任务 ( 任务级并行或功能并行 )
根据处理数据的方式,形成多个相对独立的数据区,由不同的处理器分别处理 ( 数据并行 )
并行计算基本设计技术 划分法 (Partitioning)
首先,将原问题分成 p 个独立的近乎大小相等的子问题;其次,用 p 台处理器并行求解诸子问题。
划分的难点在于要留心分解子问题,使得子问题的解很容易被组合成原问题的解。
例如 (m, n)-selection 网络。 分治法 (Divide-and-Conquer)
将原问题规模从大到小逐渐分解成一些特性相同的子问题;直到子问题很容易求解为止。
分治很自然地导致递归过程,其注意力集中在子问题地合并上。 例如 FFT 的计算。
并行计算基本设计技术(续) 平衡树法 (Balanced Tree)
将输入元素作为叶节点构筑一棵平衡二叉树;然后自叶向根往返遍历。
此法的优点是在树中能快速存取所需的信息。 例如数据播送、求最大 /最小值以及求和 /前缀计算等。
倍增法 (Doubling)/ 指针跳跃法 (Pointer Jumping) 使用递归计算,将需要处理的数据间的距离逐步加倍,经 k
步后就可以完成距离为 2k的所有数据的计算。 此法特别适合于处理以链表或有根树之类为数据结构的问题。 例如表序问题的计算和求森林根等。
并行计算基本设计技术(续) 流水线法 (Piplining)
将原任务 t 分成一系列子任务 t1, t2,…, tm,使得一旦 ti完成,后继的子任务就立即开始,并以同样的速率计算之。
例如 systolic 计算。 破对称法 (Symmetry Breaking)
打破某些问题的对称性,使原问题可并行计算。 例如有向环图的顶点着色。
并行算法常用的设计策略 串行算法的直接并行化
检测串行算法中固有并行性而直接将其并行化。 直接并行化的关键是分析数据执行时的相关性,为此有时需要调整原程序的执行顺序和复制共享变量等。
直接并行化并非对所有问题均可行,但对很多应用问题仍不失为一种有效的方法。
并非任何优秀的串行算法都可以产生最好的并行算法;相反一个不太好的串行算法则有可能产生很优秀的并行算法。
并行算法常用的设计策略(续) 设计全新的并行算法
从问题本身的描述出发,根据问题的固有属性,从头开始设计一个全新的并行算法,而不管其相关的串行算法。
此方法有难度,但通常可产生高效的并行算法。 借用已有的算法求解新的一类问题
仔细研究两类不同问题求解方法的内在的、直接或间接的相似性,借用已有的求解某问题的并行算法来求解新的一类问题。
此方法对初学者有一定难度,但一个好的借用法所设计的算法,往往给人带来深刻的影响,广为传颂。
并行算法的一般设计过程 划分( Partitioning ):将整个计算分解成一些小的任务,目的是尽量开拓并行性。
通信( Communication ):确定诸任务并行执行中通信情况,以检测上述划分粒度的合理性。
组合( Agglomeration ):根据性能和代价来考察上两步的结果,必要时组合一些小任务以减小通信开销。
映射( Mapping ):将每个任务指派给个处理器,目的是最小化执行时间和最大化处理器利用率。
并行算法一般设计过程
问题
划分
映射
组合
通信
并行算法的性能分析 并行算法的基本性能指标
执行时间 t(n) 和所使用的处理器数 p(n) 计算成本 c(n)=t(n)*p(n) 加速比
效率个处理器上的时间算法运行在
的时间算法运行在单处理器上p
ns p )(
1)(0/)()( nEpnSnE ppp ,=
Amdahl 定律 计算负载固定,随着处理器数的增加计算时间将减少。令W 是计算负载, Ws是 W 中的串行分量, Wp是 W 中的并行分量, f=
Ws/W 是串行分量比率,则 Amdahl 加速定律
所以即使使用无穷多的处理器,加速也只能是 1/f
)(1
1)1(
/
p
fp
ff
ff
WpW
WS
sp
Gustafson 定律 计算时间不变,增加处理器的同时亦要增加计算负载以提高计算精度,则 Gustafson 加速定律
所以加速几乎是线性的。
)1()1(
*
pfppfp
WW
pWW
p
WpW
pWWS
ps
pp
ps
ps
性能损失的原因 顺序计算不需要的付出的开销 不可并行化的计算部分 空闲的处理器 对资源的竞争
多处理机并行算法的研究思路 将大的程序分解成可由足够的并行处理的过程(进程、任务、程序段)
举例 1 E1=a+bx+cx2+dx3
利用 Horner 法: E1=a+x(b+x(c+x(d)))
需 3 个乘加循环, 6 级运算
适合于单处理机
用树形流程图
+
*
+
*
+
*
a
x
b
x
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
*
+ *
+
+
*
*
* *a
b x x x x x
xc
d
说明 降低树高,增加并行性 用交换律、结合律、分配律来变换 先利用交换律把相同的运算集中起来,再用结合律把参加运算的操作数配对,尽可能并行运算,最后再把子树结合起来。
举例 2
E2=a+b(c+def+g)+h 需 7 级运算
+
+
*
+
+
*
h
a
b
g
c
d
f
*
e
举例 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
e f
举例 2 (续) 利用分配律降低树高。 E2=(a+h)+(bc+bg)+bd
ef 需 4 级运算 P=3 Tp=4 Sp=7/4 Ep=7/12
* *
+
* *
*
+
+
+
a c b g
a h b d e f
说明 表达式运算并行性的识别,除依靠算法 可以依靠编译程序 可以经过或不经过逆波兰后缀表达式产生并行指令
举例 3 算术表达式 Z=E+A*B*C/D+F 利用串行编译算法,产生三元指令组 1 * A B 4 + 3 E 2 * 1 C 5 + 4 F 3 / 2 D 6 = 5 Z 需 5 级运算
举例 3 (需) 利用并行编译算法 1 * A B 4 + E F 2 / C D 5 + 3 4 3 * 1 2 6 = 5 Z 分配给 2 个处理机,需 3 级运算
递归程序的并行性 是研究并行算法的重要课题 这里只讨论线性递归
线性递归的例子
1 2 1 2
1 1 2 2
0
1
( , ,..., ), ( , ,..., )
* ...
0
,1
n n
n n
i i i i
A a a a B b b b
A B a b a b a b
x
x x a b i n
给定向量
求欧几里得内积
这可归结为下列递归关系:
线性递归的例子(续)
10 1 1
0 0
1
...
,1
n nn n n
i i i
p a x a x a x a
Horner
p a
p a xp i n
计算多项式
写成 法则形式,归结为下列递归关系:
线性递归的例子(续)
1 2
1 2
1 1
0
1
1
,3
... ...
0
( ) ,1
i i i
n n
i i i i i i
Fibonacci
f f
f f f i n
n a a a b b b
c
c a b a b c i n
计算 数列,
计算 位二进制数 和 相加时的进位
线性递归的例子(续)
1
1
1 1 1
2 2 21 2
3 3 31 32 3
1 2 3
0, 0
,1
0 0 0 . 0
0 0 . 0
0 . 0
. . . . . . . .
. 0
i
i
i i ij jj i n
n n n n n n
x i
x c a x i n
x c x
x c a x
x c a a x
x c a a a x
用矩阵形式:
列扫算法1 1
21 1 31 1 1 1
2 2 21 1 3 31 1 1 1
2
32 2 42 2 2 2
3 3 31 1 32 2 1 1 2 2
1. , ( 1)
, ,..., ;
2. ( 1)
, ,...
3. ( 2)
, ,..., ;
4. ( 2)
,... ;
.
n
n n
n
n n n
x c x n
a x a x a x
n
x c a x c a x c a x
x n
a x a x a x
n
x c a x a x c a x a x
1先算 并将 播送到其余各式,用 个
处理机计算
用 个处理机计算
把 播送到其余各式,用 个处理机计算
用 个处理机计算
......
知道计算全部结果。
需用( n-1 )个处理机计算 2 ( n-1 )步例如:如 n=4 ,则需 3 个处理机,用 6 步
乘积形式递归算法
当 n=4 时,右边只有 4种是不同,需用 4 个处理机经 2 步算出,再用 2 个处理机经 3 步算出
比上一算法,少用 1 步,多用 1 个处理机 N较大时,快速。
1 1
2 2 21 1
3 3 31 1 32 2 21 1
4 4 41 1 43 3 31 1 42 43 32 2 21 1
( ) ( )
( ) ( ) ( )( )
. ......
x c
x c a c
x c a c a c a c
x c a c a c a c a a a c a c
程序举例 DO 4 I=1,N1 E(I)=3*F(I)+SIN(P(I))2 B(I)+D(I-1)+Q(I)3 D(I)=E(I)+B(I)4 CONTINUE
语句 1 提到循环前, 2 、 3构成循环
1
3
2
3 F P
D Q
B DE
数据相关图
程序的并行性分析 假定一个程序包含 P1,P2,…,Pi,…Pj,…P
n 等 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 原
数据相关(续) Pi , Pj 不能并行。 特殊,当 Pi 和 Pj服从交换律时 Pi A=2*A Pj A=3*A 虽不能并行,但能交换串行。 得: 6*A
数据反相关 如果 Pj 的左部变量在 Pi 的右部变量集内,且当 Pi未
取用其变量的值之前,是不允许被 Pj 所改变,称 Pi”数据反相关”于 Pj ,例:
Pi: C=A+E Pj: A=B+D 相当于流水中的“先读后写”相关。顺序执行的正确
结果是: Pi C 新=A 原 +E 原
Pj A 新=B 原 + D 原
不能交换串行。
数据输出相关 如果 Pi 的左部变量也是 Pj 的左部变量,且 Pj 存入其
算得的值必须在 P 存入之后,则称 Pj” 数据输出相关”于 Pi ,例:
Pi: A=B+D Pj: A=C+E
总结 两个程序段之间如有先写后读的数据相关,不能并行,只在特殊情况下可以交换串行;
如有先读后写的数据反相关,可以并行执行,但必须保证其写入共享主存时的先读后写次序,不能交换串行;
如有写 -写的数据输出相关,可以并行执行,但同样需保证其写入的先后次序,不能交换串行;
如同时有先写后读和先读后写两种相关,以交换数据为目的时,则必须读写完全同步,不许顺序串行和交换串行;
如没有任何相关,或仅有源数据相同时,可以并行、顺序串行和交换串行。
并行语言和并行编译 是在普通顺序型程序设计语言基础上加以扩充,增加能明确表示并行进程的成分。
并行程序设计语言要求能使程序员灵活方便地在其程序中表示出各类并行性,同时应有高的效率,能在各种并行 / 向量计算机系统中有效地实现。
并行进程的特点:进程在时间上重叠执行。 派生: FORK; 汇合: JOIN在不同的机器上有不同的表现形式。
并行程序设计语言(续) M.E.Conway(康佳 ) 形式:
FORM m :派生出标号为 m 开始的新进程。 如果是共享内存,产生存储器指针、映像函数和访问权数据
将空闲的处理机分配给被 FORK 语句派生的新进程
如果没有可用的空闲处理机,排队等待。
并行程序设计语言(续) JOIN n :
附有计数器,初值为 0 执行语句时,计数器加 1 ,与 n比较 如相等,表明执行的第 n格并发进程经过 JOIN语句,允许通过语句,计数器清 0 ,继续执行后续语句。
如小于 n ,则进程不是最后一个,先让进程结束,则把它占用的处理机释放出来,分配给排队的其他任务,如无任务,则空闲。
举例 1 计算 Z=E+A*B*C/D+F 并行编译: S1 G=A*B S2 H=C/D S3 I=G*H S4 J=E+F S5 Z=I+J
S1 S2
S3 S4
S5
A B C D
EF
举例 1 (续) FORK 20 30 FORK 4010 G=A*B ( 进程 S1) I+=G*H ( 进程 S3) JOIN 2 JOIN 2 GOTO 30 GOTO 5020 H=C/D ( 进程 S2) 40 J=E+F ( 进程 S4) JOIN 2 JOIN 2 50 Z=I+J ( 进程 S5)
时间
处理机
S1
S2 S3
S4
S5
FORK 20
FORK 40JOIN 2
JOIN 2
JOIN 2
JOIN 2
GOTO 50
释放释放
释放
举例 2 假定 A , B两个 8*8矩阵相乘: DO 10 J=0,6 DO 40 K=0,710 FORK 20 40 C(I,J)=C(I,J)+A(I,K)*B(K,J) J=7 30 CONTINUE20 DO 30 I=0,7 JOIN 8 C(I,J)=0
处理机
t
J=0
J=1
J=2
J=3
J=7 J=4
J=5
J=6
FORK 7 次
JOIN 8 JOIN 8
JOIN 8 JOIN 8 JOIN 8
JOIN 8 JOIN 8 JOIN 8
时间资源时间图
多处理机与并行处理机的区别 并行处理机的每一条指令要求 8 个处理单元完全同步地对 j=0,1,..7 的不同数组进行运算。在多处理机中,不需要也不会完全同步。 ---- 操作级与任务级
多处理机中可用处理机数目对程序编写没有影响。
块结构语言 E.W.Dijkstra 提出 把可并行执行的进程用 cobegin-coend括起来处理 , 最后一条语句执行完成后,方可执行后续语句。
该语句可嵌套;可使用共享变量,但不允许修改。
举例 1
beginS0;Cobegin S1;S2,…;Sn;coendSn+1;end
S0
S3S1 Sn
Sn+1
举例 2Begin S0; cobegin S1; begin S2; cobegin S3;S4;S5;coend S6; end S7; coend S8;end
S0
S2
S4S3 S5S1 S7
S6
S8
多处理机性能 引起峰值性能下降的原因是:
因处理机间通信而产生的延迟 一台处理机与其它处理机同步所需的开销 当没有足够多任务时,一台或多台处理机处于空闲状态
由于一台或多台处理机执行无用的工作 系统控制和操作调度所需开销
多处理机性能(续) 研究多处理机的目的:
提前 5年得到速度高 10 倍的机器。 或用 1/10 的价格获得一台高性能的机器。
如果设计得好,在某些适合进行并行处理得应用领域,可以达到:提前 10年得到速度高 100 倍的机器 或用 1/100 的价格获得一台高性能的机器。
并行性在很大程度上依赖于 E/C比值,其中: E 代表程序执行时间 C 代表通信开销。
多处理机性能(续) 通常: E/C比值小,并行性低。 E/C比值大,并行性高
如果把作业分解成较大的块,就能得到较大的E/C 值,但是所得到的并行性比最大可能的并行性要小得多。
E/C比值是衡量任务粒度 (Granularity) 大小的尺度
在粗粒度( Coarsegrain )并行情况下, E/C比值比较大,通信开销小
多处理机性能(续) 在细粒度( Finegrain )并行情况下, E/C比值比较小,通信开销大
细粒度并行性需要的处理机多,粗粒度并行性需要的处理机少。
细粒度并行性的基本原理是把一个程序尽可能地分解成能并行执行的小任务。在极端情况下,一个小任务只完成一个操作。
§4 多处理机的操作系统 多处理机操作系统的难度与特点
多处理机操作系统的类型
多处理机操作系统的的发展
多处理机操作系统的难度 处理机的分配和进程调度 进程间的同步 进程间的通信 存储系统的管理 文件系统的管理 系统重组
多处理机操作系统的特点 程序执行的并行性 分布性 机间通信与同步性 系统容错性
多处理机操作系统的类型 主从型 (Master-slave Configuration)
管理程序只在主处理机上运行。 硬件结构、管理、控制简单,对主处理机要求高。
用于工作负荷固定、从处理机能力明显低的紧耦合、异构型、非对称多处理机系统。
实现简单,经济,方便
多处理机操作系统的类型(续) 各自独立型( Separate Supervisor )
每个处理机有独立的管理程序在运行。 管理程序可再入,可靠性高,系统表格少,系统效率高;实现复杂、访存冲突解决和负载平衡较困难。
效率高; 实现复杂, 适合于松耦合多处理机
多处理机操作系统的类型(续) 浮动型 (Floating Supervisor)
管理程序在多个处理机间浮动。 管理程序可再入,实现复杂,负载平衡较好。 折衷方式; 灵活性; 适合于紧耦合型,同构型;