中止MPI中所有进程的执行

Gop*_*pal 5 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; 这样做..

我的第一个问题是上述哪两种方法更好,为什么?
第二个是当我使用第二种方法后,我在成功完成执行后得到了msg ...

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

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

Gre*_*sev 2

MPI_Abort用于非正常工作终止。 标准说:

int MPI_Abort(MPI_Comm comm, int errorcode)

该例程做出“最佳尝试”来中止通信组中的所有任务。该函数不需要调用环境对错误代码采取任何操作。

因此,它实际上应该只用于退出 MPI 作业作为最后的手段,而不是作为正常的退出标志。

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