MPI教程4-6

目录

4.开始

5.环境管理例程

6.练习1

 参考文献


4.开始

通用MPI程序结构:

 注:

declarations声明

prototypes原型

头文件:

进行MPI库调用的所有程序都需要。

对于MPI-3 Fortran,使用mpi_f08模块比使用上面显示的包含文件更可取。

MPI调用的格式:

C名称区分大小写;Fortran名称不区分。

程序不得声明名称以前缀MPI_或PMPI_开头的变量或函数。

通信器和组:

MPI使用称为通信器和组的对象来定义哪些进程集合可以相互通信。

大多数MPI例程要求您指定通信器作为参数。

稍后将详细介绍通信器和组。现在,只要在需要通信器时使用MPI_COMM_WORLD即可-它是包含所有MPI进程的预定义通信器。

等级:

在通信器中,每个进程都有自己的唯一整数标识符,该标识符在进程初始化时由系统分配。等级有时也称为“任务ID”。等级是连续的,从零开始。

等级被程序员用来指定消息的源和目标。应用程序经常有条件地使用它来控制程序的执行(如果rank=0,那么做这个/如果rank=1,那么做那个)。

错误处理:

大多数MPI例程都包含返回/错误代码参数,如上面“MPI调用格式”一节所述。

但是,根据MPI标准,如果出现错误,MPI调用的默认行为是中止。这意味着您可能无法捕获除MPI_成功(零)之外的返回/错误代码。

该标准确实提供了覆盖此默认错误处理程序的方法。关于如何做到这一点的讨论可以在这里找到。您还可以参考相关MPI标准文档中的错误处理部分,位于http://www.mpi-forum.org/docs/.

显示给用户的错误类型取决于实现。

5.环境管理例程

这组例程用于查询和设置MPI执行环境,并涵盖各种用途,如初始化和终止MPI环境、查询ranks的标识、查询MPI库的版本等。大多数常用例程如下所述。

MPI_Init

初始化MPI执行环境。此函数必须在每个MPI程序中调用,必须在任何其他MPI函数之前调用,并且在MPI程序中只能调用一次。对于C程序,可以使用MPI_Init将命令行参数传递给所有进程,尽管这不是标准所要求的,并且依赖于实现。

MPI_Init (&argc,&argv)
MPI_INIT (ierr)

MPI_Comm_size

返回指定通信器中的MPI进程总数,例如MPI_COMM_WORLD。如果通信器是MPI_COMM_WORLD,则它表示应用程序可用的MPI任务数。

MPI_Comm_size (comm,&size)
MPI_COMM_SIZE (comm,size,ierr)

 MPI_Comm_rank

返回指定通信器中调用MPI进程的等级。最初,在通信器MPI_COMM_WORLD中,每个进程将被分配一个介于0和任务数-1之间的唯一整数等级。这个等级通常被称为任务ID。如果一个进程与其他通信者相关联,那么它在每个通信者中也会有一个唯一的等级。

MPI_Comm_rank (comm,&rank)
MPI_COMM_RANK (comm,rank,ierr)

MPI_Abort

终止与通信器关联的所有MPI进程。在大多数MPI实现中,它终止所有进程,而不考虑指定的通信器。

MPI_Abort (comm,errorcode)
MPI_ABORT (comm,errorcode,ierr)

 MPI_Get_processor_name

返回处理器名称。还返回名称的长度。“name”的缓冲区大小必须至少为MPI_MAX_PROCESSOR_NAME个字符。返回到“name”中的内容取决于实现—可能与“hostname”或“host”shell命令的输出不同。

MPI_Get_processor_name (&name,&resultlength)
MPI_GET_PROCESSOR_NAME (name,resultlength,ierr)

MPI_Get_version

返回由库实现的MPI标准的版本和子版本。

MPI_Get_version (&version,&subversion)
MPI_GET_VERSION (version,subversion,ierr)

 MPI_Initialized

指示是否已调用MPI_Init--返回标志逻辑true(1)或false(0)。MPI要求每个进程调用MPI_Init一次且仅一次。这可能会给想要使用MPI并准备在必要时调用MPI_Init的模块带来问题。MPI_Initialized解决了这个问题。

MPI_Initialized (&flag)
MPI_INITIALIZED (flag,ierr)

MPI_Wtime

返回调用处理器上已用的挂钟时间(以秒为单位)(双精度)。

MPI_Wtime ()
MPI_WTIME ()

MPI_Wtick

返回MPI_Wtime的分辨率(以秒为单位)(双精度)。

MPI_Wtick ()
MPI_WTICK ()

MPI_Finalize

终止MPI执行环境。此函数应该是每个MPI程序中调用的最后一个MPI例程-之后不能调用其他MPI例程。

MPI_Finalize ()
MPI_FINALIZE (ierr)

例子:C语言

// required MPI include file
#include "mpi.h"
#include <stdio.h>

int main(int argc, char *argv[]) {
int  numtasks, rank, len, rc;
char hostname[MPI_MAX_PROCESSOR_NAME];

// initialize MPI
MPI_Init(&argc,&argv);

// get number of tasks
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);

// get my rank
MPI_Comm_rank(MPI_COMM_WORLD,&rank);

// this one is obvious
MPI_Get_processor_name(hostname, &len);
printf ("Number of tasks= %d My rank= %d Running on %s\n", numtasks,rank,hostname);


    // do some work with message passing


// done with MPI
MPI_Finalize();
}

6.练习1

 参考文献

Message Passing Interface (MPI) | LLNL HPC Tutorials

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/120728601
4-6