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

如何在bash中检查mpi代码是否成功?,bash,mpi,Bash,Mpi,我想自动检查许多可执行文件是否在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中成功运行

假设我有一个可执行文件
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代码是否成功


提前感谢。

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

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


一句话,如果a.out写得好,那么它是否是MPI应用程序并不重要。

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

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


总之,如果
a.out
写得很好,那么不管它是否是MPI应用程序。

感谢您的解释,还有一个小问题,我正在使用C,MPI代码中存在大量
assert
中的
assert
。似乎如果assert失败,将不会调用MPI\u Abort()。更改所有
assert(…)
to
if…MPI\u Abort(…)
肯定会有帮助。您有什么建议来处理这个问题吗?这听起来是正确的方法。我将用
assert\u MPI(…)
替换
assert(…)
,然后按照您的描述创建
assert\u MPI()
宏。
assert()如果定义了
NDEBUG
宏,则
为无操作(例如,如果程序在非调试模式下编译,则不会执行任何操作),因此您可能希望模拟该操作(请参阅)感谢您的解释,还有一个小问题,我正在使用C,MPI代码中存在大量
中的
assert
。似乎如果assert失败,将不会调用MPI\u Abort()。将所有
assert(…)
更改为
if…MPI\u Abort(…)
必须能帮上忙。你有什么建议来处理这个问题吗?这听起来是正确的方法。我会用
assert\mpi(…)
替换
assert\u mpi(…)
,然后按照你的描述创建
assert\u mpi()
宏。
assert()
如果定义了
NDEBUG
宏,那么它就不起作用了(例如,如果程序是在非调试模式下编译的,则它不会执行任何操作),因此您可能希望模拟这种情况(请参阅)