并行计算基础知识
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C0 A0 C A 1 = 1 × B , B ,L B 0 1 p −1 M M C p −1 Ap −1
[
]
对应于前面所提到的四个步骤,矩阵乘 法并行算法可做如下表述: 1、将问题(矩阵乘法)分成p个任务, 即将C的求解分成p块。 2、每个进程对应一个C块的求解。
MPI(Message Passing Interface)
在当前所有的消息传递软件中, 最重要最 流行的是MPI, 它能运行在所有的并行平 台上。 程序设计语言支持C, Fortran等。
MPI已经成为一种标准, 它以与语言独 立的形式来定义这个接口库, 这个定义 不包含任何专用于某个特别的制造商、 操作系统或硬件的特性. 由于这个原因, MPI在并行计算界被广泛地接受.
什么任务适合在超级计算环境 内运行?
一般来说,计算量极大而使PC不能满足要求或 者根本不能计算的任务是适合在超级计算环境 中运行的。比如, (1)需要分布式并行处理的科学计算任务,包 括:由于对计算资源要求过大而使现在的硬件 条件无法满足要求的计算任务,通过将串行源 代码改编为并行源代码来进行计算,或者有通 行的并行计算程序(商业或非商业); (2)虽然可以计算但是时间过长的问题等。
显然,P1和P2不能并行执行。
数据反相关
P1: A=B×C P2: C=E+D
P1通过变量C数据相关于P2。为保证语义正确性, 必须等P1将变量C读出后,P2方可向变量C进行 写入操作,即必须先读后写。
也不可并行化
数据输出相关
P1: A=B+C P2: A=D×E
为保证语义正确性,必须保证P1先写入A,然后允许P2再写入A。
Include文件
C语言应用程序应有#includຫໍສະໝຸດ Baidu “mpi.h” Fortran语言应用程序应有#include ‘mpif.h’
MPI并行编程模式
单程序多数据流模式(SPMD) 多程序多数据流模式(MPMD)
为了降低使用和维护并行应用软件的复杂 度,一般采用SPMD模式
MPI程序的SPMD执行模式
除了上述3种相关外,还存在一种特殊情况,即两个程序段的 输入变量互为输出变量。此时,两者必须并行执行,方可保证 语义的正确性。这就要求硬件机构能保证两者进行同步读写。 但若两个处理机各带有局部存储器,则可降低同步要求。
相关性与可并行化
伯恩斯坦准则
I1∩O2=Φ,即P1的输入变量集与P2的输出变量集不相交; I2∩O1=Φ,即P2的输入变量集与P1的输出变量集不相交; O1∩O2=Φ,即P1和P2的输出变量集不相交
并行计算机的分类
并行向量机(PVP) 对称多处理共享存储多处理机(SMP) 大规模并行处理机(MPP) 工作站(微机)机群(COW) 分布式共享存储多处理机(DSM)
COW(Cluster of Workstation)
一个节点可以是一台PC或SMP; 各节点一般由商品化的网络互连;机群 节点通过使用标准网络协议(TCP/IP) 来通信。使用的是千兆网。 每个节点一般有本地磁盘; 节点上的网络接口是松散耦合到I/O总线 上; 每个节点有一个完整的操作系统,但是通 过中间层实现了单一系统映像(SSI)。
进程
进程 (我们也称为线程) 是一个完成任务 的实体。一个并行程序由许多合作的进 程构成, 每个完成程序中任务的一个子 集。 通过某种分配机制, 任务被分配给 进程 。 进程完成其任务的方式是通过在机器的 物理处理器上执行
进程与处理器的区别
并行化的观点, 处理器是物理资源, 并行化的观点,:处理器是物理资源, 进程是抽象, 进程是抽象, 或者虚拟化多处理器的一 种方便的方式: 我们通过进程, 种方便的方式 我们通过进程, 而不是 处理器来写并行程序; 处理器来写并行程序 将进程映射到处理 器是下一步。 在一次程序的执行中, 器是下一步。 在一次程序的执行中, 进 程数不一定要等于处理器数。 程数不一定要等于处理器数。 如果进程 一个处理器有可能要执行多个进程; 多, 一个处理器有可能要执行多个进程 如果进程少, 如果进程少, 某些处理器则要闲置
并行算法的分类
非数值计算并行算法 数值计算并行算法,基于矩阵运算、多 项式求解、线性方程组求解等代数关系 运算的计算问题。
进程 1
进程 2
传统的串行计算 串行计算,分为“指令” 串行计算 和“数据”两个部分,并在程序 执行时“独立地申请和占有”内 存空间,且所有计算均局限于 该内存空间。
进程 1
可并行处理
如何将串行程序改为并行
为理解创建一个并行程序中的步骤, 为理解创建一个并行程序中的步骤, 让 我们首先定义三个重要的概念: 任务, 我们首先定义三个重要的概念 任务, 进程和处理器。 进程和处理器。
任务
任务是程序要完成的一个工作, 任务是程序要完成的一个工作, 其内容 和大小是随意的, 和大小是随意的, 它是并行程序所能处 理的并发性最小的单元; 理的并发性最小的单元 即一个任务只能 由一个处理器执行, 由一个处理器执行, 处理器之间的并发 性只能在任务之间开发。 性只能在
并行实现
先将矩阵分块
B = [B0 , B1 , L BP −1 ]
A = A , A ,L A
T 0 T 1
[
T T P −1
],
将 Ai , Bi和Ci , j , j = 0,L, p − 1 存放在 P 中, i 使数据在处理机中不重复。 矩阵A在各自进程中保持不变,B在处理 机中每次循环向前移动一个处理机。
并行编程环境
共享存储的模型和语言(适于PVP, SMP, DSM) 共享存储 X3H5, Pthread OpenMP 消息传递的模型和语言 适于MPP, 的模型和语言( 消息传递的模型和语言(适于MPP, Cluster, COW) MPI (Fortran, C, Gamess, Vasp) (Fortran, Vasp) PVM (Fortran, C) (Fortran, C) 数据并行的模型和语言 适于在MPP/Cluster上实现 的模型和语言( 上实现SPMD应用 应用) 数据并行的模型和语言(适于在MPP/Cluster上实现SPMD应用) Fortran 90 HPF(High Performance Fortran)
并行计算基础知识
赵俊锋
西北工业大学理学院 zhaojf_77@sina.com
主要内容
并行计算环境 并行算法基础 什么问题可以并行化 串行程序如何改为并行程序
为什么需要并行计算机
问题: 科学和工程问题的数值模拟与仿真 计算密集 数据密集 网络密集 三种混合 要求:在合理的时限内完成计算任务 秒级 制造业 分钟级 短时天气预报(当天) 小时级 中期天气预报(3~10日) 尽可能快 长期天气预报(气候) 可计算 湍流模拟
一个程序同时启动多份, 形成多个独立 的进程,在不同的处理机上运行,拥有 独立的内存空间,进程间通信通过调用 MPI函数来实现;
SPMD模式:单程序多数据流 模式: 模式
可执行代码 运行 复制多份并独立执行, 形成多个独立的进程
进 程 一 ( 内 存 ) 存 内 ( 二 程
进
进 程 三 ( 内 存 )
MB P/C M B LD NIC 定制网络 IOB
MB P/C M B LD NIC IOB
并行机软件环境
操作系统方面:RatHat9.0 程序设计语言:Fortran 77、 Fortran 90、 C/C++等
什么是并行算法
算法是解题的精确描述,是一组有穷的 规则,它规定了解决某一特定类型问题 的一系列运算。并行计算时可同时求解 的诸进程的集合,这些进程相互作用和 协调动作,并最终获得问题的求解 并行算法就是对并行计算过程的精确描 述
组织进程间的通讯。即将B的各个子块 send()到各个进程。 通过mpirun运行,将进程映射到处理器上。
并行描述
for i = 0 to p - 1 do l = i+myid mod p Cl = A * B, mp1 = myid+1 mod p, mm1 = myid-1 mod p if i != p- 1, send(B, mm1), recv(B, mp1) Endfor
例二:矩阵相乘 C = A× B
其中A 和B 分别是m k 和k n 矩阵, C 是 × × ×m n 矩阵. 不失一般性, 假设m× m p, = ×k = k p和n = n p。 ×
串行程序
double a[N][N],b[N][N],c[N][N]; for (i=0; i<N; i++) for (j=0; j<N; j++) for (k=0; k<N; k++) c[i][j]+=a[i][k]*b[k][j];
什么可以并行
能否将顺序执行的程序转换成语义等价 的、可并行执行的程序,主要取决于程 序的结构形式,特别是其中的数据相关 性。
数据相关
P1: A=B+C P2: D=A×B
其中,变量A是导致P1和P2发生数据相关的原因。为 A P1 P2 了保证程序执行的语义正确性,变量A必须是先在P1 中写入后方可从P2中读出,即必须先写后读。
进程 2
发送信息
接收信息
并行计算将进程相对独立的 并行计算 分配于不同的节点上,由 各自独立的操作系统调度, 享有独立的CPU和内存资源 (内存可以共享);进程间 相互信息交换通过消息传递;
进程间通信
现代操作系统提供基本的系统调用函数, 允许位于同一台处理机或不同处理机的 多个进程之间相互交流信息,操作具体 表现为三种形式:通信、同步和聚集。 以上的三种形式统称为进程间通信,操 作的具体数据对象为消息,具体的操作 为消息传递。
串行程序并行化的几个步骤
从一个串行程序得到一个并行程序的工 作由四个步骤构成: 1. 将计算的问题分解成任务 2. 将任务分配给进程 3 . 在进程 之间组 织必要 的数据 访问, 通信, 和同步。 4. 将进程映射或绑定到处理器
估计并行的效率
在以上的几个步骤中,并没有考虑并行 的效率问题。 考虑到消息传递的开销是计算开销的10 倍以上,一般来说,如果在应用的一部 分中,计算的时间是分钟级的而数据传 输的时间是秒级的,那么这一部分可以 并行执行。
数据
例一
进程0发送一个整数给进程1;进程1将 该数加1,传递给进程2;进程2再将该 数加1,再传递给进程3;依次类推,最 后,进程N-1将该数传递给进程0,由进 程1负责广播该数给所有进程,并打印 输出。
进程 0
传递信息
进程 1
传递信息
进程 2
传递信息
进程 3
传递信息
编译运行命令
mpif77 –o exam exam.f mpirun –np 4 exam 其中,exam.f指需要编译的源文件,-o 表示生成输出文件,exam指输出文件名, -np表示进程数。 使用mpicc和mpif77省略了有关MPI的路 径设置
通信
进程间的数据传递称为进程间通信。 在同一台处理机中,通信可以读/写操作 系统提供的共享数据缓存区来实现。 不同处理机中,通信可以通过网络来实 现。
同步
同步是使位于相同或不同处理机中的多 个进程之间的相互等待的操作,它要求 进程的所有操作均必须等待到达某一控 制状态之后才并行。
聚集
聚集将位于相同后不同处理机中的多个 进程的局部结果综合起来,通过某种操 作,例如最大值、最小值、累加和,产 生一个新的结果,存储在某个指定的或 者所有的进程变量中。
MPI标准的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是 MPICH。它提供了与C、Fortran语言的 绑定。
我们可以将MPI看成一个“库” ,目前 使用的消息传递库是MPICH 1.2,共有上 百个接口,在FORTRAN 77和C语言中可 以直接对这些函数进行调用。多个进程 通过调用这些函数(类似调用子程序), 进行通信;
单一系统映像
单一系统映像(Single System Image,SSI) 并不是指系统中仅有唯一的操作系统映像驻留 在内存,而只是感觉上,像一个单一系统。 其基本特征是单一系统、单一控制、对称性、 位置透明。采用SSI的主要目的,是使机群的使 用、控制和维护似乎和一台工作站一样。 单一系统映像包括单一入口点、单一文件层次 结构、单一I/O空间、单一网络、单一作业管理 系统、单一存储空间和单一进程空间。