并行程序设计基础——MPI错误处理

目录

一、与错误处理有关的调用

1、MPI_ERRHANDLER_CREATE

2、MPI_ERRHANDLER_SET

3、MPI_ERRHANDLER_GET

4、MPI_ERRHANDLER_FREE

5、MPI_ERROR_STRING

6、MPI_ERROR_CLASS

二、小结


        MPI调用会返回一个结果,从它可以知道该调用的执行是否正确。当MPI程序发生错误的时候,会调用相应的例程进行处理。本节内容我们介绍一下MPI与错误处理有关的调用。

一、与错误处理有关的调用

1、MPI_ERRHANDLER_CREATE

        MPI_ERRHANDLER_CREATE将用户例程function向MPI注册,作为一个MPI异常句柄,而返回的errhandler是指向该注册例程的句柄。

MPI_ERRHANDLER_CREATE(function, errhandler)
IN    function        用户定义的错误处理函数
OUT   errhandler      返回的MPI错误句柄(句柄)

//c语言的说明
int MPI_Errhandler_create(MPI_Handler_function *function, MPI_Errhandler *errhandler)
//Fortran语言的说明
MPI_ERRHANDLER_CREATE(FUNCTION, ERRHANDLER, IERROR)
EXTERNAL  FUNCTION
INTEGER  ERRHANDLER, IERROR

        用户例程应该是类型为MPI_Handler_function的函数,在C语言中定义为:

typedef void(MPI_Handler_function)(MPI_Comm *, int *, ...)

        第一个参数是所用的通信域,第二个是由MPI例程所返回的错误代码,剩下的参数依赖于具体的实现。

2、MPI_ERRHANDLER_SET

        MPI_ERRHANDLER_SET将一个指定的错误句柄errhandler与给定的通信域comm相联系。

MPI_ERRHANDLER_SET(comm, errhandler)
IN    comm            设置错误句柄的通信域(句柄)
IN    errhandler      新的MPI错误句柄(句柄)

//c语言的说明
int MPI_Errhandler_set(MPI_Comm comm, MPI_Errhandler errhandler)
//Fortran语言的说明
MPI_ERRHANDLER_SET(COMM, ERRHANDLER, IERROR)
INTEGER  COMM, ERRHANDLER, IERROR

3、MPI_ERRHANDLER_GET

        MPI_ERRHANDLER_GET返回与通信域comm相联系的错误句柄errhandler。

MPI_ERRHANDLER_GET(comm, errhandler)
IN    comm            获取错误句柄的通信域(句柄)
IN    errhandler      返回与通信域相连的MPI错误句柄(句柄)

//c语言的说明
int MPI_Errhandler_get(MPI_Comm comm, MPI_Errhandler *errhandler)
//Fortran语言的说明
MPI_ERRHANDLER_GET(COMM, ERRHANDLER, IERROR)
INTEGER  COMM, ERRHANDLER, IERROR

4、MPI_ERRHANDLER_FREE

        MPI_ERRHANDLER_FREE不仅释放掉给定的错误句柄errhandler,并且设置errhandler为MPI_ERRHANDLERNULL。但真正的释放操作是在所有与其相连的通信域都释放后才进行的。

MPI_ERRHANDLER_FREE(errhandler)
IN    errhandler      MPI错误句柄(句柄)

//c语言的说明
int MPI_Errhandler_free(MPI_Errhandler *errhandler)
//Fortran语言的说明
MPI_ERRHANDLER_FREE(ERRHANDLER, IERROR)
INTEGER  ERRHANDLER, IERROR

5、MPI_ERROR_STRING

        MPI_ERROR_STRING返回与错误代码相联系的错误字符串string。调用前必须首先为参数string申请至少MPI_MAX_ERROR_STRING字符长的存储空间。

MPI_ERROR_STRING(errorcode, string, resultlen)
IN    errorcode        由MPI例程返回的错误码
OUT   string           相应于errorcode的字符串
OUT   resultlen        在string中所返回字符串的长度


//c语言的说明
int MPI_Error_string(int errorcode, char *string, int *resultlen)
//Fortran语言的说明
MPI_ERROR_STRING(ERRORCODE, STRING, RESULTLEN, IERROR)
INTEGER  ERRORCODE, RESULTLEN, IERROR
CHARACTER(*)  STRING

6、MPI_ERROR_CLASS

        MPI_ERROR_CLASS将错误代码进行解释,转换为相应的错误类,有效的错误类包括如下表所示。

MPI_ERROR_CLASS(errorcode, errorclass)
IN    errorcode        由MPI例程返回的错误码
OUT   errorclass       相应于errorcode的错误类


//c语言的说明
int MPI_Error_class(int errorcode, int *errorclass)
//Fortran语言的说明
MPI_ERROR_CLASS(ERRORCODE, ERRORCLASS, IERROR)
INTEGER  ERRORCODE, ERRORCLASS, IERROR
错误类编码错误类含义
MPI_SUCCESS无错误
MPI_ERR_BUFFER无效缓冲区指针
MPI_ERR_COUNT无效计数参数
MPI_ERR_TYPE无效数据类型参数
MPI_ERR_TAG无效标识参数
MPI_ERR_COMM无效通信域
MPI_ERR_RANK无效标识数
MPI_ERR_REQUEST无效请求(句柄)
MPI_ERR_ROOT无效根
MPI_ERR_GROUP无效组
MPI_ERR_OP无效操作
MPI_ERR_TOPOLOGY无效拓扑
MPI_ERR_DIMS无效维参数
MPI_ERR_ARG其它无效种类参数
MPI_ERR_UNKNOWN不知道原因的错误
MPI_ERR_TRUNCATE接受被截断的消息
MPI_ERR_OTHER其它的错误
MPI_ERR_INTERN内部MPI错误
MPI_ERR_LASTCODE最后标准错误码

        具体的实现可以自由的定义更多的错误类,然而,应在合适的地方使用标准错误类。错误类满足如下关系:

0=MPI_SUCCESS<MPI_ERR_...≤MPI_ERR_LASTCODE

二、小结

        当我们编写的MPI程序出现错误时,利用MPI提供的错误处理设施和错误代码,有助于迅速将错误的性质进行定位,不至于无从下手。

  • 25
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿核试Bug愁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值