多核程序设计课件_1

上传人:aa****6 文档编号:57217846 上传时间:2018-10-20 格式:PPT 页数:62 大小:822.50KB
返回 下载 相关 举报
多核程序设计课件_1_第1页
第1页 / 共62页
多核程序设计课件_1_第2页
第2页 / 共62页
多核程序设计课件_1_第3页
第3页 / 共62页
多核程序设计课件_1_第4页
第4页 / 共62页
多核程序设计课件_1_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《多核程序设计课件_1》由会员分享,可在线阅读,更多相关《多核程序设计课件_1(62页珍藏版)》请在金锄头文库上搜索。

1、,多核程序设计 第七章 MPI编程及性能优化,2008年8月25日,MPI简介 MPI及其历史,MPI及其历史 1993年 MPI 1.0,目前MPI-2 消息传递接口 Message Passing Interface,简称MPI 一种编程接口标准,而不是一种具体的编程语言。 由消息传递接口论坛(Message Passing Interface Forum,简称MPIF)发起讨论并进行规范化的。 MPI标准如今已经成为事实意义上的消息传递并行编程标准,也是最为流行的并行编程接口,MPI简介 MPI及其历史(续),MPI标准定义了一组具有可移植性的编程接口。 典型的实现包括开源的MPICH、

2、LAM MPI以及不开源的INTEL MPI。,MPI简介 典型MPI实现简介,典型MPI实现简介 MPICH Intel MPI,典型MPI实现简介 MPICH,MPICH是影响最大、用户最多的MPI实现。 开放源码; 与MPI标准同步发展; 支持多程序多数据(Multiple Program Multiple Data,MPMD)编程和异构集群系统; 支持C/C+、Fortran 77 和Fortran 90的绑定;对Fortran的支持提供了头文件mpif.h和模块两种方式; 支持类Unix和Windows NT平台; 支持环境非常广泛,包括多核、SMP、集群和大规模并行计算系统; ht

3、tp:/www-unix.mcs.anl.gov/mpi/mpich,典型MPI实现简介 Intel MPI,Intel MPI 提供了名为Direct Access Programming Library (DAPL)的中间层来支持多架构,兼容多种网络硬件及协议,优化网络互联。,图7.1 Intel MPI库及其基于 DAPL 的互联结构,Intel MPI透明地支持TCP/IP、共享内存,并基于DAPL有效支持多种高性能互联系统 Intel MPI提供更好的线程安全机制,多线程的MPI程序并不限制MPI的使用。,MPI简介 MPI程序特点,消息传递指的是并行执行的各个进程具有自己独立的堆栈

4、和代码段,进程之间的信息交互完全通过显式地调用通信函数来完成。 分类: 单程序多数据(Single Program Multiple Data,简称SPMD),图 7.2 SPMD执行模型,图 7.3 串行处理程序的运行过程,MPI程序特点 SPMD,图 7.4 SPMD程序的并行执行过程,MPI程序特点 MPMD,多程序多数据MPMD,图 7.5 MPMD执行模型,MPI程序特点 MPMD(续),(a)是一个管理者(Master)/工人(Worker)类型的MPMD程序,由一个Master(prog_a)来控制整个程序的执行,将任务分配给Worker(prog_b)来完成工作。 (b)联合数

5、据分析程序MPMD程序。在大部分的时间内,不同的程序各自独立的完成自己的任务,并在特定的时候交换数据。耦合性最少,通信也少,更容易获得好的并行加速效果。 (c)是流式的MPMD程序,程序运行由prog_a、prog_b和prog_c组成,这三个程序之间是典型的串行执行。在这种情况下,并行性的取得依赖于执行大量的任务,通过这种流水线获得性能加速。,MPICH的安装和配置,MPICH的安装和配置 在LINUX上安装和配置MPICH-2 在Windows上安装和配置MPICH-2,MPICH的安装和配置 Linux,在LINUX上安装和配置MPICH-2 Step 1: MPICH-2的下载 软件的

6、稳定版本可在http:/www-unix.mcs.anl.gov/mpi/mpich2/index.htm#download下载。 Step 2: MPICH-2的安装 安装之前先利用autoconf机制进行配置。最基本地,通过configure脚本指定安装目标路径即可。我们这里的安装路径设为/home/test/mpich2-1。相应的命令行为: ./configure -prefix=/home/test/mpich2-1 如果配置成功,使用make;make install命令即可完成软件包安装。,MPICH的安装和配置 Linux(续),Step 3: MPICH-2的配置与验证 MP

7、I进程的创建、启动和管理需借助进程管理器(PM)来完成。本章的测试环境均使用mpd。 安装成功后,还需要进一步配置MPICH的执行环境。可能的工作有以下几部分。 需要Python软件 MPD由python实现的一组工具构成,因此首先需确保机器上已经安装了正确版本的python解释器, 设置主目录下的mpd.hosts文件 mpdboot在主机上启动mpd进程,形成MPI运行时环境,目标主机列表由$HOME/mpd.hosts文件指定。 配置SSH无密码登录 在利用mpdboot启动之前,需配置集群环境支持节点间的无密码登录,该功能需要ssh的支持。 命令和手册页路径的配置,MPICH的安装和配

8、置 Linux(续2),Step 4: 启动MPD 在安装和上述配置结束后,即可启动mpd进程,创建mpi运行时环境了。具体的命令为: Mpiboot Step 5:应用程序的编译、链接 为简化链接过程,MPICH环境提供了形如mpicc,mpif77,mpif90等编译脚本。可以在源码目录中,通过如下命令来完成编译和链接: mpicc o mypi cpi.c Step 6: MPI程序的运行 MPI-2标准建议使用mpiexec代替mpirun来启动应用程序。MPICH2实现了mpiexec标准并通过mpd对标准作了适当扩展。,MPICH的安装和配置 Windows,在Windows上安装

