没有组的MPI Communicator MPI_Comm_split

时间:2017-04-12 10:50:37

标签: c mpi

我在课堂上学习使用C语言的MPI。我现在正试图在你使用MPI_Comm_split时解决问题,这有什么好处。如果我不使用群组或者我的所有流程都在一个群组中,我也会尝试弄清楚使用此功能而不仅仅使用MPI_COMM_WORLD是否有任何好处。

据我了解,MPI_Comm_split为每种颜色提供了独特的沟通方式。这与使用MPI_COMM_WORLD不同(不确定这最后一部分是否正确)。 MPI组是一组流程,沟通者可以帮助您在这些组内部和之间进行通信。

我正在查看有关this question

的评论
  

例如,给定一个形状,例如方块,程序分裂   MPI_COMM_WORLD分为两组grpArea和grpPerimeter进行计算   给定形状的面积和周长。这些团体应该这样做   他们的私人计算并将结果返回到根(等级0)   MPI_COMM_WORLD。

让我们说,我们不是计算面积和周长,而是计算面积,因此我们不使用群组。使用MPI_Comm_split拆分通信器是否有任何意义,以便每个处理器都有自己的通信器?这样做有什么好处或缺点吗?

1 个答案:

答案 0 :(得分:2)

您基本上问的是,如果没有不同的组,使用MPI_Comm_split是否有意义。不,不是的。它没有提供任何好处或没有任何意义。

使用同一组的单独传播者有两个原因:

  • 为应用程序中可能具有重叠标记的不同模块设置私有通信器。这样,您可以确保没有不匹配。对于这种情况,请使用MPI_Comm_dup
  • 使用拓扑。在这种情况下,使用适当的构造函数,例如MPI_Cart_create

创建过多的传播者可能会有一些开销。此外,您可能会失去MPI_COMM_WORLD的特定优化。这不应该阻止你在有意义的时候使用传播者。