在 MPI 应用程序中处理信号/正常退出

2023-12-13

如何在 MPI 应用程序中安全地处理信号(例如 SIGUSR1,它应该告诉应用程序其运行时间已过期,并应在接下来的 10 分钟内终止。) 我有几个限制:

  • 在退出应用程序之前,请先完成所有并行/串行 IO!
  • 在所有其他情况下,应用程序可以毫无问题地退出

如何安全地实现这一点,在尝试退出时不会出现死锁,并正确地让当前上下文跳回到main()并打电话MPI_FINALIZE()? 不知何故,进程必须就退出达成一致(我认为这在多线程应用程序中是相同的),但是如何在无需进行太多通信的情况下有效地完成这一点呢?有人知道正确执行此操作的标准方法吗?

以下是一些可能有效或无效的想法:

Idea 1:
假设对于每个进程,我们在信号处理程序中捕获信号并将其推送到“未处理的信号堆栈”(USS)上,然后我们只需从信号处理程序例程返回即可。然后,我们的应用程序中有某些终止点,特别是在 IO 操作之前和之后,然后处理 USS 中的所有信号。 例如,如果 USS 中有 SIGUSR1,则每个进程将在终止点退出。

  • 这个想法存在一个问题,即仍然可能存在死锁,进程 1 只是在终止点之前捕获信号,而进程 2 已经通过了该点,现在正在启动并行 IO。进程 1 将退出,这会导致进程 2 死锁(等待进程 1 退出的 IO)...

Idea 2:
只有主进程0在信号处理程序中捕获该信号,然后发送广播消息:“所有进程退出!”在应用程序中的特定点。所有进程都会收到广播并抛出并捕获异常main and MPI_FINALIZE叫做。

  • 这样退出会安全发生,但代价是必须接收连续的广播消息来查看是否应该退出

多谢!


如果您的目标是在同一点停止所有进程,那么就无法始终在可能的终止点进行同步。即需要在端点进行集中呼叫。

