gpt4 book ai didi

c - 中止 MPI 中所有进程的执行

转载 作者:太空狗 更新时间:2023-10-29 15:07:33 24 4
gpt4 key购买 nike

问题是使用 MPI 在大约 10GB 的大文件中搜索密码。我将文件划分为 block 大小为 (文件中的总字节数/P) 的不同进程,其中 p 是要创建的进程数,并通过循环在每个进程中并行应用我的搜索逻辑。当一个进程找到解决方案时,我想停止其他进程。

因此,为了中止我正在使用以下两种方法的所有其他进程。

  1. 第一种方法是在进程找到解决方案时调用 MPI_Abort() 函数。
  2. 第二种方法是使用一个标志,并在任何进程找到其解决方案时设置它。设置此标志后,使用非阻塞发送/接收/Iprobe 函数将其发送到所有其他进程。然后每个进程使用 if(flag == 1) break 检查这个标志;并这样做..

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

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

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

最佳答案

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

int MPI_Abort(MPI_Comm comm, int errorcode)

This routine makes a "best attempt" to abort all tasks in the group of comm. This function does not require that the invoking environment take any action with the error code.

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

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

关于c - 中止 MPI 中所有进程的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com