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

C++ 要退出的所有进程的广播消息(MPI),c++,mpi,process-management,C++,Mpi,Process Management,[MPi-C++] 我提出了一个应用程序,在特定条件下,它应该关闭所有进程中的应用程序。 我试图使用根进程完成它,但我想向所有其他进程发送消息以终止它。如何做到这一点?在没有通信的情况下,无法在所有进程上干净地退出MPI应用程序。这意味着,如果您的MPI应用程序的某个子进程出现问题(例如,某个进程出现错误),则单方面退出应用程序的唯一方法是调用MPI\u Abort。这将导致所有MPI进程突然终止,无论此时每个列组在代码中的什么位置。由于MPI\u Abort不是一个集合例程,因此不可能对任何其

[MPi-C++]

我提出了一个应用程序,在特定条件下,它应该关闭所有进程中的应用程序。
我试图使用根进程完成它,但我想向所有其他进程发送消息以终止它。如何做到这一点?

在没有通信的情况下,无法在所有进程上干净地退出MPI应用程序。这意味着,如果您的MPI应用程序的某个子进程出现问题(例如,某个进程出现错误),则单方面退出应用程序的唯一方法是调用
MPI\u Abort
。这将导致所有MPI进程突然终止,无论此时每个列组在代码中的什么位置。由于
MPI\u Abort
不是一个集合例程,因此不可能对任何其他列组执行任何清理

如果您希望有一个干净的退出,您需要定期在所有级别之间沟通,无论所有级别上的一切是否仍在工作,或者是否是时候退出。例如,您可以使用
MPI\u SUM
作为操作定期调用
MPI\u Allreduce
。如果某个进程满足退出条件,则将其作为数据发送
1
,否则将其发送
0
。现在,您只需在
MPI\u Allreduce
之后检查总和是否大于
0
,如果大于,则有序退出应用程序