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