【问题标题】:MPI get the number of non-finalized processesMPI 获取未完成的进程数
【发布时间】:2022-01-05 05:01:05
【问题描述】:

我有以下代码

int main(void) {
   ...
   int numtasks, rank;
   MPI_Comm_size(MPI_COMM_WORLD, &numtasks);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   int k = 2;
   if (rank == 3) {
       do {
          ...
       } while (number_of_not_finalized_processes >= numtasks - k);
   }
   ...
   MPI_Finalize();
}

并希望用rank = 3 循环进程,直到k 进程用MPI_Finalize() 完成。我怎样才能知道,有多少流程已经完成并定义 number_of_not_finalized_processes ?或者也许我有更好的替代方法来找出有多少进程仍然活着或通过了代码的特定部分?

【问题讨论】:

  • 答案中给出了两种解决方案。但是你确定你需要这么重的机器吗?这个问题的背景是什么?
  • @VictorEijkhout 我想制作一个有 N 个用户和 M 个服务器的程序。每个用户都想在服务器上进行未知数量的读/写操作。而且我需要以某种方式了解请求何时从用户到服务器。我可以在每个用户进程的最后使用特殊的 MPI_Send 来通知服务器与第 i 个用户的交互已经结束。但我认为,可能有一些更好、更合适的方式来指示此类会话的结束。
  • 一个特殊的消息不是一个糟糕的解决方案。无论如何,您都需要某种通知。

标签: c parallel-processing mpi


【解决方案1】:

你可以通过单方面的沟通来解决这个问题。创建一个窗口,在它完成之前的每个进程:

  1. 在等级 3 的窗口上获得锁定
  2. 使用MPI_Accumulate 增加计数器

这是一个非常异步的解决方案。如果你的进程做了一些同步的事情,比如说一个循环,他们动态地决定退出循环,你可以例如在同步点创建一个只有活动进程的子通信器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 2022-01-22
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多