问题是使用MPI将密码搜索到大小约为10GB的大文件中。我在(Total number of bytes in file / P)
的块大小的不同进程之间划分文件,其中p是通过循环并行地在每个进程中创建和应用我的搜索逻辑的进程数。我想在一个进程找到解决方案时停止其他进程。
所以要按照两种方法中止我正在使用的所有其他进程。
if(flag == 1) break
检查每个进程的此标志;并且这样做.. 我的第一个问题是上述哪两种方法更好,为什么? 第二个是当我使用第二种方法后,我在成功完成执行后得到了msg ...
* MPI_Finalize发生错误 MPI最终确定之后* *** MPI_ERRORS_ARE_FATAL(再见) [abc:19150] MPI_INIT成功完成前中止;不能保证所有其他进程都被杀死了!
* MPI_Finalize发生错误 MPI最终确定之后 * MPI_ERRORS_ARE_FATAL(再见) [abc:19151]在MPI_INIT成功完成之前中止;不能保证所有其他进程都被杀死了!
答案 0 :(得分:2)
MPI_Abort
用于异常作业终止。 The standard说:
int MPI_Abort(MPI_Comm comm, int errorcode)
此例程是“最好的尝试”,以中止comm组中的所有任务。 此函数不要求调用环境对错误代码采取任何操作。
所以它真的只应该用来作为最后的手段摆脱MPI工作,而不是作为正常的退出标志。
对于第二个问题,检查是否有任何进程以某种方式调用MPI_Finalize
两次。此外,一旦调用MPI_Finalize
,就不能使用其他MPI函数。