[MPi-C++]
我做了一个应用程序,在特定条件下它应该关闭所有进程中的应用程序。我试图使用根进程来实现它,但我想向所有其他进程发送消息以终止。我怎么能做这个???
[MPi-C++]
我做了一个应用程序,在特定条件下它应该关闭所有进程中的应用程序。我试图使用根进程来实现它,但我想向所有其他进程发送消息以终止。我怎么能做这个???
在没有通信的情况下,无法在所有进程上干净地退出 MPI 应用程序。这意味着,如果您的情况仅发生在 MPI 应用程序的一部分进程上(例如,您在其中一个进程上出现错误),则单方面退出应用程序的唯一方法是调用MPI_Abort
. 这将导致所有 MPI 进程突然结束,无论当时每个等级在代码中的哪个位置。由于MPI_Abort
不是集体例行程序,因此不可能对任何其他等级执行任何清理。
如果您希望有一个干净的退出,您需要定期在所有级别之间进行沟通,是否所有级别的一切仍在运行,或者是否是时候退出了。例如,您可以定期调用MPI_Allreduce
withMPI_SUM
作为操作。如果您的退出条件在某个进程上得到满足,则将其1
作为数据发送,否则将其发送0
。现在您只需要检查MPI_Allreduce
总和是否大于0
,如果是,则以有序的方式退出您的应用程序。