如何在bash中检查mpi代码是否成功?
我想自动检查许多可执行文件是否在bash中成功运行 假设我有一个可执行文件如何在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代码是否
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(…)
toif…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
宏,那么它就不起作用了(例如,如果程序是在非调试模式下编译的,则它不会执行任何操作),因此您可能希望模拟这种情况(请参阅)