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