
Modeloop将仿真引擎从Python迁移至Rust,运行速度提升最高16.4倍
来源标题:Porting the Simulation Engine into Rust
Modeloop将仿真引擎从Python重写为Rust后,在测试的工程模型上,模型运行平均快8.6倍,运行其生成的C代码平均快16.4倍,且两个引擎记录的结果一致。该数据来自单机测试,提速幅度因模型及信号记录量而异。
以下正文由 AI 翻译自 Hacker News 最新(原文版权归原站所有),可能存在偏差,重要内容请以原文为准。
将 Modeloop 的仿真引擎从 Python 迁移到 Rust 之后,在我们测试的工程模型上,运行模型的执行速度平均提升了 8.6 倍,运行模型生成的 C 代码的速度平均提升了 16.4 倍。两个引擎记录的结果一致。
这些测量结果来自单台机器上的测试。提升幅度因模型以及记录数据量的不同而有所差异。
控制算法的计算成本可能很低,但仿真成本却可能很高。在每个 tick 上,运行时必须决定执行哪些回调、在回调之间传递数值、更新状态、计算输入,并记录工程师想要查看的信号。当这项工作重复数千次时,周边机制的开销就变得至关重要。
在 Modeloop 的早期开发阶段,Python 帮助我们快速推进。我们可以修改引擎后立即运行,无需单独的原生编译步骤。在我们构建最初几个版本、打磨系统工作方式的过程中,这种短反馈循环带来了显著差异。
随着模型规模增长,这种权衡变得越来越明显。我们在开发期间节省的部分时间,变成了用户等待仿真的时间。我们优化了 Python 运行时,但其性能无法随我们需要支持的工作负载而扩展。运行更多回调、传输更大的信号、记录更多测量数据,都会增加每个 tick 重复工作的成本。
Rust 提供了若干对这个引擎至关重要的特性。它编译为原生机器码,让我们可以把调度和数据处理从 Python 解释器中移出。它还让我们能够直接控制内存布局和分配,而不需要垃圾回收器。这使得降低状态存储、信号传输和结果收集的开销成为可能。
性能只是决策的一部分。Rust 的类型系统和所有权规则会检查数据的使用方式以及资源的有效期限。这些检查对于一个协调模型状态、共享信号存储和原生库的引擎来说非常有用。它的并发检查也为安全的并行工作提供了基础,尽管本文中的基准测试测量的是顺序执行。
Rust 也契合 Modeloop 运行的环境。它可以通过原生接口调用生成的 C 控制器,并编译为 WebAssembly 以在浏览器中运行。这让我们能够在桌面端和 Web 端维护一个共享的仿真核心。
我们的目标是随着模型和项目的增长,打造一个响应迅速、快速的产品。实现这一目标促使我们用 Rust 完整重写了引擎。这项工作花了我们几个月时间,包括重建执行路径并验证它们保持了现有模型的行为。下面的测量结果展示了这项努力带来的性能提升。
为了具体了解仿真方面发生了什么变化,我们在受控工作负载、工程模型以及具有多种回调速率的嵌套控制器上比较了两种运行时。我们将执行时间与进程启动和结果写出分开测量,并在将每个配置纳入计时之前检查了记录信号。
样本输入读取场景,释放回调选择到期工作,执行与更新计算并保留状态,交换信号在回调之间传递数值,记录值捕获选定信号,↻ 在整个仿真过程中重复。一个 tick 内的概念性活动。它们的执行顺序遵循模型的依赖关系;间距不代表实际耗时。
在六个工程模型上,Rust 运行时在测试主机上为模型在环(MIL)提供了 8.60 倍的几何平均执行加速,为软件在环(SIL)提供了 16.42 倍的加速。
总的来说,这些结果解释了迁移在哪些方面有帮助,以及哪些方面仍需进一步工作。
为了隔离仿真运行时,我们将 Modeloop 1.6.0 中的历史 Python 执行实现与 Rust 运行时进行了比较,使用相同的编译器准备双方。编译在计时之前完成。
两个仿真目标需要不同的比较方式:
这一区别很重要。SIL 的加速可能来自降低调用和观察控制器的成本,即使控制器的 C 代码保持不变。在 MIL 中,两个运行时还以不同形式执行模型,因此模型自身的计算成本也可能不同。
计时的执行区间包括初始化、输入剖面计算、调度、状态更新、通信、记录选定信号、收集结果和终止。我们单独测量了设置和 MDF4 结果写出。外部计时器还测量了新进程的完成时间,包括启动和清理。
实验在 38 个纳入的目标准工作负载配置上保留了 912 次计时调用,每个配置使用十二轮随机配对。所有运行使用同一台 Intel i7-8750H WSL2 主机,每次调用都在一个固定到同一客户机逻辑 CPU 的新进程中启动。
下表报告了执行加速比。数值 8.60× 表示 Python 运行时在该执行区间内耗时是 Rust 的 8.60 倍。
每个条目是 Python/Rust 平均时间比的等模型几何平均。方括号显示逐点配对自助法 95% 置信区间,条件基于此主机和这些运行。MIL 和 SIL 在不同区块中测量,并保持为单独的汇总。
六个工程模型涵盖耦合液压罐、四分之一车悬架、永磁同步电机、热反应器、观测器反馈和张量反馈。它们的个体结果差异很大:MIL 执行加速比从电机模型的 5.98× 到张量反馈的 24.21× 不等。
(原文较长,此处译出前 6000 字,完整内容请点「打开原文」。)
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。