在上一篇中我们介绍了 mpi4py 中的属性和命名操作,下面将介绍 mpi4py 中的错误处理。
预定义错误处理
通信子
MPI.Comm.Set_errhandler(self, Errhandler errhandler)
将错误处理函数 errhandler
与当前通信子对象关联。
MPI.Comm.Get_errhandler(self)
获取与当前通信子对象相关联的错误处理函数,为一个 MPI.Errhandler 类对象。
MPI.Comm.Call_errhandler(self, int errorcode)
激活通信子对象上的错误处理函数,处理的错误码为 errorcode
。MPI 标准中,通信子对象的默认错误处理函数为 MPI.ERRORS_ARE_FATAL,调用该方法时,如果没有指定其它错误处理函数,则默认地会调用 MPI.ERRORS_ARE_FATAL 停止该通信子组内的所有进程。不过需要注意的是,为了有助于 Python 的异常处理机制,mpi4py 中将 MPI.COMM_WORLD 和 MPI.COMM_SELF 的默认错误处理函数设置成了 MPI.ERRORS_RETURN。如果你需要将 mpi4py 中 MPI.COMM_WORLD 和 MPI.COMM_SELF 的错误处理函数传递给 C/C++/Fortran 库,推荐先将其错误处理函数恢复为默认的 MPI.ERRORS_ARE_FATAL,以防止调用库中发生的错误不会被注意到。
窗口
MPI.Win.Set_errhandler(self, Errhandler errhandler)
将错误处理函数 errhandler
与当前窗口对象关联。
MPI.Win.Get_errhandler(self)
获取与当前窗口对象相关联的错误处理函数,为一个 MPI.Errhandler 类对象。
MPI.Win.Call_errhandler(self, int errorcode)
激活窗口对象上的错误处理函数,处理的错误码为 errorcode
。MPI 标准中,窗口对象的默认错误处理函数为 MPI.ERRORS_ARE_FATAL,调用该方法时,如果没有指定其它错误处理函数,则默认地会调用 MPI.ERRORS_ARE_FATAL 停止构成该窗口对象组内的所有进程。不过需要注意的是,为了有助于 Python 的异常处理机制,mpi4py 中将新创建的窗口对象的默认错误处理函数设置成了 MPI.ERRORS_RETURN。如果你需要将 mpi4py 中窗口的错误处理函数传递给 C/C++/Fortran 库,推荐先将其错误处理函数恢复为默认的 MPI.ERRORS_ARE_FATAL,以防止调用库中发生的错误不会被注意到。
文件
MPI.File.Get_errhandler(self)
将错误处理函数 errhandler
与当前文件句柄关联。