MPI参考手册.docx

上传人:b****5 文档编号:11976669 上传时间:2023-04-16 格式:DOCX 页数:47 大小:128.94KB
下载 相关 举报
MPI参考手册.docx_第1页
第1页 / 共47页
MPI参考手册.docx_第2页
第2页 / 共47页
MPI参考手册.docx_第3页
第3页 / 共47页
MPI参考手册.docx_第4页
第4页 / 共47页
MPI参考手册.docx_第5页
第5页 / 共47页
点击查看更多>>
下载资源
资源描述

MPI参考手册.docx

《MPI参考手册.docx》由会员分享,可在线阅读,更多相关《MPI参考手册.docx(47页珍藏版)》请在冰豆网上搜索。

MPI参考手册.docx

MPI参考手册

附录3:

MPI参考手册

本附录给出主要MPI函数的参考手册。

为了节省篇幅,这里仅列出MPI函数的C接口,Fortran接口子程序的参数与C接口函数的参数完全类似。

除MPI_Wtime和MPI_Wtick外,Fortran接口子程序比C接口函数在最后多出一个整型参数,用于返回错误码。

所列出的MPI函数和变量是按照它们的类别组织的。

为方便查找特定的函数,附3.1中给出了一个MPI的函数、变量名称按字母顺序排列的索引。

本附录的内容主要参考文献[8,9]以及MPICH的部分在线手册编写而成。

附3.1MPI函数、变量速查表

本节中出现在变量或函数名后边的页码代表它们在参考手册中所在页号,主要为了方便它们的查找,没有其他含义。

MPI_2INT37

MPI_Abort40

MPI_Address46

MPI_Aint38

MPI_Allgather47

MPI_Allgatherv48

MPI_Allreduce49

MPI_Alltoall48

MPI_Alltoallv48

MPI_ANY_SOURCE39

MPI_ANY_TAG39

MPI_Attr_delete52

MPI_Attr_get52

MPI_Attr_put52

MPI_BAND38

MPI_Barrier47

MPI_Bcast47

MPI_BOR38

MPI_BOTTO39

MPI_Bsend42

MPI_Bsend_init44

MPI_BSEND_OVERHEAD39

MPI_Buffer_attach42

MPI_Buffer_detach42

MPI_BXOR38

MPI_BYTE37

MPI_Cancel44

MPI_CART39

MPI_Cart_coords53

MPI_Cart_create52

MPI_Cart_get53

MPI_Cart_map53

MPI_Cart_rank53

MPI_Cart_shift53

MPI_Cart_sub53

MPI_Cartdim_get53

MPI_CHAR37

MPI_Comm38

MPI_Comm_compare51

MPI_Comm_create51

MPI_Comm_dup51

MPI_Comm_free52

MPI_Comm_group51

MPI_COMM_NULL38

MPI_Comm_rank51

MPI_Comm_remote_group54

MPI_Comm_remote_size54

MPI_COMM_SELF37

MPI_Comm_size51

MPI_Comm_split51

MPI_Comm_test_inter54

MPI_COMM_WORLD37

MPI_CONGRUENT37

MPI_Copy_function38

MPI_Datatype38

MPI_DATATYPE_NULL38

MPI_Delete_function38

MPI_Dims_create52

MPI_DOUBLE37

MPI_DOUBLE_INT37

MPI_DUP_FN38

MPI_ERR_ARG40

MPI_ERR_BUFFER39

MPI_ERR_COMM39

MPI_ERR_COUNT39

MPI_ERR_DIMS40

MPI_ERR_GROUP40

MPI_ERR_IN_STATUS40

MPI_ERR_INTERN40

MPI_ERR_LASTCODE40

MPI_ERR_OP40

MPI_ERR_OTHER40

MPI_ERR_PENDING40

MPI_ERR_RANK39

MPI_ERR_REQUEST40

MPI_ERR_ROOT39

MPI_ERR_TAG39

MPI_ERR_TOPOLOGY40

MPI_ERR_TRUNCATE40

MPI_ERR_TYPE39

MPI_ERR_UNKNOWN40

MPI_Errhandler38

MPI_Errhandler_create40

MPI_Errhandler_free41

MPI_Errhandler_get41

MPI_ERRHANDLER_NULL38

MPI_Errhandler_set41

MPI_Error_class41

MPI_Error_string41

MPI_ERRORS_ARE_FATAL38

MPI_ERRORS_RETURN38

MPI_Finalize40

MPI_FLOAT37

MPI_FLOAT_INT37

