周纯葆 中国科学院计算机网络信息中心 超级计算中心

Slides:



Advertisements
Similar presentations
MPI 简介 MPI 及其历史: 消息传递接口( Message Passing Interface ,简称 MPI )是 一种编程接口标准,而不是一种具体的编程语言。 由消息传递接口论坛( Message Passing Interface Forum , 简称 MPIF )发起讨论并进行规范化的。
Advertisements

高级服务器设计和实现 1 —— 基础与进阶 余锋
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
赵永华 中科院计算机网络信息中心 超级计算中心
郎显宇 中国科学院计算机网络信息中心 超级计算中心
第一章 C语言概述 计算机公共教学部.
周纯葆 中国科学院计算机网络信息中心 超级计算中心
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
Oracle数据库 Oracle 子程序.
机群应用开发 并行编程原理及 程序设计 Parallel Programming: Fundamentals and Implementation 曙光信息产业有限公司 2017年9月 2017年9月 MPI并行程序设计.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
计算机基础知识 丁家营镇九年制学校 徐中先.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
MPI并行程序设计简介 曙光信息产业(北京)有限公司 2018年11月.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
OpenMP简介和开发教程 广州创龙电子科技有限公司
并行算法实践.
消息传递并行编程环境 王彦棡 2010年5月.
并行编程原理及 程序设计 Parallel Programming: Fundamentals and Implementation
机群应用开发 并行编程原理及 程序设计 Parallel Programming: Fundamentals and Implementation 曙光信息产业股份有限公司 解决方案中心 高性能计算方案部 年11月.
编译原理与技术 类型检查 2018/11/21 《编译原理与技术》-类型检查.
MPI并行编程      报告人:李俊照.
第四讲 MPI并行程序设计 课程网站:CourseGrading buaa.edu.cn 主讲教师: 赵长海
并行计算.
并行算法实践 上篇 并行程序设计导论.
基于MPI的并行程序设计 王振海 西北工业大学理学院 西北工业大学高性能计算研究与发展中心 2018/11/28.
存储系统.
辅导课程六.
Chapter 2 Basic Elements of Fortran
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
重點 資料結構之選定會影響演算法 選擇對的資料結構讓您上天堂 程式.
Ch9 Communicating with Hardware
第4章 常量和变量 常量和变量都是程序中预留的用于保存数据的内存空间。常量的值在程序运行过程中始终不会发生变化。而变量的值在程序的运行过程中是可以变化的。在Fortran语言中,有五种基本的数据类型可供使用。他们分别是整型(INTEGER)、实型(REAL)、复型(COMPLEX)、字符型(CHARACTER)和逻辑型(LOGICAL)。按用途,又可以分数值型、字符型和逻辑型三种。相应的常量和变量也可以分为这三种。本章将按照用途介绍常量和变量的基本概念。
逆向工程-汇编语言
CPU结构和功能.
并行计算简介 高性能事业部:曹振南 年4月.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第二章 类型、对象、运算符和表达式.
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二章 基本数据类型 ——数据的表示.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 指针类型.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 结构体.
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
Google的云计算 分布式锁服务Chubby.
本章主題 C++的程式結構 資料型態與宣告 算術運算 簡易的輸入輸出指令 程式編譯(Compile)的過程與原理.
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
變數與資料型態  綠園.
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

周纯葆 中国科学院计算机网络信息中心 超级计算中心 zhoucb@sccas.cn MPI编程基础 周纯葆 中国科学院计算机网络信息中心 超级计算中心 zhoucb@sccas.cn

提纲 并行计算 MPI预备知识 MPI系统环境管理 点对点通讯 聚合通讯

并行计算 并行计算是指,在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,达到加速求解效果,或者求解大规模应用问题的目的。 重要要素: 并行机 算法设计 并行编程

共享存储 均匀访存(UMA:Uniform Memory Access) 内存与结点分离,存储为所有结点共享 所有结点任意访问存储单元,且时间相同 访存竞争时,仲裁策略平等对待每个处理器 各处理器带有局部高速缓存cache 单一的操作系统映象 对称多处理共享存储并行机 SMP

