并行计算基础知识
一个程序同时启动多份, 形成多个独立 的进程,在不同的处理机上运行,拥有 独立的内存空间,进程间通信通过调用 MPI函数来实现;
SPMD模式:单程序多数据流 模式: 模式
可执行代码 运行 复制多份并独立执行, 形成多个独立的进程
进 程 一 ( 内 存 ) 存 内 ( 二 程
ቤተ መጻሕፍቲ ባይዱ
进
进 程 三 ( 内 存 )
可并行处理
如何将串行程序改为并行
为理解创建一个并行程序中的步骤, 为理解创建一个并行程序中的步骤, 让 我们首先定义三个重要的概念: 任务, 我们首先定义三个重要的概念 任务, 进程和处理器。 进程和处理器。
任务
任务是程序要完成的一个工作, 任务是程序要完成的一个工作, 其内容 和大小是随意的, 和大小是随意的, 它是并行程序所能处 理的并发性最小的单元; 理的并发性最小的单元 即一个任务只能 由一个处理器执行, 由一个处理器执行, 处理器之间的并发 性只能在任务之间开发。 性只能在
组织进程间的通讯。即将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
MPI标准的实现包括MPICH、LAM、IBM MPL等多个版本,最常用和稳定的是 MPICH。它提供了与C、Fortran语言的 绑定。
我们可以将MPI看成一个“库” ,目前 使用的消息传递库是MPICH 1.2,共有上 百个接口,在FORTRAN 77和C语言中可 以直接对这些函数进行调用。多个进程 通过调用这些函数(类似调用子程序), 进行通信;
并行计算机的分类
并行向量机(PVP) 对称多处理共享存储多处理机(SMP) 大规模并行处理机(MPP) 工作站(微机)机群(COW) 分布式共享存储多处理机(DSM)
COW(Cluster of Workstation)
一个节点可以是一台PC或SMP; 各节点一般由商品化的网络互连;机群 节点通过使用标准网络协议(TCP/IP) 来通信。使用的是千兆网。 每个节点一般有本地磁盘; 节点上的网络接口是松散耦合到I/O总线 上; 每个节点有一个完整的操作系统,但是通 过中间层实现了单一系统映像(SSI)。
进程
进程 (我们也称为线程) 是一个完成任务 的实体。一个并行程序由许多合作的进 程构成, 每个完成程序中任务的一个子 集。 通过某种分配机制, 任务被分配给 进程 。 进程完成其任务的方式是通过在机器的 物理处理器上执行
进程与处理器的区别
并行化的观点, 处理器是物理资源, 并行化的观点,:处理器是物理资源, 进程是抽象, 进程是抽象, 或者虚拟化多处理器的一 种方便的方式: 我们通过进程, 种方便的方式 我们通过进程, 而不是 处理器来写并行程序; 处理器来写并行程序 将进程映射到处理 器是下一步。 在一次程序的执行中, 器是下一步。 在一次程序的执行中, 进 程数不一定要等于处理器数。 程数不一定要等于处理器数。 如果进程 一个处理器有可能要执行多个进程; 多, 一个处理器有可能要执行多个进程 如果进程少, 如果进程少, 某些处理器则要闲置
例二:矩阵相乘 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];
Include文件
C语言应用程序应有#include “mpi.h” Fortran语言应用程序应有#include ‘mpif.h’
MPI并行编程模式
单程序多数据流模式(SPMD) 多程序多数据流模式(MPMD)
为了降低使用和维护并行应用软件的复杂 度,一般采用SPMD模式
MPI程序的SPMD执行模式
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块的求解。
并行算法的分类
非数值计算并行算法 数值计算并行算法,基于矩阵运算、多 项式求解、线性方程组求解等代数关系 运算的计算问题。
进程 1
进程 2
传统的串行计算 串行计算,分为“指令” 串行计算 和“数据”两个部分,并在程序 执行时“独立地申请和占有”内 存空间,且所有计算均局限于 该内存空间。
进程 1
并行计算基础知识
赵俊锋
西北工业大学理学院 zhaojf_77@
主要内容
并行计算环境 并行算法基础 什么问题可以并行化 串行程序如何改为并行程序
为什么需要并行计算机
问题: 科学和工程问题的数值模拟与仿真 计算密集 数据密集 网络密集 三种混合 要求:在合理的时限内完成计算任务 秒级 制造业 分钟级 短时天气预报(当天) 小时级 中期天气预报(3~10日) 尽可能快 长期天气预报(气候) 可计算 湍流模拟
进程 2
发送信息
接收信息
并行计算将进程相对独立的 并行计算 分配于不同的节点上,由 各自独立的操作系统调度, 享有独立的CPU和内存资源 (内存可以共享);进程间 相互信息交换通过消息传递;
进程间通信
现代操作系统提供基本的系统调用函数, 允许位于同一台处理机或不同处理机的 多个进程之间相互交流信息,操作具体 表现为三种形式:通信、同步和聚集。 以上的三种形式统称为进程间通信,操 作的具体数据对象为消息,具体的操作 为消息传递。
数据
例一
进程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的路 径设置
通信
进程间的数据传递称为进程间通信。 在同一台处理机中,通信可以读/写操作 系统提供的共享数据缓存区来实现。 不同处理机中,通信可以通过网络来实 现。
同步
同步是使位于相同或不同处理机中的多 个进程之间的相互等待的操作,它要求 进程的所有操作均必须等待到达某一控 制状态之后才并行。
聚集
聚集将位于相同后不同处理机中的多个 进程的局部结果综合起来,通过某种操 作,例如最大值、最小值、累加和,产 生一个新的结果,存储在某个指定的或 者所有的进程变量中。
并行编程环境
共享存储的模型和语言(适于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)
MPI(Message Passing Interface)
在当前所有的消息传递软件中, 最重要最 流行的是MPI, 它能运行在所有的并行平 台上。 程序设计语言支持C, Fortran等。
MPI已经成为一种标准, 它以与语言独 立的形式来定义这个接口库, 这个定义 不包含任何专用于某个特别的制造商、 操作系统或硬件的特性. 由于这个原因, MPI在并行计算界被广泛地接受.
串行程序并行化的几个步骤
从一个串行程序得到一个并行程序的工 作由四个步骤构成: 1. 将计算的问题分解成任务 2. 将任务分配给进程 3 . 在进程 之间组 织必要 的数据 访问, 通信, 和同步。 4. 将进程映射或绑定到处理器
估计并行的效率
在以上的几个步骤中,并没有考虑并行 的效率问题。 考虑到消息传递的开销是计算开销的10 倍以上,一般来说,如果在应用的一部 分中,计算的时间是分钟级的而数据传 输的时间是秒级的,那么这一部分可以 并行执行。
并行实现
先将矩阵分块
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在处理 机中每次循环向前移动一个处理机。
什么可以并行
能否将顺序执行的程序转换成语义等价 的、可并行执行的程序,主要取决于程 序的结构形式,特别是其中的数据相关 性。
数据相关