万博1manbetx®万博1manbetx使用本地或求解涉及仿真工具组件之间支持协同仿真。例如,协同仿真可以包括为Simulink和第三方工具或自定义代码之间的协同仿真网关实现的S-功能。万博1manbetx它也可以涉及进口Simulink的协同仿真模式的FMU。万博1manbetx
为了提高性能,考虑运行,其中包含了多线程,如果协同仿真模块(组件)型号:
要集成多个协同仿真组件
集成在组件级是计算密集型的
本主题假定您熟悉多线程编程和概念。
万博1manbetxSimulink中,您可以在多线程运行C MEX S-功能和协同仿真FMU块,如果他们满足这些要求:
该块是非直接馈通。
块是线程,即,该块可以与多个线程访问共享数据,资源和对象,而无需任何冲突工作。
多线程协同仿真Level-2的MATLAB S-功能不支持块。万博1manbetx
默认情况下,Simuli万博1manbetxnk中配置所有车型上的多个线程运行。然而,并非所有型号都可以在多个线程运行的协同仿真组件,而不是所有车型从多个线程运行中受益。要查看是否有模型具有协同仿真组件,可以从多个线程运行中受益,请按照下列步骤操作:
打开你的模型。
启动性能Advisor工具(上调试选项卡,单击性能顾问)。
选择模拟>需要进行模拟,以运行检查>选择打开或关闭多线程协同仿真环境。
此检查验证,该模型或块进行最佳配置采取多线程或单线程处理的优点。如果配置不是最佳的,性能顾问显示当前设置,并警告你该模型是不是一个很好的候选人可以在多个线程运行。
运行选中的。
另外,您也可以手动前和更改后的测量模型的模拟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
参数。指定在多个线程整个模型运行如果模型中的所有协同仿真块非直接馈通和线程。如果一些,但不是所有的块,都是非直接馈通和线程,发现只有那些块上的多个线程运行。该模型和块使用MultiThreadCoSim
参数如下。
设置 | 模型 | 块 | 描述 |
---|---|---|---|
|
(默认)模型可以在多线程运行。 |
||
|
从多个线程运行禁用块或模型。 |
||
|
(默认)让Simulink的万博1manbetx决定,如果该块可以在多个线程运行。 |
启用MultiThreadCoSim
参数,并不意味着该块或模型上多个线程模拟。模拟发生在多线程时MultiThreadCoSim
启用和:
的嵌段和/或模型在单个速率工作。
的嵌段和/或模型是线程。(例如,他们不使用静态或全局数据)。
的嵌段和/或模型是非直接馈通。
对于S-功能块,使用ssSetInputPortDirectFeedThrough
功能。
对于FMU块,离开依赖
属性中的FMU FMU的模型描述文件ModelStructure /输出
和ModelStructure / InitialUnknowns
现场为空。此属性必须(“”
)。
的嵌段和/或模型是例外 - 自由。对于S-功能块,使用ssSetOptions
功能设置SS_OPTION_EXCEPTION_FREE_CODE
。
多线程不允许求解器复位检查,因此跳过任何使用的ssSetSolverNeedsReset
和ssBlockStateForSolverChangedAtMajorStep
职能。相反地,在加速器模式,如果使用这些功能或有连续状态,多线程会自动关闭。
是否一个S-功能块运行单线程或多线程的依赖于MultiThreadCoSim
参数值和ssSetRuntimeThreadSafetyCompliance
功能。
MultiThreadCoSim 设置 |
ssSetRuntimeThreadSafetyCompliance 设置 |
单或者多线程 |
---|---|---|
'汽车' |
RUNTIME_THREAD_SAFETY_COMPLIANCE_UNKNOWN |
单线程 |
'汽车' |
RUNTIME_THREAD_SAFETY_COMPLIANCE_TRUE |
多线程 |
'汽车' |
RUNTIME_THREAD_SAFETY_COMPLIANCE_FALSE |
单线程 |
“关” |
- | 该设置被忽略,S-功能块运行单线程 |
仿真对油门和快速加速器模式的单个线程上运行。
有没有代码生成协同仿真组件。
当块有这些设置,它不支持协同仿真:万博1manbetx
必须有一个单一税率 -ssSetSampleTime(SimStruct * S,int_T st_index,time_t的周期)
必须调用只登记一个离散率。
必须有一个固定的采样时间 - 在time_t的ssSetSampleTime(SimStruct * S,int_T st_index,time_t的周期)
,期
不可能是VARIABLE_SAMPLE_TIME
。
不能有连续状态 - 在ssSetNumContStates(SimStruct * S,int_T n)的
,ñ
一定是0
。
必须没有直接馈通端口 - 在ssSetInputPortDirectFeedThrough(SimStruct * S,int_T端口,int_T dirFeed)
,dirFeed
一定是0
对于每个输入端口。
必须是线程安全的 - 在ssSetRuntimeThreadSafetyCompliance(SimStruct * S,int_T val)的
,VAL
一定是RUNTIME_THREAD_SAFETY_COMPLIANCE_TRUE
。
必须是例外 - 自由 - 在ssSetOptions(SimStruct * S,uint_T选项)
,选项
必须包括SS_OPTION_EXCEPTION_FREE_CODE
。
必须是在协同仿真模式。
必须是线程安全的,也就是说,多森林经营单位不得在同一时间访问同一个文件。
调试日志记录必须被禁止 - 例如,set_param(BLOCK1, 'FMUDebugLogging', '上')
调试日志重定向设置为文件 - 例如,set_param(块1, 'FMUDebugLoggingRedirect', '文件')
不能公开任何IRT港口调度。
不能是换每个子系统内。
必须在加速模式。
必须有单率。
不能使用可变采样时间块。
不能有连续状态。
不能有任何输入端口直接馈通。
必须有一个固定的步长求解。
不能访问任何全球性的数据存储。
不能使用任何Simulink的万博1manbetx功能或调用者阻塞。
不能包含到/来自文件块。
FMU|S-功能|ssGetRuntimeThreadSafetyCompliance
|ssSetRuntimeThreadSafetyCompliance