我必须验证MPI程序中某些数据的状态。该程序将在具有分布式内存系统的超级计算机上运行。对C标准的断言函数的快速研究表明,断言内部使用abort()函数进行程序终止。我还没有找到关于abort()如何在多进程程序上工作的信息,特别是在MPI的上下文中 - 它与POSIX环境非常不同。 abort()只会终止调用它的进程,还是可以终止所有进程?
最后,如果条件失败,我将如何真正终止MPI程序的所有进程? MPI库中是否有内置断言?
答案 0 :(得分:3)
abort()
仅终止调用它的MPI任务。
很可能会被mpirun
和/或资源管理器检测到,并在此之后终止所有MPI作业(例如,所有节点上的所有MPI任务)。
话虽这么说,这是依赖于库/系统的,你应该先仔细检查一下。
终止MPI工作的正确方法是
MPI_Abort(MPI_COMM_WORLD, errorcode)
errorcode
是int
,通常会被赋予严格正值。