中止MPI中所有进程的执行

时间:2012-01-30 12:45:21

标签: c parallel-processing mpi

问题是使用MPI将密码搜索到大小约为10GB的大文件中。我在(Total number of bytes in file / P)的块大小的不同进程之间划分文件,其中p是通过循环并行地在每个进程中创建和应用我的搜索逻辑的进程数。我想在一个进程找到解决方案时停止其他进程。

所以要按照两种方法中止我正在使用的所有其他进程。

  1. 第一种方法是在找到解决方案时从进程调用MPI_Abort()函数。
  2. 第二种方法是使用标志并在任何进程找到其解决方案时设置它。设置此标志后,使用非阻塞send / recv / Iprobe函数将其发送到所有其他进程。然后使用if(flag == 1) break检查每个进程的此标志;并且这样做..
  3. 我的第一个问题是上述哪两种方法更好,为什么?          第二个是当我使用第二种方法后,我在成功完成执行后得到了msg ...

    * MPI_Finalize发生错误 MPI最终确定之后* ***  MPI_ERRORS_ARE_FATAL(再见) [abc:19150] MPI_INIT成功完成前中止;不能保证所有其他进程都被杀死了!

    * MPI_Finalize发生错误 MPI最终确定之后 * MPI_ERRORS_ARE_FATAL(再见) [abc:19151]在MPI_INIT成功完成之前中止;不能保证所有其他进程都被杀死了!

1 个答案:

答案 0 :(得分:2)

MPI_Abort用于异常作业终止。 The standard说:

  

int MPI_Abort(MPI_Comm comm, int errorcode)

     

此例程是“最好的尝试”,以中止comm组中的所有任务。   此函数不要求调用环境对错误代码采取任何操作。

所以它真的只应该用来作为最后的手段摆脱MPI工作,而不是作为正常的退出标志。

对于第二个问题,检查是否有任何进程以某种方式调用MPI_Finalize两次。此外,一旦调用MPI_Finalize,就不能使用其他MPI函数。