2章 并行处理Word文档格式.docx
《2章 并行处理Word文档格式.docx》由会员分享,可在线阅读,更多相关《2章 并行处理Word文档格式.docx(19页珍藏版)》请在冰豆网上搜索。
![2章 并行处理Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/7/73dc048f-09af-4538-b4c3-a19effa6d184/73dc048f-09af-4538-b4c3-a19effa6d1841.gif)
这些方法包括采用多功能部件、流水线部件、使CPU和I/O部件操作重叠以及采用如多道程序和分时那样的软件方法。
1)指令级并行
典型细粒度,一般少于20条指令。
借助优化编译器自动检测并行性,将源代码变成运行时系统能识别的并行形式。
2)循环级并行
典型循环含少于500条指令,由于有些循环操作在连续迭代中并不相关,易于向量化,是在并行机或向量机上运行的最优程序结构。
递归循环的并行化比较困难。
向量处理由优化编译器在循环级开发,仍属于细粒度计算。
3)过程级并行
中粒度并行,指令少于2000条,分析过程间的并行性比细粒度要困难。
有时需要重新设计程序,并要编译器的支持。
SPMD、多任务处理属于这一层。
4)子程序级并行
(粗)中粒度并行,几千条指令,常在消息传递型多计算机上以SPMD或MPMD方式执行。
并行性主要由算法设计人员与程序员开发。
5)作业级并行
粗粒度并行,数万条指令,常由加载程序和操作系统处理这类并行性,靠算法有效性来保证。
2.2程序并行性处理的相关性分析
由于多处理机中的并行性存在于不同的层次上,因此要充分开发它的并行性就必须从算法、语言、编译、操作系统和系统结构等各方面来统筹、协调地进行。
1.程序中数据相关性分析
多处理机中的并行通常表现在程序级或任务级,能否将顺序执行的程序转换成语义等价的、可并行执行的程序,主要取决于程序的结构形式,特别是其中的数据相关性。
由于在多处理机上并行运行的程序段是异步的,而异步流动在指令之间形成三种相关性,所以在程序段之间会出现下面的三种数据相关,为叙述简单起见,仅以赋值语句表示程序段P。
(1)数据相关
若P1左边变量出现在P2的右边变量集内时,则称P2数据相关于P1。
例如:
Pl:
A=B+C
P2:
D=A*B
其中,变量A是导致P1和P2发生数据相关的原因,为了保证程序执行的语义正确性,变量A必须是先在P1中写入后方可从P2中读出,即必须先写后读。
显然,P1和P2不能并行执行。
然而,有一种特殊情形,当P1和P2服从交换律时,即先执行P2,而后再执行P1,如
Pl:
A=2*A
A=3*A
虽不能并行执行,却允许它们交换串行(即P1和P2执行顺序颠倒)。
最终止A新为6*A原,和顺序串行的结果一致。
(2)数据反相关
若P2的左边变量出现在P1的右边变量集内时,则称P1数据反相关于P2。
A=B*C
C=E+D
P1通过变量C数据反相关于P2。
为保证语义正确性,必须等P1将变量C读出后,P2方可向变量进行写入操作,即必须先读后写。
(3)数据输出相关
若Pl和P2的左边变量相同,则称P2数据输出相关于P1。
A=D*E
保证语义正确性,必须保证P1先写入A,然后允许P2再写入A。
除了上述三种相关外,还存在一种特殊情况:
即两个程序段的输入变量互为输出变量:
A=B
B=A
此两者必须并行执行,方可保证语义的正确性。
这就要求硬件机构能保证两者进行同步读写。
苦两个处理机各带有局部存储器,则可降低同步要求。
2.程序并行性检测
程序并行性检测主要是判别程序中是否存在前述的各种数据相关。
下面介绍由伯恩斯坦(Bernstein)提出的一种自动判别数据相关的准则。
每个程序段在执行过程中通常要使用输入和输出这两个分离的变量集。
若用Ii表示Pi程序段中操作所要读取的存储单元集,用Oi表示要写入的存储单元集,则P1和P2两个程序段能并行执行的伯恩斯坦准则为:
(1)I1∩O2=Ø
,即P1的输入变量集与P2的输出变量集不相交;
(2)I2∩O1=Ø
,即P2的输入变量集与P1的输出变量集不相交;
(3)O1∩O2=Ø
,即P1和P2的输出变量集不相交。
例如,若有三个程序段P1、P2和P3,分别求三个矩阵算术表达式:
P1:
X=(A+B)×
(A-B)
Y=(C-1)×
(C+D)-1
P3:
Z=X+Y
其中,A、B、C、D、X和Y均为N×
N的矩阵,它们的输入、输出变量集分别为:
Il={A,B},I2={C,D},I3={X,Y},O1={X},O2={Y},O3={Z}
P1与P2并行性检测:
由于I1∩O2=Ø
,I2∩O1=Ø
,O1∩O2=Ø
,故P1和P2两个程序段可以并行执行。
P3与P1、P2并行性检测:
由于I3∩O1≠Ø
,I3∩O2≠Ø
,故P3程序段必须在P1和P2程序段都执行完毕后,方可开始执行。
2.3并行程序设计语言
并行程序设计通常可采用显式及隐式两种方法。
显式方法要求程序员通过某种语言结构,显式地表示并行性,隐式方法则主要由编译程序来判断,程序中哪些部分是可以并行执行的,并自动地将顺序程序转换成并行程序。
并行语言的开发通常有两种方法:
一是在现有高级语言的基础上扩展能表示并行进程的结构成分,称为扩展式并行程序语言。
例如并行FORTRAN,并行C等。
二是设计全新的并行语言。
一般来讲,前一种方法较为现实。
并行程序设计语言的基本要求是:
能使程序员在其程序中灵活方便地表示出各类并行性,能在各种并行/向量计算机系统中高效地实现。
并行进程的特点是这些进程在时间上重叠地执行,一个进程未结束,另一个进程就开始。
包含并行性的程序在多处理机上运行时,需要有相应的控制机构来管理,其中包括并行任务的派生和汇合。
并行任务的派生是使一个任务在执行的同时。
派生出可与它并行执行的其它一个或多个任务,分配给不同的处理机完成。
这些任务可以是相同的.也可以是不同的,执行时间也可以各不相同。
等它们全部完成后,再汇合起来进行后续的单任务或新的并行任务。
如果是并行任务,就又要进行派生,然后汇合。
如此进行下去,直至整个程序结束运行。
并行任务的派生和汇合常用软件手段控制,首先要在程序中反映出并行任务的派生和汇合关系。
例如,可在程序语言中用FORK语句派生并行任务,用JOIN语句对多个并发任务汇合。
下面介绍三种扩展并行语言中使用的并行结构。
1.使用FORK-JOIN语句来表示并发性
FORK和JOIN语句在不同机器上有不同的表示形式。
现以M.E.Conway提出的形式为例说明。
FORK语句的形式为FORKm,其中m为新进程开始的标号。
执行FORKm语句时,派生出标号为m开始的新进程,具体为:
准备好这个新进程启动和执行所必需的信息;
如果是共享主存,则产生存储器指针、映象函数和访问权数据;
将空闲的处理机分配给派生的新进程,如果没有空闲处理机,则让它们排队等待;
继续在原处理机上执行FORK语句的原进程。
与FORK语句相配合,作为每个并发进程的终端语句JOIN的形式为JOINn,其中n为已派生出的并发进程个数。
JOIN语句附有一个计数器,其初始值为0。
每当执行JOINn语句时,计数器的值加l,并与n比较。
若比较相等,表明这是执行中的第n个并发进程经过JOINn语句,于是允许该进程通过JOIN语句,将计数器清0,并在其处理机上继续执行后续语句。
若比较结果是计数器的值仍小于n,表明此进程不是并发进程中的最后一个,可让现在执行JOIN语句的这个进程先结束,把它所占用的处理机释放出来,分配给下面排队等待的其它任务。
如没有排队等待的任务,就让该处理机空闲。
图2.2中给出了一个使用FORK和JOIN语句来控制三个并行进程的例子。
下面以算术表达式Z=A*B*C/D+E+F的计算为例,经并行编译得到如下程序:
S1G=A*B
S2H=C/D
S3I=G*H
S4J=E+F
S5Z=I+J
图2.3数据相关示意
如果不加并行控制语句,这个程序仍然只是—个普通的串行程序,发挥不出多处理机的作用。
图2.3给出了各语句间的数据相关情况。
它表明S1和S2可以同时开始执行,但要等到S1和S2都完成之后,才能开始执行S3,并可并行地开始执行S4,而只有S3和S4汇合才能执行S5。
利用FORK和JOIN语句实现这种派生和汇合关系,将程序改写为:
FORK20
10G=A*B(进程S1)
GOTO30
20H=C/D(进程S2)
30JOIN2
FORK40
I=G*H(进程S3)
GOTO50
40J=E+F(进程S4)
50JOIN2
Z=I+J(进程S5)
执行这个程序可用两台处理机:
假定最初的程序是在处理机1上运行的,遇到FORK20语句时就分出一个处理机(假定是2)去执行S2,而处理机1接着执行下面的S1。
如果Sl执行时间较短,当它结束时遇到JOIN语句,S2尚在执行,处理机1从S1释放,因无其它任务处于空闲。
随后当S2结束时,由于已与S2汇合,便可以通过JOIN语句,由处理机2继续执行后续的FORK40语句。
这条语句又派生出S4,分配给空闲的处理机1,而处理机2接着执行S3。
同样,等S4和S3都先后结束,才满足JOIN语句的汇合条件,经GOTO50进入S5。
其执行过程资源时间图。
图2.4在2台处理机上运行的资源时间图
上例仅用来说明FORK和JOIN语句的意义,用它们单纯实现语句间的并行是没有意思的,因为增加的语句开销超过了受益。
2.使用块结构语言来表示并行性
块结构语言与FORK-JOIN语句在概念上是等价的,但使用更为方便。
它用cobegin-coend(或parbegin-parend)将所有可并行执行的语句或进程前后括起来,以显式表明它们可并行执行。
begin
S0;
cobeginSl;
S2;
…Sn;
coend
Sn+1;
end
其中,Sl,S2,…,Sn为可并行执行的语句。
而语句Sn+1则必须在S1…Sn全部执行完后,方可开始执行。
每一组的并行语句只有一个入口和出口,因此符合结构化程序设计要求。
此外,并行语句中所定义的各个进程互相独立,具有不相交性,即每个语句所能修改的变量只属于该进程专有的局部变量。
虽然不相交进程间可使用共享变量,但只能读,不可修改。
并行语句还可任意嵌套使用。
So;
cobegin
S1;
S2;
cobeginS3;
S4;
S5;
S6;
S7;
coend
S8;
End
图2.5中示出了嵌套执行情况。
在循环程序中通常可找到可并行执行的语句,此时可用并行循环parfor语句来表示这种并行性。
例如,若要进行矩阵运算C=A×
B,其中A为一个n×
n的矩阵,而B和C则均为n×
l的列向量。
下面列出用parfor语句的求解算法,它能派生出p个独立进程。
假定p能整除n,则有s=n/p:
parfori=1untilpdo
forj=(i-1)s+1untils×
ido
C(j)=0;
fork=1untilndo
C(j)=C(j)+A(j,k)×
B(k);
每个被派生的进程,根据不同的i值计算最外层begin-end之间的语句。
为方便说明起见,不妨假设n=12,p=4,则执行parfor语句将派生出四个独立进程,分别对应于i=1,2,3,4。
此后,这四个进程可并行执行最外层begin-end之间的语句。
对i=1的独立进程,将得到最终计算结果,C
(1),C
(2)和C(3)。
对i=2的独立进程,将得到最终计算结果:
C(4),C(5)和C(6)。
而对i=3和i=4的两个独立进程,则分别得到最终计算结果:
C(7)~C(9)和C(10)~C(12)。
与parfor语句类似的还有Doall–Endall语句。
例子:
共享存储型多处理机上执行下列FORTRAN程序:
L1:
DO10I=1,N
L2:
A(I)=B(I)+C(I)
L3:
10Continue
L4:
SUM=0
L5:
DO20J=1,N
L6:
SUM=SUM+A(J)
L7:
20Continue
共享存储多处理机结构如图2.6所示。
假设:
L2,L6每行要用一个机器周期。
L1,L3,L4,L5,L7所需时间可以忽略。
所有数组已经装入主存,程序已装入Cache中(取指令和加载数据可以忽略不计)。
忽略总线争用或存储器访问冲突。
上面的程序实际上把数组B(I)和C(I)相加,最后得到一个总和。
在单机系统中,2N个周期可以完成上述的操作:
I循环中执行N次独立迭代需要N个周期;
J循环中执行N次迭代也需要N个周期。
在共享存储型的多处理机系统上:
假设有M台处理机,可以将循环分成M段,每段有L=N/M个元素。
代码如下所示:
Doallk=1,M
Do10I=(k-1)*L+1,k*L
A(I)=B(I)+C(I)
10Continue
SUM(k)=0
Do20J=1,L
SUM(k)=SUM(k)+A((k-1)*L+J)
20Continue
Endall
分段的I循环可以在L个周期中完成;
分段的J循环在L个周期中产生M个部分和。
所以产生所有的M个部分和共需要2L个周期(还需要将这些部分和合并)。
假设经过共享存储器的处理机之间的每次通信操作需要k个周期。
设N=32,M=8,则经过2L(即8个周期)后在8台处理机上各有一个部分和,还需要8个数相加。
为了合并部分和,可以设计一个l层的二进制加法树,其中l=log2M,加法树用l*(k+1)个周期从树叶到树根顺序合并M个部分和,如下:
二进制加法树:
图2.7二进制加法树
所以,多处理机系统需要
才能得到最终的结果。
假定数组中有N=220个元素,顺序执行需要2N=221个机器周期,假设机器间通信的开销平均值为k=200个周期,则在M=256台处理机的并行执行需要:
2.4为什么要开发并行处理技术
对单用户,可以提高加速比;
对多用户,可以提高吞吐率。
1.重大挑战性课题要求:
1)局部灾害性天气预报需要10GFlops—100GFlops的巨型机。
2)三维地质勘探中的数据采集及处理需要100GFlops的机器。
3)航空航天领域研究三维翼型对飞机性能的影响。
需要千亿次计算机。
4)计算空气动力学:
千亿次/秒(1011)
5)图像处理:
百亿次/秒(1010)
AI:
万亿次/秒(1012)
6)数值模拟核武器的核爆炸等
2.解决方案
只有开发并行处理技术才能实现上述重大挑战性科学计算题目对计算机系统的要求:
计算机系统的3T性能,即lTFLOPS的计算能力,1TB的主存容量和1TB/s的I/O带宽。
3Tperformance:
1TeraflopsofComputingPower
1TeraByteofMainMemory
1TeraByte/sofI/Obandwidth
2.5并行处理计算机结构
2.5.1向量机
向量机常建立在标量处理机上,其结构如图2.8所示:
图2.8向量超级计算机的系统结构
程序和数据进入主机后,指令先在标量控制器(Scalarcontrolunit)译码,如是标量或控制操作指令,则在标量功能流水部件种执行。
如果是向量指令,则进入向量控制部件。
2.5.2SIMD计算机
SIMD(Single
Instruction
Mutiple
Datastream
单指令流多数据流)计算机模型。
它在同一个控制器的管理下,有多个处理单元。
所有处理单元均接受控制部件广播来的同一条指令,但是他们的操作对象是不同的数据。
SIMD计算机的结构如图2.9所示。
SIMD计算机的操作模型可用五元组表示:
S=<
N,C,I,M,R>
N为机器的处理单元数;
C为控制部件可直接执行的指令集,包括标量和程序流控制指令;
I是CU广播至所有PE进行执行的指令集;
M为屏蔽方案集(将PE划分为允许操作和禁止操作两部分);
R是数据寻经功能集,包括网络结构,多功能开关(多级交叉开关)。
图2.9SIMD计算机的操作模型
MasParMP-1:
可有1024~16384个处理器(与机器的配置有关)。
在16KPEs,32位整数运算,16KB局部存储器模块的配置下,可达26Gips,单精度浮点运算1.5GFlops,双精度浮点运算650MFlops。
CM-2(ConnectionMachine,连接机):
65536个处理单元,峰值速率为28GFlops,持续速率5.6GFlops。
Flops:
不仅随整数、浮点数的混合比例变化,而且还随快和慢浮点运算操作的混合比例的不同而变化。
Gips:
只适用于标量机,可包括服务性指令:
存取数,转移等。
2.5.3共享存储型多处理机(Shared-MemoryMultiprocessors)
亦称对称型多处理机,有三种模型。
1.UMA(Uniform-memory-access,均匀存储器存取)model
物理存储器被所有处理机均匀共享,所有处理机对所有存储字具有相同的存取时间——均匀存储器存取。
适用于描述多用户的一般应用和分时应用,加快单个大程序的执行。
系统对称:
所有处理机都能同样访问所有外设,同样地执行程序。
每台处理机可以含私有的高速缓存,外设也以一定形式共享。
2.NUMA(NonUniform-memory-access,非均匀存储器存取)model
访问时间随存储字的位置不同而变化。
访问本地存储器比较快,访问其它存储器要经互连网而产生附加延迟。
图2.11共享本地存储器
共享存储器物理上是分布在所有处理机的本地存储器上。
所有本地存储器的集合组成了全局地址空间,可被所有处理机访问。
另一种有几个机群的NUMA模型,如图2.12所示。
这种多处理机系统还可组织全局共享存储器,形成具有三种不同的访存模式。
处理机被分成几个机群,每个机群本身是UMA或NUMA多处理机。
处理机访问本地存储器最快,访问全局存储器次之,访问远程存储器最慢。
3.COMA(Cache-onlymemoryarchitecture,高速缓存的存储器结构)
只用高速缓存的多处理机,全部高速缓存组成了全局地址空间。
远程高速缓存访问则借助于分布高速缓存目录进行。
2.5.4分布存储型多处理机(Distributed-MemoryMultiprocessors)
图2.14所示的是分布存储型多处理机系统。
系统由多个称之为结点的处理机通过消息传递网络互相连接而成。
图2.14分布存储型多处理机系统的一般模型
消息传递网络提供结点之间点到点的静态连接。
所有本地存储器都是私有的,只有本地的处理机才能访问。
IntelParagonXP/s:
采用50MHz的i860处理器,每个节点16-128MB主存储器,采用2D-Mesh互连,浮点运算5-300GFlops,或2.8-160Gips。
nCube2SModel80:
有4096-8192个PE,主存储器16384-262144MB,浮点运算163.8-34GFlops,整数运算61-123GIPS。
2.5.5四类实用的并行系统
1.向量机与多向量机
硬、软件技术相对成熟、应用广泛、市场占有率高。
很难达到3Tperformance来解决重大挑战问题。
2.SMP
SMP:
(SharedMemorymultiprocessors,共享存储型多处理机,也称对称式多处理机)
处理机之间无主从之分,对外有相同的访问权,都有执行操作系统核心和I/O服务程序的能力。
共享存储器、统一地址空间,系统编程比较容易。
CPU可多至16台左右,做服务器用,市场前景好。
典型的SMP有:
SunSPARCserver1000
SunSPARCcenter2000
SGIPowerChallenge
SGIPowerChallengeL:
2-6CPU,1.8GFlops
SGIPowerChallengeXL:
2-18CPU,5.4GFlops
*64位MIPSchip,每周期指令发射数为4
*8路交错主存、带宽为1.2GB/s
*I/O带宽320MB/s(每个控制器),配置4个可达1.2GB/s
3.MPP系统(MassivelyParallelProcessing,大规模并行处理)
多于100个PE,消息传递,分布存储,可扩展,多线程,共享虚拟存储的系统结构;
适用于大规模并行处理,价格昂贵,市场有限;
持续速度是峰值速度的3-10%;
峰值可达3Tperformance,可解决某些GrandChallenge问题,是国家综合实力的象征。
4.机群系统
特点:
投资风险小,软件财富继承性好;
可构成异构系统,资源利用率高;
通