Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


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

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

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

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

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

5 单程序多数据 串行执行

6 单程序多数据 并行执行

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

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

9 MPI 程序实例

10 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 程序的最后一条可执行语句,否则程序的运行结果是 不可预知的。

11 MPI 程序

12 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 来确定一个通信域中 的进程总数。

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

14 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, 使用这一标志,就可以把本次发送的消息和本进程向同一目的进 程发送的其他消息区别开。

15 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 。

16 MPI 通信程序实例

17

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

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

20

21

22 MPI 预定义数据类型

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

24 计算与通信的并行 阻塞发送将发生阻塞, 直到通讯完成. 非阻塞可将通讯交由后台处理,通信与计算可重叠. 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)

25 计算与通信的并行

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

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

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

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

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

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

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

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

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

35

36


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

Similar presentations


Ads by Google