并行运行合金分析仪

2024-04-22

我正在生成相当多的合金规格(*.als 文件)。对于我试图解决的中等规模问题,我生成了 1536 个 *.als 文件。为了节省运行所有这些文件的时间,我使用了 Java 并发 API(特别是ExecutorCompletionService with Future) 跑步n并行合金命令,其中n是机器上可用逻辑核心的数量(在我的例子中为 4,对于具有超线程的 2 个 CPU)。

在这种情况下,有时会发生命令冻结并且在“合理”延迟内不返回任何结果的情况,我将其固定为 5 秒,因为每个 *.als 相当简单。

我不清楚

  • Alloy 是否真的可以在这样的并发/并行上下文中使用? (我希望这是可能的,因为我的命令依赖于不同的Module)
  • 如何中断/停止“冻结”命令?我的程序可以检测这些冻结的命令,然后忽略它们,最后重新安排它们进行预定义(最大)的尝试次数。好消息是,我总是设法运行这 1536 个命令,通常是在多次尝试之后。坏消息是,在所有这些 Alloy 命令完成后,我通常会“冻结”我的 PC(即最多有 4 个内核运行到 100%)(请注意,我的程序(Eclipse 插件)此时不会终止)并继续执行)。杀死 JVM“解冻”我的电脑,可能表明“冻结”的 Alloy 仍在运行......

