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

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

高级服务器设计和实现 1 —— 基础与进阶 余锋
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
MPI并行程序设计简介 曙光信息产业(北京)有限公司 2018年11月.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
OpenMP简介和开发教程 广州创龙电子科技有限公司
并行算法实践.
机群应用开发 并行编程原理及 程序设计 Parallel Programming: Fundamentals and Implementation 曙光信息产业股份有限公司 解决方案中心 高性能计算方案部 年11月.
SVN的基本概念 柳峰
第二讲 搭建Java Web开发环境 主讲人:孙娜
第四讲 MPI并行程序设计 课程网站:CourseGrading buaa.edu.cn 主讲教师: 赵长海
并行计算.
基于MPI的并行程序设计 王振海 西北工业大学理学院 西北工业大学高性能计算研究与发展中心 2018/11/28.
SOA – Experiment 3: Web Services Composition Challenge
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
网络常用常用命令 课件制作人:谢希仁.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
Windows网络操作系统管理 ——Windows Server 2008 R2.
Windows网络操作系统管理 ——Windows Server 2008 R2.
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
逆向工程-汇编语言
《手把手教你学STM32》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司 淘宝店铺:
CPU结构和功能.
VSS使用简介 王树升
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
程序设计工具实习 Software Program Tool
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
第四章 团队音乐会序幕: 团队协作平台的快速创建
DQMClientDim.cxx及双光子练习
VisComposer 2019/4/17.
实验一 体验Nachos下的并发程序设计 陈毅东 2006年春.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
第八章 总线技术 8.1 概述 8.2 局部总线 8.3 系统总线 8.4 通信总线.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
WSAAsyncSelect 模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang
阻塞式模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
Presentation transcript:

MPI 简介 MPI 及其历史: 消息传递接口( Message Passing Interface ,简称 MPI )是 一种编程接口标准,而不是一种具体的编程语言。 由消息传递接口论坛( Message Passing Interface Forum , 简称 MPIF )发起讨论并进行规范化的。 MPI 标准如今已经成为事实意义上的消息传递并行编程标 准,也是最为流行的并行编程接口。 MPI 标准定义了一组具有可移植性的编程接口。 典型的实现包括开源的 MPICH 、 LAM MPI 以及不开 源的 INTEL MPI 。

