如何在流程本身内停止MPI流程(对于分布式终端检测算法)?

时间:2013-12-10 17:46:07

标签: c++ parallel-processing mpi

我正在开发一个带有MPI的C ++项目,该项目实现了分布式终止检测算法。终止部分如下所示:

MPI_Iprobe(MASTER, TERMINATION, MPI_COMM_WORLD, &terminationFlag, &status); 
if (terminationFlag!=0)
{
     MPI_Recv(0, 0, MPI_INT, MASTER, TERMINATION, MPI_COMM_WORLD, &status);
     //Halt the process
}

MPI_Iprobe从MASTER节点查找带有TERMINATION标记的消息(MASTER在检测到终止条件时发送终止消息)。如果消息存在,则当前进程接收消息并自行停止。

在这里,我想知道如果收到终止消息后如何优雅地停止进程。我尝试过MPI_Finalize(),但程序不断产生以下错误:

*** The MPI_Send() function was called after MPI_FINALIZE was invoked.
*** This is disallowed by the MPI standard.
*** Your MPI job will now abort.

我通常将MPI_Finalize()放在代码的底部,以确保在调用此函数之前一切都已完成。但是,因为该过程可能在过程中间停止。我不知道是否应该使用MPI_Finalize()。

我使用mpic ++作为编译器和mpirun来运行程序。


更新

正如Hristo和suszterpatt指出的那样,我应该使用MPI_Finalize(),然后使用return 0。这似乎解决了这个问题。

0 个答案:

没有答案