共享存储 非均匀访存(NUMA: Non-uniform Memory Access) 内存模块局部在各个结点内,所有局部内存构成全局内存 所有结点任意访问各存储单元,但速度和时间不等 访存竞争时,仲裁策略对待每个处理器可能不等价 各处理器带有局部高速缓存cache,以及保持缓存一致性的协议,此又称cache一致性的非均匀存储——ccNUMA 单一操作系统映象 分布共享存储并行机 DSM

分布式存储 内存模块物理分布同前,每个结点拥有局部内存模块 各结点存储模块只能被局部CPU访问 访问其他结点内存,可通过消息传递实现 各结点拥有不同的操作系统映象 结点内和结点间的互连通常都有特殊的技术来提高通讯速度,其操作系统不是开放的,而是制造者专有 大规模并行机 MPP

混和存储 结点内部是共享存储模型 结点间是分布式存储模型 各结点拥有不同的操作系统映象

并行编程 共享存储系统 (SMP, DSM) 分布式存储系统 (MPP) 混合式存储系统 进程通过读写共享数据缓存区实现 OpenMP 消息传递接口 分布式存储系统 (MPP) 混合式存储系统 MPI+OpenMP混合编程 进程通过读写共享数据缓存区实现 通过socket网络通信实现 通过socket网络通信实现

提纲 并行计算 MPI预备知识 MPI系统环境管理 点对点通讯 聚合通讯

Message Passing Interface 什么是MPI (Message Passing Interface) 是函数库规范,而不是并行语言;操作如同库函数调用 是一种标准和规范,而非某个对它的具体实现(MPICH等),与编程语言无关 是一种消息传递编程模型,并成为这类编程模型的代表 什么是消息(message)? DATA+ENVELOPE MPI是一种实现手段

MPI编程

MPI编程 头文件: MPI函数调用: C include file Fortran include file #include "mpi.h" include 'mpif.h' C Binding Format: rc = MPI_Xxxxx(parameter, ... ) Example: rc = MPI_Bsend(&buf,count,type,dest,tag,comm) Error code: Returned as "rc". MPI_SUCCESS if successful Fortran Binding Format: CALL MPI_XXXXX(parameter,..., ierr) call mpi_xxxxx(parameter,..., ierr) Example: CALL MPI_BSEND(buf,count,type,dest,tag,comm,ierr) Error code: Returned as "ierr" parameter. MPI_SUCCESS if successful

编译与运行 程序编译 程序运行 C: mpicc -o mpiprog mpisrc.c Fortran 77: mpif77 -o mpiprog mpisrc.f90 程序运行 mpirun -np 4 ./mpiprog 单处理器 (tp5) 运行4个进程 4个处理器 (tp1, tp2, tp3, tp4) 分别运行4个进程

程序流程

使用进程的地址空间,有私有栈,各线程栈不相交 进程与线程 进程与线程 进程 操作系统资源分配的最小单位 资源特征 + 执行特征 比喻为管家 至少包含一个线程 拥有自己的地址空间 线程 操作系统调度执行的最小单位 继承 执行特征 比喻为苦力 属于某个进程 使用进程的地址空间,有私有栈,各线程栈不相交

进程 单个进程(process) 进程与程序相联,程序一旦在操作系统中运行即成为进程。进程拥有独立的执行环境(内存、寄存器、程序计数器等),是操作系统中独立存在的可执行的基本程序单位 串行应用程序编译形成的可执行代码,分为“指令”和“数据”两个部分,并在程序执行时“独立地申请和占有”内存空间,且所有计算均局限于该内存空间。 进程1 进程2 内存

进程 包含于通过网络联接的不同处理器的多个进程 进程独立存在,并位于不同的处理器,由各自独立的操作系统调度,享有独立的CPU和内存资源 进程间相互信息交换,可依靠消息传递 最基本的消息传递操作包括发送消息send、接受消息receive、进程同步barrier、归约reduction等

