linux - 打开 MPI 虚拟定时器已过期

标签 linux mpi

我在 Gentoo 3.13 上使用 Open MPI 1.8 通过服务器/客户端概念管理从一个程序到另一个程序的数据传输。服务器和客户端都作为单独的进程通过 mpiexec 启动。几天后(这是一个相当繁重的计算......),我有时会收到错误

mpiexec noticed that process rank 0 with PID 17213 on node XXX exited on signal 26 (Virtual timer expired).

不幸的是,该错误无法以可靠的方式重现,即该错误并不总是出现,也不总是出现在程序流中的同一点。我在其他机器上也遇到过这个错误。我已经将问题追溯到 ITIMER_VIRTUAL ,它在到期时会传递 SIGVTALRM (例如,参见 http://man7.org/linux/man-pages/man2/setitimer.2.html )。在手册页的 BUGS 部分,它说

Under very heavy loading, an ITIMER_REAL timer may expire before the signal from a previous expiration has been delivered. The second signal in such an event will be lost.

我想知道类似的情况是否也适用于 ITIMER_VIRTUAL?有没有人遇到过类似的问题并可以确认错误?

我能想到的唯一解决方法是调用setitimer(...)并尝试自己操作计时器。但是,我希望有另一种方法,因为我不能总是修改客户的源代码。有什么建议吗?

最佳答案

由于这个问题尚未得到正式回答,我将代表 Hristo 回答(@HristoIliev:我希望这对您来说没问题)。正如我的问题的第一条评论中指出的那样,Open MPI 源代码中没有任何可能导致虚拟计时器到期的提示。事实上,计时器问题与第三方库有关,该库导致代码在不可预测的时间后崩溃(取决于机器的当前负载)。

关于linux - 打开 MPI 虚拟定时器已过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23734729/

相关文章:

linux - 删除大量文件

android - 如何通过更改文件来切换手机的蓝牙状态?

c - MPI 卡在持久调用上

c - 使用 MPI_Reduce 的等级 ID 错误

linux - 删除重复行但保留前 2 个实例

c - Socket 编程的段错误

linux - 如何在 shell 脚本中要求 root 权限?

c++ - 通过 MPI 传递 Armadillo C++ 矩阵

linux - fork: retry: 资源暂时不可用

c++ - MPI : Percolate a subarray from slave processes to update main array in root/master process