文档

多核上运行组件联合仿真

万博1manbetx®万博1manbetx支持解决组件之间使用本地或联合仿真,仿真工具。例如,可以涉及一个联合仿真功能实现为一个网关之间的联合仿真模型和第三方工具或定制代码。万博1manbetx它也可以包括一个FMU模式导入仿真软件联合仿真。万博1manbetx

提高性能,考虑运行模块(组件)联合仿真模型,包含多个线程如果:

  • 你是整合多个联合仿真组件

  • 集成组件级别的计算激烈

这个话题假定您熟悉多线程编程和概念。

如果C墨西哥人S-functions FMU块满足这些需求,联合仿真和仿真软件可以运行多个线程:万博1manbetx

  • 块是间接引线。

  • 块是线程安全的,这意味着可以使用多个线程访问共享数据块,资源,和对象没有任何冲突。

请注意

多线程的联合仿真2级MATLAB函数不支持模块。万博1manbetx

默认情况下,仿真软件配置万博1manbetx上运行多个线程的所有模型MultiThreadCoSim参数。然而,并非所有的联合仿真模型组件,可以在多个线程上运行,而不是所有的模型从运行在多个线程中获益。使用这个例子来看看联合仿真模型如下组件可以受益于运行在多个线程:

  1. 打开你的模型。

  2. 启动性能顾问工具(分析>性能工具>性能顾问)。

  3. 选择模拟>检查需要模拟运行>选择打开或关闭联合仿真多线程检查。

    这张支票验证模型或块最优配置利用多线程或singlethreaded处理。如果不是最优的配置,性能顾问显示当前设置和警告你,该模型不是一个好的候选人在多个线程上运行。

  4. 运行选中的检查。

或者,您可以手动测量模型的仿真之前和之后的变化MultiThreadCoSim参数。例如:

抽搐;sim卡(“sfunction_components”);toc
运行时间是2.323264秒。
get_param (gcs,“MultiThreadCoSim”)
ans = '在'
set_param (gcs,“MultiThreadCoSim”,“关闭”)
抽搐;sim卡(“sfunction_components”);toc
运行时间是4.112674秒。

对多核上运行联合仿真组件的一个例子,看到slexCoSimPrimeExample模型。

使用MultiThreadCoSim参数

您可以指定一个完整的模型上运行多个线程,或指定特定的块上运行多个线程,使用MultiThreadCoSim参数。指定一个完整的模型上运行多个线程,如果所有的块联合仿真模型间接引线和线程安全的。如果一些,但不是所有的块,间接引线和threadsafe,确定只有那些块上运行多个线程。使用的模型和块MultiThreadCoSim参数如下。

设置 模型 描述

“上”

(默认)模型可以在多个线程上运行。

“关闭”

禁用阻止或模型上运行多个线程。

“汽车”

(默认)让模型决定如果块可以万博1manbetx在多个线程上运行。

使MultiThreadCoSim参数并不意味着在多个线程块或模型模拟。模拟时在多个线程MultiThreadCoSim已启用并:

  • 块和/或模型运行单一税率。

  • 块和/或模型是线程安全的。例如,他们不使用静态或全局数据)。

  • 块和/或模型间接引线。

    • 对于功能块,使用ssSetInputPortDirectFeedThrough函数。

    • FMU街区,不定义依赖关系属性FMU FMU模型描述文件ModelStructure /输出ModelStructure / InitialUnknowns字段。这个属性必须是空的(”“)。

  • exception-free块和/或模型。对于功能块,使用ssSetOptions函数设置SS_OPTION_EXCEPTION_FREE_CODE

配置运行单个或多线程功能块

一个功能块是否运行单个或多线程的依赖MultiThreadCoSim参数值和ssSetRuntimeThreadSafetyCompliance函数。

MultiThreadCoSim设置 ssSetRuntimeThreadSafetyCompliance设置 单个或多流
“汽车” RUNTIME_THREAD_SAFETY_COMPLIANCE_UNKNOWN 单线程
“汽车” RUNTIME_THREAD_SAFETY_COMPLIANCE_TRUE 多流
“汽车” RUNTIME_THREAD_SAFETY_COMPLIANCE_FALSE 单线程
“关闭” - - - - - - 设置将被忽略和功能块singlethreaded运行

在多个线程联合仿真的局限性

  • 加速器,加速器模式,快速模拟singlethreaded运行。

  • 没有联合仿真组件的代码生成。

  • 当FMU阻止这些设置,它不支持联合仿真:万博1manbetx

    • 启用调试日志——例如,set_param (block1“FMUDebugLogging”,“上”)

    • 调试日志重定向设置为显示——例如,set_param (block1“FMUDebugLoggingRedirect”,“显示”)

另请参阅

|||

相关的话题

这个主题有帮助吗?