0

[MPi-C++]

我做了一个应用程序,在特定条件下它应该关闭所有进程中的应用程序。我试图使用根进程来实现它,但我想向所有其他进程发送消息以终止。我怎么能做这个???

4

1 回答 1

1

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

如果您希望有一个干净的退出,您需要定期在所有级别之间进行沟通,是否所有级别的一切仍在运行,或者是否是时候退出了。例如,您可以定期调用MPI_AllreducewithMPI_SUM作为操作。如果您的退出条件在某个进程上得到满足,则将其1作为数据发送,否则将其发送0。现在您只需要检查MPI_Allreduce总和是否大于0,如果是,则以有序的方式退出您的应用程序。

于 2012-07-04T22:29:48.170 回答