【发布时间】: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