当然,您可以尝试通过使用另一个集体调用的同步来确保正确终止来避免额外的广播,或者将终止信息存储在现有广播上,但我认为这不值得。毕竟,您只需要在 I/O 之前进行同步,并且至少每十分钟同步一次。在这样的频率下,即使是广播也不是性能问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MPI 应用程序中处理信号/正常退出 的相关文章

  • 将按钮控件嵌入到现有 Direct3D 应用程序中

    我想将自己的内容覆盖在 Direct3D v9 游戏 由第三方制作 之上 叠加互动按钮 具体来说 我想覆盖一个可点击的按钮控件 就像 Steam 所做的那样 尽管我正在尝试一个更简单的界面 理想情况下 我能够覆盖 WPF 按钮或 Windo
  • 不带()的sizeof有什么作用? [复制]

    这个问题在这里已经有答案了 作者是这个问题 https stackoverflow com questions 18898410 2 dimensional array simple understanding当我问他什么时 他只是取笑我s
  • 使用 stringstreams 将字符串转换为 __uint128_t

    我正在尝试从字符串中提取不同类型的数据 void readHeader char buf BUFFSIZE std istringstream hdr buf uint128 t id client hdr gt gt id client
  • C++:初始化结构体并设置函数指针

    我正在尝试使用函数指针初始化结构 但是除非使用全局函数完成 否则我很难这样做 以下代码有效 float tester float v return 2 0f v struct MyClass Example typedef float My
  • 通过 Office API 将多个 Word 文档保存为 HTML

    我有大量的Word文档需要解析 由于它们都是从同一个模板创建的 我认为最好的方法是将它们保存为 HTML 文件并解析 HTML 本身 虽然将单个 Word 文档保存为 HTML 相当容易 但我还没有找到从 Word 内部执行批量过程的方法
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 删除 QComboBox“下拉”动画

    我正在使用 Qt 4 8 并且想在单击 QComboBox 时摆脱 下拉 动画 我也想稍微移动一下 到目前为止 我一直在考虑重新实现 showPopup 和 hidePopup 但不知道如何使其工作 此外 每次我尝试使用 CSS 进行移动或
  • 用于生成 C++ 代码轮廓/图的工具 - 有这样的东西吗? [复制]

    这个问题在这里已经有答案了 我需要深入研究用 C 编写的软件组件并对其进行一些修改 我幻想生成一些代码映射 它将显示类之间的关系并引导我完成方法的流程 调用图 有这个工具吗 几年前 我使用 Rational Rose 建模工具 该工具具有对
  • 如何混淆整数?

    我需要从 C 中的整数列表生成唯一值的列表 我以为是 MD5 或类似的 但它们生成了太多字节 整数大小为 2 个字节 例如 我想获得单向通信 0 gt ARY812Q3 1 gt S6321Q66 2 gt 13TZ79K2 因此 在证明哈
  • 如何在 TargetFrameworks 标记中每个框架运行一次的目标之前创建仅运行一次而不是一次的 MSBuild 目标?

    我有一个我部分拥有的代码生成器工具 现在 csproj 文件可以在其中列出多个目标框架并构建所有这些框架 我试图弄清楚如何使 MSBuild 目标仅在每个目标中生成一次代码无论列出了多少个目标框架 都将运行构建 并让每个目标框架的编译等待代
  • 从 C++ 中的 std::string 获取字节

    我正在一个 C 非托管项目中工作 我需要知道如何获取像 一些要加密的数据 这样的字符串并获取一个 byte 数组 我将用它作为加密的源 在 C 中我做 for int i 0 i lt text Length i buffer i byte
  • 更改 RabbitMQ 队列中的参数

    我有一个 RabbitMQ 队列 最初声明如下 var result channel QueueDeclare NewQueue true false false null 我正在尝试添加死信交换 因此我将代码更改为 channel Exc
  • 如何使用SQL Server CE的动态连接字符串?

    我在 Windows 应用程序中使用 SQL Server CE 4 0 并使用实体框架创建它的模型 它工作正常 但我的问题是它没有构造函数来更改连接字符串 并且默认情况下它从app config file using var Contex
  • Web 服务错误“提供的 URI 方案‘http’无效;需要‘https’。”

    我的服务调用导致以下错误 提供的 URI 方案 http 无效 需要 https 应用程序配置值
  • ThemeInfo 属性有什么用?

    每当我创建新的 WPF 应用程序或 WPF 用户控件库时 AssemblyInfo cs文件包含以下属性 assembly ThemeInfo ResourceDictionaryLocation None where theme spec
  • 私有静态方法有必要吗?

    原理工程师 https stackoverflow com users 201787 metal在我上一家公司有一条规则private static方法应该作为实现文件中的函数实现 而不是作为类方法 我不记得他的规则是否有任何例外 我在目前
  • opencv中矩阵的超快中值(与matlab一样快)

    我正在 openCV 中编写一些代码 想要找到一个非常大的矩阵数组 单通道灰度 浮点数 的中值 我尝试了几种方法 例如对数组进行排序 使用 std sort 和选择中间条目 但与 matlab 中的中值函数相比 它非常慢 准确地说 在 ma
  • 文件/文件夹结构的递归搜索

    我正在尝试为返回文件和文件夹列表的 Web 服务构建递归搜索功能 我创建了这两个方法 因此它们充当递归搜索 它首先获取顶级内容 然后将任何文件添加到 fileList 并将任何子文件夹添加到 subFoldersList 我们传入访问级别
  • C 中的静态和外部内联函数[重复]

    这个问题在这里已经有答案了 我正在尝试详细了解静态函数和外部函数之间的区别 我知道静态内联函数和外部内联函数之间的基本区别 我的理解如有错误请指正 静态内联函数仅对定义它的翻译单元可见 外部内联函数可以在多个翻译单元中访问 最好在头文件中定
  • 在 C# 中调用并排显示窗口

    愚蠢的问题是否有一种简单的方法可以清除桌面 然后打开两个资源管理器窗口并调用 并排显示窗口 任务栏调用 只是想知道 MS 库中是否有 api 可以做到这一点 您可以使用TileWindowsWinAPI 函数通过 p invoke 将所需窗

