【发布时间】:2011-07-28 09:30:37
【问题描述】:
我想知道一个 MPI 进程是否可以向另一个 MPI 进程发送终止信号?
或者不同的是,当其中一个进程仍然处于活动状态时,有没有办法优雅地退出 MPI 环境? (即 mpi_abort() 打印一条错误消息)。
谢谢
【问题讨论】:
我想知道一个 MPI 进程是否可以向另一个 MPI 进程发送终止信号?
或者不同的是,当其中一个进程仍然处于活动状态时,有没有办法优雅地退出 MPI 环境? (即 mpi_abort() 打印一条错误消息)。
谢谢
【问题讨论】:
不,这在使用 MPI 库的 MPI 应用程序中是不可能的。
单个进程不会知道其他进程的位置,也不会知道其他进程的进程 ID - MPI 规范中没有任何内容可以实现您想要的终止。
如果您要手动执行此操作,那么您需要 MPI_Alltoall 来在整个系统中交换进程 ID 和主机名,然后当您想要杀死某些东西时,您需要生成 ssh/rsh 来访问所需的节点。总而言之,它不便携,不干净。
MPI_Abort 是实现您想要实现的目标的正确方法。来自 Open MPI 手册:
“此例程做出“最佳尝试”以中止通信组中的所有任务。” (即 MPI_Abort(MPI_COMM_WORLD, -1) 是您所需要的。
MPI_Abort 期间的任何输出都是特定于机器的 - 因此您可能会或可能不会收到您提到的错误消息。
【讨论】: