主要内容

在多个核上运行共仿仿真组件

金宝app®金宝app支持使用本地求解器或涉及仿真工具之间的组件之间的共模。例如,共模仿真可以涉及在Simulink和第三方工具或自定义代码之间实现为共模仿真网关的S函数。金宝app它还可以涉及进口到Simulink或A的共模模式中的FMU金宝app模型块加速器模式。

要提高性能,请考虑在多个线程上包含共模块(组件)的运行模型如果:

  • 您正在集成多个共模组件

  • 在组件级别的集成是计算的强烈的

本主题假定您熟悉多线程编程和概念。

金宝appSimulink允许您运行C MEX S函数,共模拟FMU块,以及模型如果它们是Threadsafe,则在多个线程上配置为Accelerator模式的块。Windsafe表示该块可以使用多个线程访问不带任何冲突的共享数据,资源和对象。

如果模型具有直接馈通块,则可以在多个线程上运行模型,然后是直接馈通块(参见SingleRethreaded与多线程模拟)。直接馈通意味着在同一时间步长,从其输入端口信号的值计算块的输出端口信号。

笔记

多线程共模Level-2 Matlab S功能不支持块。金宝app

默认情况下,Simuli金宝appnk配置所有模型以在多个线程上运行。如果可以提高性能,Simulink会自动在多个线程上运行所有模型金宝app。但是,并非所有型号都具有可以在多个线程上运行的共模拟组件,而不是所有型号都会受益于多个线程上运行。

SingleRethreaded与多线程模拟

在评估系统中可能的同时进行多线程执行的模型时,Simulink使用基于图形的算法来分析符合条件块之间的数据依赖性,并形成多个任务组。金宝app此算法可确保不同的任务组:

  • 彼此没有数据依赖性

  • 可以使用多个核心并行执行

例如,Simulink可能金宝app会查找非直接馈通块,然后是直接馈通块。如果以下直接馈通块仅取决于非向馈通块,则软件可以将块分组在同一分支中进行并行执行。

此示例比较了分区的一系列块的串行执行,以便并行执行。

基于图的执行多线程概念图

使用多线程模拟来加快多个核心模拟

考虑到这一点基于图的多线程模拟示例,使用四个非向馈通块,然后使用四个直接馈通块。直接馈通意味着在同一时间步长,从其输入端口信号的值计算块的输出端口信号。

金宝appSimulink分析数据依赖性并形成四个分支。每个分支都包含非向馈通块,然后是直接馈通块。然后,Sim金宝appulink使用多线程来运行这四个分支。通过这种方式,与同一台机器金宝app上的SingleSheReDed仿真相比,Simulink可以在四个或更多核心机器上加速模拟。您可以在更改之前和之后手动测量模型的模拟Multithreadsim.范围。

SlexgraphasedMultithReadsimexample模型

您可以在更改之前和之后手动测量模型的模拟Multithreadsim.范围。此代码显示如何测量模拟基于图的多线程模拟例子:

OpenExample('slexgraphbasedmultithreadsimexample');......set_param(gcs,'multithreadsim''离开');tic; sim('slexgraphbasedmultithreadsimexample'); TOC.
经过时间为39.406743秒。
set_param(gcs,'multithreadsim''上');tic; sim('slexgraphbasedmultithreadsimexample');TOC.
经过时间为13.619744秒。

在此示例中,Speedup在四个核心机器上几乎三次(而不是四次)。这是由于操作系统线程上下文切换引入的额外开销。

使用Multithreadsim.范围

您可以指定在多个线程上运行的整个模型,或指定使用多个线程在多个线程上运行的特定块Multithreadsim.范围。如果模型中的所有共模块是Threadsafe,则指定整个模型在多个线程上运行。如果某些但不是所有块是Threadsafe,则仅识别这些块以在多个线程上运行。模型和块使用Multithreadsim.参数如下:

环境 描述

'汽车'[一种]

(默认)让Simulink决金宝app定块是否可以在多个线程上运行。

'离开'

禁用块或模型在多个线程上运行。

[一种]从R2021A开始,当您打开先前版本中创建的模型时,Simulink将解释金宝app'上'设置为与'汽车'

启用Multithreadsim.参数并不意味着块或模型在多个线程上模拟。在多个线程上模拟发生Multithreadsim.已启用和:

  • 块和/或模型以单个速率运行。

  • 块和/或模型是Threadsafe。(例如,它们不使用静态或全局数据)。

  • 块和/或模型是异常的。对于S函数块,使用sssetoptions.函数设置ss_option_exception_free_code.