对于代码,我写了一些丑陋的技巧来尝试在遇到冻结问题时进行恢复。但基本上,它看起来像(更多细节 https://github.com/SINTEF-9012/diva/blob/master/diva.model.simulation/src/diva/helpers/DivaHelper.java):

for(MyClass c : myClasses) {    
    AlloyWrapper worker = new AlloyWrapper(c, ...);
    tasks.add(worker);
    ecs.submit(worker);
}

我确定了执行器 ecs 的大小,以便它应该使用机器上可用的所有核心/物理线程。

至于 AlloyWrapper,它是这样做的(更多细节 https://github.com/SINTEF-9012/diva/blob/master/diva.model.simulation/src/diva/alloy/AlloyWrapper.java):

Allow 包装器基本上为 Alloy 生成输入(基于 MyClass 中包含的信息)并调用

Module world = CompUtil.parseEverything_fromFile(null, null, input.getAbsolutePath());
solution = TranslateAlloyToKodkod.execute_command(NOP, world.getAllReachableSigs(), world.getAllCommands().get(0), opt);

如果您需要更多信息,请告诉我。


None

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

并行运行合金分析仪 的相关文章

随机推荐

  • 尝试通过 SSH 克隆时“似乎不是 git 存储库”

    我有一台运行 Windows 10 的计算机 我想在其上托管 git 存储库 OpenSSH 正在运行 我可以通过 Powershell 通过 SSH 连接到机器 因此它是可连接的 我在该机器上名为 Test 的文件夹中创建了一个新的 gi
  • 调试 Ruby 段错误

    如何确定段错误是否是由于库不一致或我正在使用的某些 gem 中的错误造成的 uname a Linux redacted 3 2 0 24 generic 39 Ubuntu SMP Mon May 21 16 52 17 UTC 2012
  • 可变格式

    我编写了一个程序来计算平方有限差分矩阵 您可以在其中输入行数 等于列数 gt 这存储在变量矩阵中 该程序运行良好 program fin diff matrix implicit none integer dimension allocat
  • 更改多维数组的字符编码

    我有一个多维数组 看起来像这样 ourThing array id gt 1 title gt foo data gt array name gt bar metadata gt array time gt 2011 02 01 12 00
  • Python-从字符串中提取文本

    从字符串中提取文本的最有效方法是什么 是否有一些可用的函数或正则表达式 或者其他方式 例如 我的字符串在下面 我也想提取 ID 分别作为 ScreenNames User ID 1234567890 ScreenName RandomNam
  • 我可以在同一 REST API 响应中发送 Excel 文件和 JSON 正文以及文件描述吗

    我有一个 API 它返回 APPLICATION OCTET STREAM 作为媒体类型作为响应 我需要增强它以发送一个 JSON 正文 其中包含有关文件的一些详细信息 例如文件中正确和错误记录的计数 所以基本上我需要在同一个 API 中提
  • 无法从 java Double 转换为 java Date

    我在将双精度数转换为 Java 日期对象时遇到问题 格式为 yyyy MM dd HH mm ss 我尝试将此双精度值转换为长整型值 然后用结果实例化一个 Date 对象 但出现错误 提示我无法从双精度值转换为长整型值 我的时间戳双精度值采
  • 通用列表和通用数组[重复]

    这个问题在这里已经有答案了 可能的重复 Java 中通用数组的最简单替代方案是什么 https stackoverflow com questions 383888 what is the easiest alternative to a
  • Home / end 控制字符在 Mac OS X 终端下的 emacs 中不起作用

    我在 Mac OS X 上的终端窗口中运行 emacs 在同一终端的 bash shell 中 我可以使用Shift
  • C 中逻辑运算符的优先级[重复]

    这个问题在这里已经有答案了 可能的重复 如果您查看 C 的优先级表 您会发现 的优先级高于 但请看下面的代码 a b c 1 a b c printf d d d n a b c 它打印出 2 1 1 这意味着 a 首先被评估 一旦程序看到
  • VS/TFS 2010 DIFF 选项在哪里?

    我是 TFS 新手 正在使用 VS 和 TFS 2010 RC 版本 在我过去使用过的所有其他 DIFF 工具中 我都可以选择配置如何处理空白差异等 使用 VS2010 和 TFS2010 时这些选项在哪里 Thanks 在 VSTS 中使
  • 带有第二个数据库的 PostgreSQL 外键

    我在 PostgreSQL 9 3 上运行以下查询 CREATE TABLE app item id SERIAL NOT NULL PRIMARY KEY location id UUID NOT NULL CREATE INDEX ap
  • 创建新的 Expect 对象时,cgi-perl 文件中出现 Apache [PTY 错误]

    我有一个 perl 脚本 usr bin perl w use DateTime use Expect use IO Pty use CGI Fast while q new CGI Fast my ip q gt param ip my
  • Python 请求,返回:解析值时遇到意外字符:L.Path

    我试图从 The Trade Desk 的 沙盒 api 获取身份验证令牌 但收到 400 响应 指出 将内容类型 application json 读取为 JSON 时出错 意外 解析值时遇到的字符 L Path 第 0 行 位置 0 W
  • 用于读/写 XMM 和 YMM 寄存器的内联汇编代码?

    我有 2 个变量来模拟 X86 XMM 和 YMM 如下所示 uint64 t xmm value 2 uint64 t ymm value 4 现在我想使用内联汇编来读取和写入 XMM YMM 寄存器 如何编写GCC内联汇编来复制xmm
  • 使用 ffmpeg 进行视频标准化

    无论如何 有没有使用 ffmpeg 脚本将视频亮度标准化为其完整的动态范围 我一直在尝试用 lutyuv 这样做 ffmpeg i input mp4 vf lutyuv y val minval 255 maxval minval 输出
  • 使用 mysqldump 转储和加载 MySQL InnoDB 数据库的最快方法是什么?

    我想使用 mysqldump 和 MySQL 5 1 创建一个包含大约 40 个 InnoDB 表和大约 1 5GB 数据的数据库副本 能够实现最快转储和加载数据的最佳参数是什么 即 single transaction 此外 将数据加载到
  • 最大执行时间超过 30 秒 Laravel 4 错误

    我在 laravel 4 的 UserController 中发送密码请求的某个函数遇到问题 它检查数据库中是否存在电子邮件 如果用户存在 则发送电子邮件 然后 该函数在表中创建一个令牌 并将其发送到电子邮件内链接的末尾 该函数的工作原理与
  • JPA 中更好的异常处理

    我在持久化我的实体时使用了 EJB3 JPA 我很高兴它能够管理我的数据库相关内容 任务 我唯一关心的是异常处理 我保存实体时的示例代码总是采用这种风格 我在网上读到的大多数教程都是这种风格 也没有考虑异常处理 Stateless publ
  • 并行运行合金分析仪

    我正在生成相当多的合金规格 als 文件 对于我试图解决的中等规模问题 我生成了 1536 个 als 文件 为了节省运行所有这些文件的时间 我使用了 Java 并发 API 特别是ExecutorCompletionService wit