MPI参考手册.docx
- 文档编号:29964440
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:47
- 大小:129.08KB
MPI参考手册.docx
《MPI参考手册.docx》由会员分享,可在线阅读,更多相关《MPI参考手册.docx(47页珍藏版)》请在冰豆网上搜索。
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)
释放一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MPI 参考手册