MPI 实现 MPICH :最重要的 MPI 实现 影响力最大、用户最多的 MPI 实现。 由美国 Argonne 国家实验室开发,开发源代码。 支持单程序多数据、多程序多数据编程。 MPICH2 ( unix.mcs.anl.gov/mpi/mpich2/index.htm#download )

MPI 程序特点 MPI 程序是基于消息传递的并行程序; 消息传递指的是并行执行的各个进程具有自己独立 的堆栈和代码段; 各进程作为独立的程序独立执行; 进程间的信息交换完全是通过显示的调用通信函数 来完成。

MPI 程序分类 可分为单程序多数据( Single Program Multiple Data , 简称 SPMD )、多程序多数据( Multiple Program Multiple Data ,简称 MPMD )两种形式。 SPMD :使用一个程序来处理多个不同数据集达到并行的 目的;

单程序多数据 串行执行

单程序多数据 并行执行

多程序多数据 MPMD 使用不同的程序处理多个数据集,合作求解 一个问题。

MPI 程序实例 Linux 系统环境配置 安装配置 Linux 保证 SSH 网络服务程序正常启动; 给每个节点配置 IP ; 配置 /etc/hosts 文件,改文件可以实现 IP 和机器的对应解析, 每个节点都要有这个文件,这样各个节点就可以通过节点 名字进行访问; 配置网络文件系统 NFS ,实现各节点和主节点内容同步更 新,自动实现目录对应,有共享目录; 配置 ssh ,实现 MPI 节点间用户的无密码访问; 安装 MPICH2 ,各节点 MPICH 和用户程序要在相同的目录, 各节点要有副本。

MPI 程序实例

MPI 函数说明 1、 MPI 初始化: MPI_Init 函数 用法: int MPI_Init ( &argc, &argv ) 每一个 MPI 进程调用的第一个 MPI 函数都是 MPI_Init 。该 函数指示系统完成所有的初始化工作,以备对后续 MPI 库 的调用进行处理。 2、 MPI 结束: MPI_Finalize 函数 用法: int MPI_Finalize () 在一个进程执行完其全部 MPI 库函数调用后,将调用函数 MPI_Finalize ,从而让系统释放分配给 MPI 的资源。它是 MPI 程序的最后一条可执行语句,否则程序的运行结果是 不可预知的。

MPI 程序

MPI 程序实例 —— 获取进程标志和机器名 3、确定进程的标识符 用法: int MPI_Comm_rank ( MPI_COMM_WORLD , &id ) 当 MPI 初始化后,每一个活动进程变成了一个叫做 MPI_COMM_WORLD 的通信域中的成员。通信域是一个 不透明的对象,提供了在进程之间传递消息的环境。在一 个通信域内的进程是有序的。在一个有 p 个进程的通信域 中,每一个进程有一个唯一的序号( ID 号),取值为 0~p -1。进程可以通过调用函数 MPI_Comm_rank 来确定它 在通信域中的序号。 4 、确定进程数量 用法: int MPI_Comm_size ( MPI_COMM_WORLD , &p ) 进程通过调用函数 MPI_Comm_size 来确定一个通信域中 的进程总数。

MPI 程序实例 —— 获取进程标志和机器名

MPI 的点对点通信 有消息传递功能的并行程序,消息传递是 MPI 编程的核心功 能,掌握了 MPI 消息传递编程方法就掌握了 MPI 编程的核心。 int MPI_Send(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) 参数说明: buf: 发送缓冲区的起始地址 count: 将要发送的数据的个数 datatype: 发送数据的数据类型 dest: 目的进程标识号 tag: 消息标志 comm :通信域 MPI_Send 将发送缓冲区中的 count 个 datatype 数据类型的数据发送到目 的进程,目的进程在通信域中的标识号是 dest, 本次发送的消息标志是 tag, 使用这一标志,就可以把本次发送的消息和本进程向同一目的进 程发送的其他消息区别开。

MPI 的点对点通信 int MPI_Recv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status status) 参数说明: buf: 接收缓冲区的起始地址 count: 将接收的数据的个数(最多个数) datatype: 接收数据的数据类型 source: 接收数据的来源进程标识号 tag: 消息标志,与发送标志相匹配 comm :通信域 status: 返回类型 ( 是由三个域组成的结构类型,这三个域分别是 : MPI_SOURCE 、 MPI_TAG 和 MPI_ERROR) MPI_ Recv 函数是 MPI 中基本的消息接收函数, MPI_ Recv 从指定的进 程 source 接收消息,并且该消息的数据类型和消息标识和本接收进程 的 datatype 和 tag 相一致,接收到的消息所包含的数据元素的个数最多 不能超过 count 。

MPI 通信程序实例

Monte Carlo 法在并行程序设计中的应用 直径 1 的单位圆,再做一正方形与之相切,在这个正 方形内随机产生 count 个点,判断是否落在圆内,落 在院内的点数目 m , m 与 count 的比值近似为圆和正 方形面积的比值,所以:

Monte Carlo 法在并行程序设计中的应用

MPI 预定义数据类型

一般的 MPI 程序设计流程图 MPI_Init () MPI_Comm_rank () MPI_Comm_size () 建立新的通信器、定义新的数据类型和 进程拓扑结构 应用程序实体: 计算控制程序体; 进程间通信; MPI_Finalize () 退出 MPI 系统 程序参数说明 End

计算与通信的并行 阻塞发送将发生阻塞, 直到通讯完成. 非阻塞可将通讯交由后台处理,通信与计算可重叠. int MPI_Isend(void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request) buf 发送缓冲区的起始地址 count 发送缓冲区的大小 ( 发送元素个数 ) datatype 发送缓冲区数据的数据类型 dest 目的进程的秩 tag 消息标签 comm 通信空间 / 通信子 request 非阻塞通信完成对象 ( 句柄 ) int MPI_Irecv(void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request* request)

计算与通信的并行

计算与通信的并行 发送的完成 : 代表发送缓冲区中的数据已送出,发送 缓冲区可以重用。它并不代表数据已被接收方接收。 数据有可能被缓冲 ; 接收的完成 : 代表数据已经写入接收缓冲区。接收者 可访问接收缓冲区。 通过 MPI_Wait() 和 MPI_Test() 来判断通信是否已经完 成 ;