提纲 并行计算 MPI预备知识 MPI系统环境管理 点对点通讯 聚合通讯

初始化MPI系统 C: Fortran 77: 通常为第一个调用的MPI函数,除MPI_Initialized外 int MPI_Init(int *argc, char *argv[]) Fortran 77: MPI_INIT(IERROR) INTEGER IERROR 通常为第一个调用的MPI函数,除MPI_Initialized外 只被调用一次 在C接口中,MPI系统通过argc和argv得到命令行参数

获取进程数和标号 C: Fortran 77: int MPI_Comm_size(MPI_Comm comm, int *size) int MPI_Comm_rank(MPI_Comm comm, int *rank) Fortran 77: MPI_COMM_SIZE(COMM, SIZE, IERROR) MPI_COMM_RANK(COMM, RANK, IERROR) INTEGER COMM, SIZE, RANK, IERROR

退出MPI系统 C: Fortran 77: int MPI_Finalize(void) MPI_FINALIZE(IERROR) 用户在调用该函数前,应确保非阻塞通讯结束

异常终止MPI程序 C: Fortran 77: int MPI_Abort(MPI_Comm comm, int errorcode) MPI_ABORT(COMM, ERRORCODE, IERROR) INTEGER COMM, ERRORCODE, IERROR 在出现了致命错误而希望异常终止MPI程序时执行 MPI系统会设法终止comm通信器中所有进程 输入整型参数errorcode,将被作为进程的退出码返回给系统

获取处理器的名称 C: MPI_Get_processor_name(char *name, int *resultlen) Fortran 77: MPI_GET_PROCESSOR_NAME(NAME, RESULTLEN, IERR) 在返回的name中存储所在处理器的名称 resultlen存放返回名字所占字节 应提供参数name不少于MPI_MAX_PRCESSOR_NAME个字节的存储空间

获取墙上时间 C: Fortran 77: double MPI_Wtime(void) DOUBLE PRECISION MPI_WTIME() 返回调用时刻的墙上时间,用浮点数表示秒数 经常用来计算程序运行时间

提纲 并行计算 MPI预备知识 MPI系统环境管理 点对点通讯 聚合通讯

点对点通讯 两个进程之间的通信 源进程发送消息到目标进程 目标进程接收消息 通信发生在同一个通信器内 进程通过其在通信器内的标号表示 1 2 3 4 5 destination source communicator 两个进程之间的通信 源进程发送消息到目标进程 目标进程接收消息 通信发生在同一个通信器内 进程通过其在通信器内的标号表示 MPI系统的通信方式都建立在点对点通信之上

阻塞式消息发送 C: int MPI_Send(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) Fortran 77: MPI_SEND(BUF, COUNT, DATATYPE, DEST, TAG, COMM, IERROR) count 不是字节数,而是指定数据类型的个数 datatype可是原始数据类型,或为用户自定义类型 dest取值为0~np-1,或MPI_PROC_NULL (np是comm中的进程总数) tag 取值范围是 0~MPI_TAG_UB,用来区分消息

阻塞式消息接收 C: int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) Fortran 77: MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR) count是接受缓存区的大小,表示接受上界,具体接受长度可用MPI_Get_count 获得 source 取值范围是 0~np-1,或MPI_PROC_NULL和MPI_ANY_SOURCE tag 取值范围是 0~MPI_TAG_UB,或MPI_ANY_TAG

消息 (message)

数据类型 C Data Types Fortran Data Types MPI_CHAR signed char MPI_CHARACTER character MPI_SHORT signed short int MPI_INT signed int MPI_INTEGER integer MPI_LONG signed long int MPI_UNSIGNED_CHAR unsigned char MPI_UNSIGNED_SHORT unsigned short int MPI_UNSIGNED unsigned int MPI_UNSIGNED_LONG unsigned long int MPI_FLOAT float MPI_REAL real MPI_DOUBLE double MPI_DOUBLE_PRECISION double precision MPI_LONG_DOUBLE long double MPI_BYTE 8 binary digits MPI_PACKED MPI_Pack()