MPI_Gather47

MPI_Gatherv48

MPI_Get_count47

MPI_Get_elements47

MPI_Get_processor_name40

MPI_GRAPH39

MPI_Graph_create54

MPI_Graph_get54

MPI_Graph_map54

MPI_Graph_neighbors54

MPI_Graph_neighbors_count54

MPI_Graphdims_get54

MPI_Group38

MPI_Group_compare50

MPI_Group_difference50

MPI_GROUP_EMPTY37

MPI_Group_excl50

MPI_Group_free51

MPI_Group_incl50

MPI_Group_intersection50

MPI_GROUP_NULL38

MPI_Group_range_excl50

MPI_Group_range_incl50

MPI_Group_rank50

MPI_Group_size50

MPI_Group_translate_ranks51

MPI_Group_union51

MPI_Handler_function38

MPI_HOST39

MPI_Ibsend42

MPI_IDENT37

MPI_Init40

MPI_Initialized40

MPI_INT37

MPI_Intercomm_create54

MPI_Intercomm_merge54

MPI_IO39

MPI_Iprobe44

MPI_Irecv42

MPI_Irsend42

MPI_Isend42

MPI_Issend43

MPI_Keyval_create52

MPI_Keyval_free52

MPI_KEYVAL_INVALID39

MPI_LAND38

MPI_LB37

MPI_LONG37

MPI_LONG_DOUBLE37

MPI_LONG_DOUBLE_INT37

MPI_LONG_INT37

MPI_LONG_LONG_INT37

MPI_LOR38

MPI_LXOR38

MPI_MAX38

MPI_MAX_ERROR_STRING39

MPI_MAX_PROCESSOR_NAME39

MPI_MAXLOC38

MPI_MIN38

MPI_MINLOC38

MPI_NULL_COPY_FN38

MPI_NULL_DELETE_FN38

MPI_Op38

MPI_Op_create49

MPI_Op_free50

MPI_OP_NULL38

MPI_Pack46

MPI_Pack_size46

MPI_PACKED37

MPI_Probe42

MPI_PROC_NULL39

MPI_PROD38

MPI_Recv41

MPI_Recv_init44

MPI_Reduce48

MPI_Reduce_scatter49

MPI_Request38

MPI_Request_free44

MPI_REQUEST_NULL38

MPI_Rsend42

MPI_Rsend_init45

MPI_Scan49

MPI_Scatter48

MPI_Scatterv48

MPI_Send41

MPI_Send_init44

MPI_Sendrecv41

MPI_Sendrecv_replace42

MPI_SHORT37

MPI_SHORT_INT37

MPI_SIMILAR37

MPI_Ssend42

MPI_Ssend_init45

MPI_Start44

MPI_Startall44

MPI_Status38

MPI_SUCCESS39

MPI_SUM38

MPI_TAG_UB39

MPI_Test43

MPI_Test_cancelled43

MPI_Testall43

MPI_Testany43

MPI_Testsome43

MPI_Topo_test52

MPI_Type_commit46

MPI_Type_contiguous45

MPI_Type_dup47

MPI_Type_extent47

MPI_Type_free46

MPI_Type_hindexed45

MPI_Type_hvector45

MPI_Type_indexed45

MPI_Type_lb47

MPI_Type_size47

MPI_Type_struct46

MPI_Type_ub47

MPI_Type_vector45

MPI_UB37

MPI_UNDEFINED39

MPI_UNDEFINED_RANK39

MPI_UNEQUAL37

MPI_Unpack46

MPI_UNSIGNED37

MPI_UNSIGNED_CHAR37

MPI_UNSIGNED_LONG37

MPI_UNSIGNED_SHORT37

MPI_User_function38

MPI_Wait43

MPI_Waitall43

MPI_Waitany43

MPI_Waitsome44

MPI_Wtick55

MPI_Wtime55

MPI_WTIME_IS_GLOBAL39

附3.2MPI预定义的变量及类型

附3.2.1C语言MPI原始数据类型

C语言中表示MPI数据类型的变量类型是MPI_Datatype。

1.基本数据类型

MPI_CHAR对应于char。

MPI_BYTE对应于unsignedchar。

MPI_SHORT对应于short。

MPI_INT对应于int。

MPI_LONG对应于long。

MPI_FLOAT对应于float。

MPI_DOUBLE对应于double。

MPI_UNSIGNED_CHAR对应于unsignedchar。

MPI_UNSIGNED_SHORT对应于unsignedshort。

MPI_UNSIGNED对应于unsignedint。

