我对Fortran中的mpi_comm_split
提出了一些问题。
问题I)
如何使用mpi_comm_split
创建单个通信器?例如,我想创建一个仅基于我的域顶部处理器(Cartesian)的通信器。我知道我必须使用MPI_UNDEFINED
进行我不希望成为新通信器的一部分,但我的代码下面并没有让我想要的。
do k=1,size(proc_up)
if(rank==proc_up(k)) then
color_up=1
else
color_up=MPI_UNDEFINED
end if
call MPI_COMM_SPLIT(comm2d ,color_up ,coords(2) ,comm_up ,code)
为什么它不起作用?
问题II)
当我想制作几个MPI_COMM_SPLIT
(up,down,side1,side2的新comm)时,它会返回错误:
[nin:30039] *** An error occurred in MPI_Comm_split
[nin:30039] *** on communicator MPI_COMM_WORLD
[nin:30039] *** MPI_ERR_ARG: invalid argument of some other kind
[nin:30039] *** MPI_ERRORS_ARE_FATAL: your MPI job will now abort
有谁知道为什么?
问题III)
我也可以使用MPI_Cart_sub
,但它会返回许多进程组。如何确保只使用我想要的组?