随机推荐

  • Wpf面板后台问题

    当我不设置面板背景时 我无法获取鼠标事件 为什么有这种行为 我可以通过将背景设置为透明 默认情况下为空 来获取面板上的鼠标事件 空背景和透明背景有什么区别 When Background null它在渲染时不会向 MILCore 发出任何绘
  • Azure Analysis Services 是否支持服务主体登录 SQL Azure

    我有一个 Azure Analysis Services 模型 使用以下连接字符串从 SQL Azure 读取数据 Data Source MySQLAzureDB database windows net Initial Catalog
  • 不使用ros编译roscpp(使用g++)

    我正在尝试在不使用ROS其余部分的情况下编译roscpp 我只需要订阅一个节点 但该节点拥有使用旧版本ROS的节点 并且由于编译问题 我无法将我的程序与他的程序集成 我从git下载了源代码 https github com ros ros
  • 从 C# 执行多行 PowerShell 脚本

    我是 PowerShell 新手 我正在尝试从 C 执行 PowerShell 脚本 我编写的 PS 脚本将 xml 文件从主机 运行 PS 脚本 传输到远程计算机 脚本如下 Username User Password Pass Secu
  • 如果steps_per_epoch不适合样本数量怎么办?

    使用 Kerasfit generator steps per epoch 应等于可用样本总数除以batch size 但是发电机或fit generator如果我选择一个batch size不适合样本中的 n 次 是否会产生样本直到无法填
  • microsoft.office.tools.excel.dll 安装在哪里?

    我已经安装了带 NET 4 0的VS2010 SP1 但找不到microsoft office tools excel dll所在的位置 问题 gt 在哪里可以找到这个 DLL 通常 一旦安装了该程序集 该程序集就应该位于 GAC 中Off
  • 如何在 CMFCEditBrowseCtrl::EnableFileBrowseButton 中设置默认文件扩展名?

    如何在 CMFCEditBrowseCtrl EnableFileBrowseButton 中给出默认文件扩展名 应该如何传递参数 我尝试像下面的代码 CMFCEditBrowseCtrl py file path py file path
  • Java中将字符串拆分为等长子字符串

    如何分割字符串 Thequickbrownfoxjumps Java 中相同大小的子字符串 例如 Thequickbrownfoxjumps 4 个相同大小的应该给出输出 Theq uick brow nfox jump s 类似问题 Sc
  • PhantomJS open() 太慢

    我在 NodeJS 中进行网页抓取时遇到问题 我想从远程网页获取一些数据 但数据已从 javascript 插入到 html 中 我开始使用 PhantomJS 它运行得很好 除了一件事阻碍了我完成工作 PhantomJS 运行速度太慢 这
  • 关于暂定定义

    我从一本关于暂定定义的书中读到 暂定定义是没有任何外部数据声明 存储类说明符并且没有初始值设定项 暂定定义 如果翻译单元的结尾是 已达到并且没有出现带有初始化程序的定义 标识符 请解释一下上面这句话的意思 另外 声明和定义之间的区别 我因此
  • RCPP_MODULE 用于继承类

    当我尝试使用继承类的模块时遇到问题 基本上 我无法编译这部分 RCPP MODULE PACE using namespace Rcpp class
  • 何时使用 StringBuilder? [复制]

    这个问题在这里已经有答案了 可能的重复 字符串与 StringBuilder 我刚刚重温了一些我用来学习 VB NET 的书籍 我不确定我是否已经理解了这一点 了解 StringBuilder 是如何 什么的 使用指导是什么 如果您要连接
  • matlab编程(如何实时处理)

    我正在尝试用 matlab 制作频谱图 这是我的代码 Record your voice for 100 seconds recObj audiorecorder disp Start speaking recordblocking rec
  • 以编程方式枚举 Microsoft Edge 历史记录

    我使用 FindFirstUrlCacheEntry FindNextUrlCacheEntry Win API 在 C 中以编程方式获取 Internet Explorer 的历史记录 您能告诉我如何使用 C Windows API 获取
  • GCC的通行证和调用的程序是什么?

    它出现在另一个问题 调用了哪些程序和部分gcc 特别是编译时C or C 以便有人可以设计一些拦截和更改流程以用于各种自定义编码目的的方案 编译器二进制文件是 编译器驱动程序 即gcc 以及编译器本身 它也兼作预处理器 cc1 or cc1
  • 如果未选中,则尝试设置默认复选框值

    基本上我可以获取选中该框时适用的值 1 但在未选中时我无法让它发送默认值 0
  • 将 href 替换为不同的值

    我有一些 PHP 代码 它可以获取网站的 HTML 代码 然后将其回显到屏幕上 我正在寻找一种扫描 HTML 的方法 然后将所有 href 值替换为另一个值 例如 我有 http somepage com 其中包含 HTML 代码 a hr
  • 如何在 app.json 中添加这些语句?

    我想使用 expo 管理的工作流程在我的应用程序中允许 HTTP 流量 如何将这些语句添加到 app json 文件中
  • SVN 使用通配符限制文件访问

    我接任一个项目的软件主管 现在负责管理该项目的 SVN 存储库 对不同部分的访问由 authz 文件控制 已经为开发人员 主管 测试人员和 cm 控制人员建立了小组 一个文件存在于我们想要限制访问的多个分支和标签中 为了锁定它 除了潜在客户
  • 在 MPI 应用程序中处理信号/正常退出

    如何在 MPI 应用程序中安全地处理信号 例如 SIGUSR1 它应该告诉应用程序其运行时间已过期 并应在接下来的 10 分钟内终止 我有几个限制 在退出应用程序之前 请先完成所有并行 串行 IO 在所有其他情况下 应用程序可以毫无问题地退