OpenSHMEM 错误处理与恢复机制解析
1. 错误报告后的处理
当错误被报告后,与 OpenSHMEM 库的通信可能无法进行。不过,为对称数据对象分配的内存仍可在本地处理元素(PE)中使用,这使应用程序有机会验证数据的正确性、在退出前进行检查点操作,或者继续使用具有弹性的通信库。
2. 错误处理程序的堆叠
用户可以像调用普通 C 函数一样随时调用错误处理程序(包括预定义的错误处理程序)。具体而言,用户定义的错误处理函数可以调用另一个错误处理函数。为了调用当前设置的错误处理程序,用户可以使用 shmem_errhandler_get 获取错误处理程序及其参数,然后直接调用该错误处理程序,或者用自己的错误处理程序替换它,并在替换的错误处理程序中进行链式调用。Fortran 也提供了类似的接口,还增加了调用错误处理函数的接口。
3. 线程安全
尽管 OpenSHMEM 目前没有关于线程安全操作的完整定义,但对于多线程程序中的错误处理程序调用,我们设想其行为如下:每个 PE 只会调用一次错误处理程序。错误处理程序被调用后,PE 中任何线程的阻塞操作都会被打破。并发操作和错误处理程序调用的明显顺序将取决于具体实现。
4. 错误传播
当错误报告给特定的 PE 后,该 PE 可能选择或被迫停止从无错误执行路径进行操作和更新。如果通信模式复杂,故障的发生可能会严重干扰应用程序,仅进行本地错误报告可能无法实现有效的恢复。
下面通过一个示例来说明:
if (0 == rank)
{
超级会员免费看
订阅专栏 解锁全文
87

被折叠的 条评论
为什么被折叠?



