C++ MPI通讯器管理
问题是这个程序是否正确 假设我想将C++ MPI通讯器管理,c++,mpi,C++,Mpi,问题是这个程序是否正确 假设我想将MPI\u COMM\u WORLD中的所有p进程拆分为几个不重叠的通信程序。 我通过确定一个级别上的m组master来实现这一点。主等级决定哪些进程需要通信,哪些进程不需要通信(基本上分析图表)。 最后,master列组已确定了我要与之构建m通讯器的m进程列组。 假设我将这些mrank组的结果发送给所有进程 正如我所发现的,MPI_COMM_世界中的所有进程都需要使用MPI_Group命令创建所有这些组(即使它们不属于该组,(愚蠢地?),然后使用MPI_COM
MPI\u COMM\u WORLD
中的所有p
进程拆分为几个不重叠的通信程序。
我通过确定一个级别上的m
组master
来实现这一点。主等级决定哪些进程需要通信,哪些进程不需要通信(基本上分析图表)。
最后,master
列组已确定了我要与之构建m
通讯器的m
进程列组。
假设我将这些m
rank组的结果发送给所有进程
正如我所发现的,MPI_COMM_世界中的所有进程都需要使用MPI_Group
命令创建所有这些组(即使它们不属于该组,(愚蠢地?),然后使用MPI_COMM_create
共同创建每个通信器
现在的问题是:一个进程如何处理它不属于且该进程不需要的所有通讯器,但它们需要调用m
-乘以集体MPI\u Comm\u create
函数
我们是否可以忽略所有的MPI\u Comm
指针,只存储该进程所属的指针?无需调用MPI\u Comm\u free
?
如果我想重建另一组通讯器,我应该如何释放通讯器?
进程是否应该只释放它所属的通信器
有人能解释一下这个程序是否正确吗?
我有点不确定这个集体创作惯例
非常感谢 听起来你可能做得很艰难 将大型通信器拆分为多个不重叠的子通信器的最佳方法是使用。原型如下所示:
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
将在同一个子单元中的每个人贡献相同的颜色。然后使用键
在子通信程序中排列列组。如果您想保持顺序,可以使用原始排名
在调用MPI\u COMM\u SPLIT
之前,您需要做的唯一一件事是使用MPI\u BCAST将组号从master
进程广播给其他所有人。听起来您可能做得很艰难
将大型通信器拆分为多个不重叠的子通信器的最佳方法是使用。原型如下所示:
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
将在同一个子单元中的每个人贡献相同的颜色。然后使用键
在子通信程序中排列列组。如果您想保持顺序,可以使用原始排名
在调用MPI\u COMM\u SPLIT
之前,您需要做的唯一一件事是使用MPI\u BCAST将组号从master
进程广播给其他所有人。听起来您可能做得很艰难
将大型通信器拆分为多个不重叠的子通信器的最佳方法是使用。原型如下所示:
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
将在同一个子单元中的每个人贡献相同的颜色。然后使用键
在子通信程序中排列列组。如果您想保持顺序,可以使用原始排名
在调用MPI\u COMM\u SPLIT
之前,您需要做的唯一一件事是使用MPI\u BCAST将组号从master
进程广播给其他所有人。听起来您可能做得很艰难
将大型通信器拆分为多个不重叠的子通信器的最佳方法是使用。原型如下所示:
int MPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm *newcomm)
将在同一个子单元中的每个人贡献相同的颜色。然后使用键
在子通信程序中排列列组。如果您想保持顺序,可以使用原始排名
在调用MPI\u COMM\u SPLIT
之前,您需要做的唯一一件事是使用MPI\u BCAST将组号从master
进程广播给其他所有人,这是一个很好的答案,但对我的问题并没有真正的帮助。我知道我可以使用这个函数进行拆分,如果可以,我也可以使用这个函数。在这种情况下,我不能。我在思考上述问题,我对创建和释放通讯器非常不确定。我想我不明白为什么需要创建一组额外的通讯器。MPI_Comm_创建不是集体的吗进程需要调用此函数来创建新的通信器,即使它不属于新的通信器,这就是它变得奇怪的地方!没错。如果您正在使用一个新的MPI实现,那么有一个新函数可以使用,名为MPI\u COMM\u CREATE\u GROUP
,它不需要任何人参与。啊,谢谢你,我会看看这个函数=)很高兴知道!回答得很好,但对我的问题没有帮助。我知道我可以使用这个函数进行拆分,如果可以,我也可以使用这个函数。在这种情况下,我不能。我在思考上述问题,我对创建和释放通讯器非常不确定。我想我不明白为什么需要创建一组额外的通讯器。MPI_Comm_创建不是集体的吗进程需要调用此函数来创建新的通信器,即使它不属于新的通信器,这就是它变得奇怪的地方!没错。如果您正在使用一个新的MPI实现,那么有一个新函数可以使用,名为MPI\u COMM\u CREATE\u GROUP
,它不需要任何人参与。啊,谢谢你,我会看看这个函数=)很高兴知道!回答得很好,但对我的问题没有帮助。我知道我可以接受这个