【发布时间】:2016-09-06 23:32:47
【问题描述】:
我的 mpi 应用程序有一个信号处理程序来捕获 ctrl-C 或 ctrl-break 一个 Windows,当这个应用程序在 cmd 窗口中串行运行时,它可以工作。它被拦截,然后代码执行最后的输出,代码优雅地退出。
但是,当我与例如“mpiexec -np 2 myparapp.exe”并行运行它并按 ctrl-C 或 ctrl-break 时,信号似乎无法到达我的应用程序,因为它被突然终止.我需要做一些特别的事情吗,比如确保我的信号处理程序在代码中的特定位置注册?
我正在使用 MSMPI,据我了解,它是 mpich 的一个分支。
【问题讨论】:
-
您使用的是哪种 MPI 实现?如果是 OpenMPI,你可能想看看linux.die.net/man/1/mpiexec。
-
mpiexec似乎是通过终止您的进程来响应 control-C,可能是故意的,或者它可能只是没有捕获 control-C 而自己被杀死。是否有任何方法可以解决这个问题将取决于具体的实现。 (注意 Windows 实际上没有信号可能会有所帮助,尽管 C 运行时在某种程度上模拟了它们。)
标签: windows mpi signal-handling mpiexec