MPI 程序的编译 用 mpicc 编译时,就像用一般的 C 编译器一样。还可 以使用一般的 C 的编译选项,含义和原来的编译器相 同. 例如:./mpicc -c foo.c./mpicc -o foo foo.o

MPI 程序的运行 MPI 程序的执行步骤一般为: 编译以得到 MPI 可执行程序(若在同构的系统上,只需编译一次;若系 统异构,则要在每一个异构系统上都对 MPI 源程序进行编译) 将可执行程序拷贝到各个节点机上 通过 mpirun 命令并行执行 MPI 程序 mpirun –np N 其中: N : 同时运行的进程数 : 可执行 MPI 程序名 例如: mpirun –np 6 cpi mpirun –np 4 hello

Intel 软件工具 Performance Analyzer :性能分析,找到软件性能比 较热的部分,一般也就是性能瓶颈的关键点,帮助 我们收集数据发现问题。 Intel Threading Checker :用于查找线程错误, 能够检 测资源竞争、线程死锁等问题. 大家程序在并行化后, 可以通过 Threading Checker 检测一下有没有多线程 相关的错误。 Intel Threading Profiler :线程性能检测工具, 多线程 化有可能会有负载比平衡, 同步开销过大等等线程相 关的性能问题。该工具可以帮你发现每一个线程每 一时刻的状态。

VTune 性能分析器 性能分析器功能与使用方法 取样功能、调用图功能、计数器监视器以及经过改进的英 特尔调优助手; 在 Windows 下同时提供图形化与命令行界面; 允许选择是否与 Visual Studio.NET 集成; 为基于 IA-32 与英特尔安腾处理器的 Linux 应用程序提供 远程支持; 可以对基于英特尔 PXA250 、 PXA255 与 PXA26x 处理器 的应用程序进行取样。

VTune 性能分析器 取样( Sampling ):帮助开发者分辨程序中最消耗 时间的函数和模块,并给出操作系统和应用程序的 详细视图。它能够寻找程序中的热点区域( Hot Spot ) —— 最耗时间的模块、函数、代码行和汇编 指令,并提供进程、线程、模块、函数以及代码等 不同层次的各种视图,并在下方的表格内将具体参 数列了出来。 低功耗:取样产生的时间开销不到 1% 。 对指令无要求:开发者不必为取样而对程序代码做任何改 动。

VTune 性能分析器 取样主要有两种方式: 基于时间取样( Time-based Sampling -- TBS ):基于时间 取样的方式或者由操作系统的时钟服务触发,或者在每隔 n 个处理器时钟周期后自动触发。 基于事件取样( Event-based Sampling -- EBS ):基于事件 取样的方式主要由处理器的事件寄存器溢出( overflow ) 来触发。这样的事件通常是处理器相关的,主要包括如二 级缓存缺失、分支转移预测失败、浮点数指令提交等事件。

曲线图 调用曲线图通过分析程序运行时函数的入口点和出 口点,生成一张调用曲线图并且确定调用顺序和显 示关键路径。它显示线程创建,函数执行,以及它 们之间的父子继承关系。它分析提供关于程序流程 的示意图,帮助开发者快速识别主要功能和调用顺 序。 调用曲线图展现了以下几个部分: 程序函数级的框架结构 某个函数被某特定区域调用的次数 每个函数消耗的时间 处于关键路径上的函数

Thread Checker 线程检查器 快速查找和修复 Windows 和 OpenMP 线程软件中的 bug 。 监控程序执行过程中的线程行为,发现其中存在的竞争现象、 线程阻塞以及潜在的线程死锁问题,提示同线程错误相关的 源代码位置、侵权变量以及堆栈跟踪等。 线程检查器含有一个错误检测引擎,可以在数小时内定位难 于发现的线程错误,这些错误有时使用传统的工具或软件根 本就发现不了。 在程序执行期间监控其线程行为,能够检测多种类型的线程 错误。 可以发现数据竞争现象,另外,它还能发现线程死锁和阻塞 问题。 英特尔线程检查器支持 Intel 64 与 Microsoft Visual Studio* 环 境,通常集成到 Intel® VTune 性能分析器中使用。