【问题标题】:How to pass signals through mpiexec on windows?如何在 Windows 上通过 mpiexec 传递信号?
【发布时间】: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


【解决方案1】:

Microsoft 的员工热情地回复了我,

目前无法传递 Ctrl-C/Ctrl-Break 事件 直接到子进程。 Mpiexec 有 Ctrl-C 处理程序来处理 干净地中止应用程序,但它没有通过 Ctrl-C 进程的事件。

我目前正在为 mpiexec 编写一个包装器,它将拦截信号并放入一个文件以向应用程序发出它应该退出的信号。

【讨论】:

  • 您可能想询问您的应用程序是否可以做任何事情来识别 Mpiexec 正试图干净地关闭它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-02
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多