如何在Dymola的.mos脚本文件中开启多线程执行多模型仿真
Dymola .mos脚本多模型并行仿真实现方案
Dymola 2022及更高版本内置的simulateBatch函数可直接满足你的需求,该函数支持在.mos脚本中实现多任务并行仿真,不受参数扫描功能仅支持单模型遍历的限制。
具体使用说明
- 调用前先确认Dymola并行仿真开关已开启:进入
Tools > Options > Simulation界面,勾选Enable parallel simulation,并设置允许使用的最大CPU核心数,该配置对simulateBatch默认生效。 - 你可以提前为每个待仿真的不同模型单独配置仿真参数(开始时间、停止时间、输出步长、工作路径等),组成配置数组后传入
simulateBatch即可自动调度多线程执行。
代码示例
// 定义不同模型的仿真配置数组 simulationTasks = { simulateModel("YourModelPackage.ModelA", startTime=0, stopTime=10, outputInterval=0.1, resultFile="res_modelA"), simulateModel("YourModelPackage.ModelB", startTime=0, stopTime=30, outputInterval=0.5, resultFile="res_modelB"), simulateModel("YourModelPackage.ModelC", startTime=5, stopTime=25, outputInterval=0.2, resultFile="res_modelC") }; // 执行并行仿真,第二个参数为并行度,填0则使用预先设置的最大核心数 simulateBatch(simulationTasks, 0);
低版本兼容方案
如果你使用的是Dymola 2022之前的版本,无内置simulateBatch函数,可通过调用系统命令启动多个独立的Dymola子进程分别执行对应单模型的仿真脚本来实现并行,注意为每个子进程指定独立的工作目录,避免结果文件读写冲突。
不要直接在for循环中调用simulateModel,该接口是同步阻塞的,默认只会占用单线程串行执行所有任务。
内容的提问来源于stack exchange,提问作者Jack
相关产品推荐
相关产品推荐

