所有进程退出的广播消息(MPI)

时间:2012-07-03 00:51:47

标签: c++ mpi process-management

[MPI-C ++]

我创建了一个应用程序,在特定条件下它应该在所有进程中关闭应用程序。 我试图使用root进程创建它,但我想发送消息到所有其他进程也终止。我该怎么做?

1 个答案:

答案 0 :(得分:1)

没有通信就无法在所有进程上退出MPI应用程序干净地。这意味着,如果您的条件仅发生在MPI应用程序的一部分进程上(例如,您在其中一个进程上有错误),则单方面退出应用程序的唯一方法是调用MPI_Abort。这将导致所有MPI进程突然结束,无论在那个时刻每个级别的代码中的哪个位置。由于MPI_Abort不是集体例程,因此不可能对任何其他等级执行任何清理。

如果你希望有一个干净的出口,你需要定期在所有等级之间进行沟通,看是否所有等级仍然有效,或者是否是时候退出。例如,您可以定期使用MPI_Allreduce作为操作调用MPI_SUM。如果您的退出条件已在流程中得到满足,请将其作为数据发送1,否则请发送0。现在,您只需要在MPI_Allreduce之后检查总和是否大于0,如果是,请以有序的方式退出您的应用程序。