MPI_UNSIGNED_LONG对应于unsignedlong。

MPI_LONG_DOUBLE对应于longdouble(有的系统不支持)。

MPI_LONG_LONG_INT对应于longlong(有的系统不支持)。

2.特殊数据类型

MPI_PACKEDMPI_Pack和MPI_Unpack函数用的打包类型。

MPI_UB用于在MPI_Type_struct函数中设定数据类型的上界。

MPI_LB用于在MPI_Type_struct函数中设定数据类型的下界。

3.MPIMAXLOC和MPIMINLOC中使用的数据类型

MPI_FLOAT_INT对应于struct{float,int}。

MPI_LONG_INT对应于struct{long,int}。

MPI_DOUBLE_INT对应于struct{double,int}。

MPI_SHORT_INT对应于struct{short,int}。

MPI_2INT对应于struct{int,int}。

MPI_LONG_DOUBLE_INT对应于struct{longdouble,int}。

附3.2.2预定义的通信器与进程组

MPI的通信器和进程组在C语言中的变量类型分别为MPI_Comm和MPI_Group,它们在Fortran语言中都用INTEGER表示。

MPI_COMM_WORLD包含所有进程的通信器。

MPI_COMM_SELF只包含本进程的通信器。

MPI_GROUP_EMPTY空进程组(不包含任何进程)。

通信器或进程组的比较结果

MPI_IDENT表示两个通信器或进程组完全一样。

MPI_CONGRUENT表示两个通信器包含的进程组一样(参看MPI_Comm_compare)。

MPI_SIMILAR表示两个通信器或进程组中的进程集合一样,但进程排序不同。

MPI_UNEQUAL表示两个通信器或进程组不相同。

附3.2.3用于归约函数的预定义的二目运算

MPI用于进行归约运算的函数有MPI_Reduce、MPI_Allreduce、MPI_Reduce_scatter和MPI_Scan,它们所使用的二目运算在C中的类型为MPI_Op,在Fortran中的类型为INTEGER。

MPI_MAX两个操作数中较大的一个。

MPI_MIN两个操作数中较小的一个。

MPI_SUM两个操作数之和。

MPI_PROD两个操作数之积。

MPI_LAND两个操作数的逻辑与(logicaland)。

MPI_BAND两个操作数的按位与(bitwiseand)。

MPI_LOR两个操作数的逻辑或(logicalor)。

MPI_BOR两个操作数的按位或(bitwiseor)。

MPI_LXOR两个操作数的逻辑异或(logicalxor)。

MPI_BXOR两个操作数的按位异或(bitwisexor)。

MPI_MINLOC两对操作数中较小一个的值和位置。

MPI_MAXLOC两对操作数中较大一个的值和位置。

附3.2.4C变量类型及预定义函数

MPI_Status存储通信状态的变量(参看3.2.8)。

MPI_Aint存放地址或位移的变量。

MPI_Datatype数据类型变量。

MPI_Request通信请求变量。

MPI_Comm通信器变量。

MPI_Group进程组变量。

MPI_Op归约操作的二目运算操作句柄。

MPI_User_function聚合通信中的自定义函数(参看MPI_Op_create)。

MPI_Copy_function通信器属性复制函数(参看MPI_Keyval_create)。

MPI_Delete_function通信器属性删除函数(参看MPI_Keyval_create)。

MPI_NULL_COPY_FN预定义的属性拷贝函数。

MPI_NULL_DELETE_FN预定义的属性删除函数。

MPI_DUP_FN预定义的属性复制函数。

MPI_Errhandler错误处理函数句柄。

MPI_Handler_function错误处理函数(参看MPI_Errhandler_create)。

MPI_ERRORS_ARE_FATAL预定义的错误处理函数:

发生错误则立即退出(默认行为)。

MPI_ERRORS_RETURN预定义的错误处理函数:

发生错误时返回错误码,程序继续运行。

附3.2.5空对象

MPI_COMM_NULL空通信器。

MPI_OP_NULL空操作。

MPI_GROUP_NULL空进程组。

MPI_DATATYPE_NULL空数据类型。

MPI_REQUEST_NULL空请求(空回执)。

MPI_ERRHANDLER_NULL空错误处理过程。

附3.2.6MPI常量

MPI_TAG_UB最大标签值(不小于216-1)。

MPI_HOST该变量给出主机所在的进程号(如果有主机的话)。

MPI_IO具有输入、输出能力的进程号。