标准阻塞式通信 是否对发送数据进行缓存,由MPI系统决定,而非程序员 阻塞:发送成功,意味(1)消息成功发送;(2)或者消息被缓存 接收成功,意味消息已被成功接收

消息传递成功 发送进程需指定一个有效的目标接收进程 接收进程需指定一个有效的源发送进程 接收和发送消息的进程要在同一个通信器内 接收和发送消息的 tag 要相同 接收缓存区要足够大

消息传递例子

其他点对点通讯 捆绑发送与接收 捆绑发送和接收,收发使用同一缓存区 缓存消息发送函数 同步消息发送函数 就绪消息发送函数 MPI_SENDRECV(SENDBUFF, SENDCOUNT, SENDTYPE, DEST, SENDTAG, RECVBUFF, RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM, STATUS, IERR) 捆绑发送和接收,收发使用同一缓存区 MPI_SENDRECV_REPLACE(BUFF, COUNT, DATATYPE, DEST, SENDTAG, SOURCE, RECVTAG, COMM, STATUS, IERR) 缓存消息发送函数 同步消息发送函数 就绪消息发送函数 MPI_Bsend MPI_Ssend MPI_Rsend

阻塞式通信与非阻塞式通信 通信类型 函数返回 对数据区操作 特性 阻塞式通信 阻塞型函数需要等待 指定操作完成返回 或所涉及操作的数据 要被MPI系统缓存安全 备份后返回 函数返回后,对数 据区操作是安全的 程序设计相对 简单 使用不当容易 造成死锁 非阻塞式通信 调用后立刻返回,实 际操作在MPI后台执行 需调用函数等待或查 询操作的完成情况 函数返回后,即操 作数据区不安全。 可能与后台正进行 的操作冲突 可以实现计算 与通信的重叠 程序设计相对 复杂

阻塞式通信与非阻塞式通信

非阻塞式点对点通信

非阻塞式点对点通信

阻塞型与非阻塞型通信函数

提纲 并行计算 MPI预备知识 MPI系统环境管理 点对点通讯 聚合通讯

聚合通讯 一个通信器的所有进程参与,所有进程都调用聚合通信函数 MPI系统保证聚合通信函数与点对点调用不会混淆 聚合通信不需要消息标号 聚合通信函数都为阻塞式函数 聚合通信的功能:通信、同步、计算等 communicator 5 2 1 3 4

三种通信方式 一对多 多对一 多对多

聚合函数列表 MPI_Barrier MPI_Bcast MPI_Gather/MPI_Gatherv MPI_Allgather/MPI_Allgatherv MPI_Scatter/MPI_Scatterv MPI_Alltoall/MPI_Alltoallv MPI_Reduce/MPI_Allreduce/MPI_Reduce_scatter MPI_Scan

同步 该函数用于进程同步,即一个进程调用该函数后需等待通信器内所有进程调用该函数后返回

√ 同步 …… CALL MPI_COMM_RANK(COMM,RANK,IERR) IF(RANK.EQ.0) THEN CALL WORK0(……) ELSE CALL WORK1(……) CALL MPI_BARRIER(COMM,IERR) CALL WORK2(……) …… CALL MPI_COMM_RANK(COMM,RANK,I ERR) IF(RANK.EQ.0) THEN CALL WORK0(……) CALL MPI_BARRIER(COMM,IERR) ELSE CALL WORK1(……) CALL WORK2(……) √

广播

散发

收集

规约

MPI Reduction Operation 规约 MPI Reduction Operation C Data Types Fortran Data Type MPI_MAX maximum integer, float integer, real, complex MPI_MIN minimum MPI_SUM sum MPI_PROD product MPI_LAND logical AND integer logical MPI_BAND bit-wise AND integer, MPI_BYTE MPI_LOR logical OR MPI_BOR bit-wise OR MPI_LXOR logical XOR MPI_BXOR bit-wise XOR MPI_MAXLOC max value and location float, double and long double real, complex,double precision MPI_MINLOC min value and location real, complex, double precision