多线程不允许求解器重置检查,因此跳过任何使用Sssetsolverneedsreset.ssblockstateforsolverchangedatmajorstep.职能。相反,在加速器模式下,如果使用这些功能或者存在连续状态,则自动关闭多线程。

配置S函数块以运行单个或多线程

S函数块是否运行单个或多线程取决于Multithreadsim.参数值和sssetruntimethreadsafety deliance功能。

Multithreadsim.环境 sssetruntimethreadsafety deliance环境 单次或多线程
'汽车' runtime_thread_safety_compliance_unknown. 单螺纹
'汽车' runtime_thread_safett_compliance_true. 多线程
'汽车' runtime_thread_safety_compliance_false. 单螺纹
'离开' - 该设置被忽略,S函数块运行Singlethreaded

多线程限制和指南的共同仿真

  • 模拟在单线上运行,用于加速器和快速加速器模式。当仿真模式正常时,启用多线程。

    将模型仿真模式设置为正常。

  • 共仿真组件没有代码生成。

  • 当块具有这些设置时,它不支持共模。金宝app

  • 没有为具有常量采样时间的块激活多线程。

  • 当Simulink Debugger正在开启时,不会启用多线程。金宝app

    关闭Simulin金宝appk调试器。

  • 无法多线程识别取决于非线性安全块的块。考虑通过使用a,例如通过使用a打破依赖关系单位延迟堵塞。

S函数块限制

  • 必须有一次速率。

    考虑修改您的模型将多速率组件分解为单个单速率组件。

  • 当S函数具有可变采样时间时,不会启用多线程。

    考虑使用不同的采样时间(参见指定采样时间)。

  • 当S函数具有连续状态并且求解器是固定步骤时,未启用多线程,将连续触发连续状态一致性检查。要禁用连续状态的一致性检查,请使用sssetskipcontstatesconsistencycheck.功能。

  • 必须是线程安全 - 进来sssetruntimethreadsafety deliance(Simstruct * s,Int_t val)一定是runtime_thread_safett_compliance_true.

    有关更多信息,请参阅写入线程安全S函数的指南

  • 必须是异常的 - 进入sssetOptions(Simstruct * s,Uint_t选项)选项必须包括ss_option_exception_free_code.

    有关更多信息,请参阅写入线程安全S函数的指南

  • 当S函数分析器打开时,不会启用多线程。在正常模式下尝试多线程。

  • 当S函数具有连续采样时间时,未启用多线程。考虑使用不同的采样时间(参见指定采样时间)。

  • Multithreading同时运行输出和更新方法。块必须具有输出或更新方法。

FMU进口块限制

  • 必须是共模模式。

    考虑从模型交换到共模的切换FMU模式。

  • 例如,必须是线程安全的,例如,多个FMU不得同时访问相同的文件。

  • 当MATLAB中的FMU块日志记录显示时,未启用多线程®命令窗口。将FMU块重定向到文件使用:

    set_param(blockName,'fmudebugloggingredirect''文件'
  • FMU运行流程时不支持多线程。金宝app要禁用此设置,请使用:

    set_param(blockName,'debugexecutionforfmuviaoutofprocess''离开'

模型块限制

  • 当a时未启用多线程模型块有事件端口。

  • 不能在一个里面对于每个子系统堵塞。

    考虑移动模型阻止对于每个子系统堵塞。

  • 必须是加速器模式。

  • 必须有单一的速度。

    考虑修改您的模型将多速率组件分解为单个单速率组件。

  • 无法使用具有可变采样时间的块。

    考虑使用不同的采样时间(参见指定采样时间)。

  • 不能持续陈述。

  • 考虑通过使用a,例如通过使用a打破块之间的依赖性单位延迟堵塞。

  • 必须具备固定步骤求解器。

  • 无法访问任何全局数据存储。

  • 当模型包含一个时,未启用多线程金宝appSimulink功能堵塞。

  • 不能使用任何Simulink函金宝app数或来电块。

  • 不能包含到文件块。有关更多信息,请参阅导出模拟数据

  • 不能包含从文件块。

    考虑通过顶级模型的Inport将数据送入引用的模型。

也可以看看

|||

相关话题