MPI_WTIME_IS_GLOBAL代表MPI_Wtime函数返回的时间是否是全局同步的。

MPI_MAX_PROCESSOR_NAME给出MPI_Get_processor_name返回的处理器名称最大长度。

MPI_MAX_ERROR_STRING给出MPI_Error_string返回的错误信息的最大长度。

MPI_UNDEFINED被许多MPI函数用于表示未知或未定义的

整数值。

MPI_UNDEFINED_RANK未定义的进程号。

MPI_KEYVAL_INVALID用于表示非法或未定义的keyvalue。

MPI_BSEND_OVERHEAD给出MPI_Bsend附加的额外数据长度。

MPI_PROC_NULL空进程,与空进程进行通信相当于空操作。

MPI_ANY_SOURCE接收操作中用于表示从任何源地址接收。

MPI_ANY_TAG接收操作中用于表示接收任何标签的消息。

MPI_BOTTO表示MPI地址空间的基底地址

(参看MPI_Address)。

附3.2.7进程拓扑结构

MPI_GRAPH图结构。

MPI_CART笛卡尔结构。

附3.2.8通信状态信息

C语言中,MPI利用结构MPI_Status来返回消息传递的完成情况。

该结构中包含下述成员可供调用程序查询:

附3.2.9错误码

MPI_SUCCESS操作成功。

MPI_ERR_BUFFER非法缓冲区指针。

MPI_ERR_COUNT非法个数。

MPI_ERR_TYPE非法数据类型。

MPI_ERR_TAG非法消息标签。

MPI_ERR_COMM非法通信器。

MPI_ERR_RANK非法进程号。

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_Error_string获得。

MPI_ERR_INTERN内部错误。

MPI_ERR_IN_STATUS错误码在状态变量的MPI_ERROR元素中

(参看MPI_Status)。

MPI_ERR_PENDING有尚未完成的请求。

MPI_ERR_REQUEST非法请求(MPI_Request)。

MPI_ERR_LASTCODE该值位于错误码列表的最后。

附3.3初始化、退出与错误处理函数

intMPI_Init(int*argc,char***argv)

初始化MPI系统。

通常它应该是第一个被调用的MPI函数。

除MPI_Initialized外,其他所有MPI函数仅在调用了该函数后才可以被调用。

argc和argv分别是命令行参数的个数和参数数组的指针(通过C的main函数得到),必须将它们如实传递给MPI系统。

MPI系统通过它们得到所需的参数,并且会将MPI系统专用的参数删除而仅留下供用户程序使用的参数。

参看MPI_Initialized,MPI_Finalize,MPI_Abort。

intMPI_Initialized(int*flag)

用于检查MPI系统是否已经初始化。

如果已经调用过MPI_Init则返回值flag!

=0,否则返回值flag==0。

这是唯一可以在MPI_Init之前调用的函数。

参看MPI_Init。

intMPI_Finalize(void)

退出MPI系统。

所有MPI进程在正常退出前都必须调用该函数。

它是MPI程序中最后一个被调用的MPI函数。

调用MPI_Finalize后不允许再调用任何MPI函数。

调用该函数前应该确认所有的(非阻塞型)通信均已完成。

参看MPI_Init,MPI_Initialized,MPI_Abort。

intMPI_Abort(MPI_Commcomm,interrorcode)

调用该函数时表明因为出现了某种致命错误而希望立即终止MPI程序的执行。

MPI系统会尽量设法终止通信器comm中的所有进程。

在UNIX系统环境中,errorcode被作为进程的退出码(exitcode)返回给操作系统。

参看MPI_Init和MPI_Finalize。

intMPI_Get_processor_name(char*name,int*resultlen)

该函数返回运行本进程的处理器名称。

参数name应该提供不少于MPI_MAX_PROCESSOR_NAME个字节的存储空间用于存放处理器名称。

intMPI_Errhandler_create(MPI_Handler_function*function,MPI_Errhandler*errhandler)

注册异常处理函数。

参数function为异常处理函数,errhandler返回一个可用于MPI_Errhandler_set的句柄。

function应该是一个如下形式的C函数:

voidfunction(MPI_Comm*comm,int*errcode,...)

其中comm是与之相关联的通信器,errcode为错误码(它们都是输入参数,使用地址是为了方便编写Fortran异常处理函数)。

其余参数与MPI的具体实现有关。

参看MPI_Errhandler_free和MPI_Errhandler_set等。

intMPI_Errhandler_free(MPI_Errhandler*errhandler)

释放一个已注册的异常处理函数。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 历史学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1