【问题标题】:How to check is a mpi code success or not in bash?如何在 bash 中检查 mpi 代码是否成功?
【发布时间】:2019-11-22 18:55:20
【问题描述】:

我想在 bash 中自动检查很多可执行文件是否运行成功。

假设我有一个可执行文件a.out

我可以通过 bash 来检查它是否成功

./a.out
if [ "$?" -ne "0" ]; then
    echo "code error!"
fi

如果是mpi运行的可执行文件

mpirun -np 4 ./a.out // run the code by 4 processes

我无法通过上述相同的方式检查可执行文件是否正常。因为在这种情况下$? 表示mpirun 是否成功。

那么如何在 bash 中检查 mpi 代码是否成功?

提前致谢。

【问题讨论】:

    标签: bash mpi


    【解决方案1】:

    一个编写良好的 MPI 程序应该 - 成功后:让所有任务调用MPI_Finalize() 并结束exit(0) - 失败时:调用MPI_Abort() 并以非零错误代码结束exit(rc)(注意很可能MPI_Abort() 由单个MPI 任务将中止整个作业,即使从未调用exit()

    然后由 MPI 库让 mpirun 退出,成功时错误状态为零,失败时错误状态非零。

    归根结底,如果a.out写得好,它是否是一个MPI应用程序并不重要。

    【讨论】:

    • 感谢您的解释,还有一个小问题,我正在使用 C 并且 <assert.h> 中的很多 assert 存在于 MPI 代码中。似乎如果断言失败,则不会调用 MPI_Abort()。将所有assert(...) 更改为if... MPI_Abort(...) 必须可以提供帮助。您对处理这个问题有什么建议吗?
    • 这听起来像是正确的方法。我会将assert(...) 替换为assert_mpi(...),然后按照您的描述创建assert_mpi() 宏。如果定义了NDEBUG 宏,assert() 是无操作的(例如,如果程序在非调试模式下编译,它什么也不做),所以你可能想模仿它(参见tutorialspoint.com/c_standard_library/assert_h
    猜你喜欢
    • 1970-01-01
    • 2016-07-22
    • 2016-04-16
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-12
    相关资源
    最近更新 更多