17.2.234. MPI_Intercomm_create
MPI_Intercomm_create — 基于两个内部通信器创建跨通信器。
17.2.234.1. 语法
17.2.234.1.1. C语法
#include <mpi.h>
int MPI_Intercomm_create(MPI_Comm local_comm, int local_leader,
MPI_Comm peer_comm, int remote_leader, int tag, MPI_Comm *newintercomm)
17.2.234.1.2. Fortran语法
USE MPI
! or the older form: INCLUDE 'mpif.h'
MPI_INTERCOMM_CREATE(LOCAL_COMM, LOCAL_LEADER, PEER_COMM,
REMOTE_LEADER, TAG, NEWINTERCOMM, IERROR)
INTEGER LOCAL_COMM, LOCAL_LEADER, PEER_COMM, REMOTE_LEADER
INTEGER TAG, NEWINTERCOMM, IERROR
17.2.234.1.3. Fortran 2008 语法
USE mpi_f08
MPI_Intercomm_create(local_comm, local_leader, peer_comm, remote_leader,
tag, newintercomm, ierror)
TYPE(MPI_Comm), INTENT(IN) :: local_comm, peer_comm
INTEGER, INTENT(IN) :: local_leader, remote_leader, tag
TYPE(MPI_Comm), INTENT(OUT) :: newintercomm
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
17.2.234.2. 输入参数
local_comm: 包含发起跨通信的进程的通信器(句柄)。local_leader: 本地通信组中本地组领导的排名(整型)。peer_comm: "对等"通信器;仅在local_leader(句柄)处有效。remote_leader: 对等通信中远程组领导者的排名;仅在本地领导者处有效(整数)。tag: 用于标识新进程间通信器的消息标签(整数)。
17.2.234.3. 输出参数
newintercomm: 创建的交互相通器(句柄)。ierror: 仅限Fortran:错误状态(整数)。
17.2.234.4. 描述
此调用创建一个进程间通信器。该操作在本地组和远程组的联合上是集体性的。每个组内的进程应提供相同的local_comm和local_leader参数。remote_leader、local_leader和tag参数不允许使用通配符。
此调用使用点对点通信,通过通信器peer_comm在领导者之间使用标签tag进行。因此,必须注意确保peer_comm上没有未完成的通信会干扰此次通信。
如果需要进行多个MPI_Intercomm_create操作,它们应该使用不同的标签(更准确地说,应确保本地和远程领导者为每个MPI_intercomm_create使用不同的标签)。
17.2.234.5. 注意事项
我们建议使用专用的对等通信器,例如MPI_COMM_WORLD的副本,以避免对等通信器出现问题。
MPI 1.1标准对输入的内部通信器包含两条相互排斥的说明。一条指出它们各自的组必须互不相交;另一条则说明领导者可以是同一个进程。经过MPI论坛的讨论后,最终决定这些组必须互不相交。需要注意的是,标准中给出的理由并非做出这一选择的真正原因;实际上,如果组不是互不相交的,那么对交互通信器的其他操作(如MPI_Intercomm_merge)将失去意义。
17.2.234.6. 错误
几乎所有MPI例程都会返回一个错误值;C语言例程通过函数返回值返回,Fortran例程则通过最后一个参数返回。
在返回错误值之前,会调用与通信对象(如通信器、窗口、文件)关联的当前MPI错误处理程序。如果MPI调用未关联任何通信对象,则该调用被视为附加到MPI_COMM_SELF,并将调用关联的MPI错误处理程序。当MPI_COMM_SELF未初始化时(即在MPI_Init/MPI_Init_thread之前、MPI_Finalize之后,或仅使用会话模型时),错误会触发初始错误处理程序。初始错误处理程序可通过在使用世界模型时调用MPI_Comm_set_errhandler来修改MPI_COMM_SELF,或通过mpiexec的mpi_initial_errhandler命令行参数,或MPI_Comm_spawn/MPI_Comm_spawn_multiple的info键来设置。如果未设置其他适当的错误处理程序,则MPI I/O函数将调用MPI_ERRORS_RETURN错误处理程序,而其他所有MPI函数将调用MPI_ERRORS_ABORT错误处理程序。
Open MPI 包含三个可使用的预定义错误处理器:
MPI_ERRORS_ARE_FATAL导致程序中止所有连接的MPI进程。MPI_ERRORS_ABORT一个可在通信器、窗口、文件或会话上调用的错误处理程序。当在通信器上调用时,其行为类似于在该通信器上调用MPI_Abort。如果在窗口或文件上调用,则行为类似于在包含对应窗口或文件中进程组的通信器上调用MPI_Abort。如果在会话上调用,则仅中止本地进程。MPI_ERRORS_RETURN向应用程序返回一个错误代码。
MPI应用程序也可以通过调用以下方式实现自己的错误处理程序:
请注意,MPI不保证MPI程序在出现错误后能够继续运行。
有关更多信息,请参阅MPI-3.1标准中的错误处理部分。