如果只有成对的等级进行通信,`MPI_COMM_WORLD`是一个坏主意吗?

时间:2019-07-31 11:06:55

标签: mpi scalability

我对MPI的了解很少,因此请原谅这个问题。

我有一个相对简单的MPI程序:需要计算大量独立的任务,并将其组装成一定的数组。我通过让所有等级讨论等级0,请求新条目进行计算并将结果报告回等级0来实现此目的。每次通信的大小仅为几百个字节,并且总是在等级0和任何等级之间发生。其他职级。在这样的设置中将MPI_COMM_WORLD通信器中的所有等级都保留下来是一个坏主意吗?我应该拆分成一堆单独的传播者,还是等级0和1,等级0和2,等级0和3,…,等级0和n?还是只要所有通讯都升到另一个等级就可以留在MPI_COMM_WORLD吗?

1 个答案:

答案 0 :(得分:3)

通讯器是重物。创建新的通信器需要花费时间,并消耗内部MPI资源。

在以下情况下,最好创建新的传播者:

  • 当应用程序中的不同抽象层需要“安全”时 沟通范围。
  • 当您需要从 家长沟通者(例如,您进行的一项重大操作 需要通过MPI_COMM_WORLD中一半的过程来执行。)
  • 当您需要通过上级沟通者对流程进行重新排序时 (例如,您的MPI流程具有不同的逻辑顺序 而不是他们的“本地” MPI_COMM_WORLD排名)。

简而言之:仅当您需要一个全新的/安全的通信范围时,或者您需要更改现有范围(例如,对子进程进行子集化和/或对成员进程重新排序)时,才创建新的通信器。

参考:Here