嵌入式MATLAB功能块中不支持动态内存的解决方法

嵌入式MATLAB功能块中不支持动态内存的解决方法,matlab,memory-management,compilation,simulink,matlab-coder,Matlab,Memory Management,Compilation,Simulink,Matlab Coder,背景: 我继承了一个离散事件仿真MATLAB模型,并希望自动化和加速它的执行。与其调用sim(modelName)并让MATLAB运行解释代码,我想要一个类似于调用system('modelName.exe…')的解决方案。我这样做的动机来自最初的测试,测试表明速度提高了近1000%。我已经设法使用具有快速模拟目标的实时车间来生成具有静态内存分配的exe。问题在于,模型中嵌入了MATLAB功能块,其参数在每次运行中的大小和形状都会有所不同。如果不是数千次,也会有数百次 根据MathWorks文档

背景:

我继承了一个离散事件仿真MATLAB模型,并希望自动化和加速它的执行。与其调用sim(modelName)并让MATLAB运行解释代码,我想要一个类似于调用system('modelName.exe…')的解决方案。我这样做的动机来自最初的测试,测试表明速度提高了近1000%。我已经设法使用具有快速模拟目标的实时车间来生成具有静态内存分配的exe。问题在于,模型中嵌入了MATLAB功能块,其参数在每次运行中的大小和形状都会有所不同。如果不是数千次,也会有数百次

根据MathWorks文档:

“不能对嵌入的MATLAB功能块中的可变大小数据使用动态内存分配。请使用有界而不是无界可变大小数据。”

问题:

这种限制的潜在解决方法是什么

想法:

  • 使用足够大的静态变量大小,并另外传递int变量/可调参数,以显式地将数据部分窗口化以覆盖范围
  • S-函数
  • 我今天要实现的是:每次调用模拟时,以编程方式重新编译模拟,动态生成静态代码
  • 将所有东西移植到一个真实的/现代的编程语言,如Python或C++。
关键词:
MATLAB动态内存分配嵌入式离散事件模拟实时研讨会Simulink SimEvents可调参数

您应该查看此网络研讨会:。它解释了一个类似于您最初想法的自动解决方案。

几年后,我们将继续跟进此问题。。。我们在一天左右的动态静态重新编译中进行了一年,然后另一个STATS开发人员用C++重新编写了它。每次运行时使用尽可能多的内存并不是对计算资源的合理浪费。

相关:。我将在中讨论一种可能的解决方法(您的第一个想法)。