9、与配置MPICH-2 下面以Microsoft Visual Studio .Net 2003为例说明编写MPI程序的步骤。 第一步:建立Visual Studio .Net 2003项目,创建命令行界面的应用程序即可。 第二步:将mpich2include加入到头文件目录中,配置选项在菜单ToolsOptionsProjectsVC+ Directories对话框中。 第三步:将mpich2lib加入到库文件目录中,配置选项在菜单ToolsOptionsProjectsVC+ Directories对话框中。 第四步:设置项目的属性,将mpi.lib加入到链接库中。 C+应用程序中为了避免名

10、字冲突。在这里,我们可以将MPI的头文件mpi.h放在预编译头文件stdafx.h的第一句,MPI编程基础,简单的MPI程序示例 #include #include “mpi.h“int main( int argc, char *argv ) int myid;int size;MPI_Init( argc, argv );MPI_Comm_rank(MPI_COMM_WORLD, ,Hello world from process 0 of 4 Hello world from process 1 of 4 Hello world from process 2 of 4 Hello wor

11、ld from process 3 of 4,每个进程中分别打印各自的MPI进程号(03)和总进程数(4),MPI程序结构,MPI接口,MPI-1有128个调用接口 MPI-2中有287个 调用方法 函数形式,MPI编程基础 MPI程序的四个基本函数,MPI_Init和MPI_Finalize MPI_Init初始化MPI执行环境,建立多个MPI进程之间的联系,为后续通信做准备 MPI_Finalize则是结束MPI执行环境。 这两个函数就是用来定义MPI程序的并行区的。,MPI_Comm_rank 当前进程标识,标识各个MPI进程 参数: MPI_Comm类型的通信域,标识参与计算的MPI进

12、程组。 整型指针,返回进程在相应进程组中的进程号。 MPI_Comm_size 用来标识相应进程组中有多少个进程 通信域包含的进程数,MPI编程基础 MPI的点对点通信,两个最重要的MPI函数MPI_Send和MPI_Recv。 int MPI_SEND(buf, count, datatype, dest, tag, comm) 这个函数的含义是向通信域comm中的dest进程发送数据。消息数据存放在buf中,类型是datatype,个数是count个。这个消息的标志是tag,区别不同消息。 输入参数包括: buf,发送缓冲区的起始地址,可以是各种数组或结构的指针。 count,整型,发送的

13、数据个数,应为非负整数。 datatype,发送数据的数据类型,dest,整型,目的进程号。 tag,整型,消息标志。 comm,MPI进程组所在的通信域。 该函数没有输出参数,返回错误码。,MPI编程基础 MPI的点对点通信(续),int MPI_RECV(buf, count, datatype, source, tag, comm, status) MPI_Recv绝大多数的参数和MPI_Send相对应,有相同的意义,很好理解。唯一的区别就是MPI_Recv里面多了一个参数status。status主要显示接收函数的各种错误状态。 输出参数包括: buf,接收缓冲区的起始地址,可以是各种

14、数组或结构的指针。 status,MPI_Status结构指针,返回状态信息。 输入参数有: count,整型,最多可接收的数据的个数。 datatype,接收数据的数据类型。 source,整型,发送数据进程的进程号。 tag,整型,消息标识,与发送的操作消息标识相同。 comm,消息接收进程和消息发送进程所在的通信域。,返回状态status,三个域组成的结构类型 MPI_SOURCE MPI_TAG MPI_ERROR 通过对status.MPI_SOURCE status.MPI_TAG 和status.MPI_ERROR的引用就可以得到返回状态中所包含的发送数据进程的标识发送数据使用的

15、tag标识和本接收操作返回的错误代码,同时包含发送和接收调用的例子其中一个进程进程0 向另一个进程进程1 发送一条消息该消息是一个字符串Hello, process 1 进程1在接收到该消息后将这一消息打印到屏幕上,#include “mpi.h“ main( argc, argv ) int argc; char *argv; char message20; int myrank; MPI_Init( /* 得到当前进程的标识*/ if (myrank = 0) /* 若是 0 进程*/ /* 先将字符串拷贝到发送缓冲区message中然后调用MPI_Send语句将它发出用 strlen(m

16、essage)指定消息的长度用MPI_CHAR指定消息的数据类型1指明发往进程1 使 用的消息标识是99 MPI_COMM_WORLD是包含本进程进程0 和接收消息的进程进 程1 的通信域发送方和接收方必须在同一个通信域中由通信域来统一协调和控制消息 的发送和接收*/,strcpy(message,“Hello, process 1“); MPI_Send(message, strlen(message), MPI_CHAR, 1, 99,MPI_COMM_WORLD); else if(myrank=1) /* 若是进程 1 */ /*进程1直接执行接收消息的操作这里它使用message作为接收缓冲区由此可见对于同 一个变量在发送进程和接收进程中的作用是不同的它指定接收消息的最大长度为20 消 息的数据类型为MPI_CHAR字符型接收的消息来自进程0 而接收消息携带的标识必须为 99 使用的通信域也是MPI_COMM_WORLD 接收完成后的各种状态信息存放在status中 接收完成后它直接将接收到的字符串打印在屏幕上*/ MPI_Recv(message, 20, MPI_CHAR, 0, 99, MPI_COMM_WORLD, /* MPI程序结束*/ ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号