主要内容

实时应用程序的优化代码生成

生成代码的时间限制

嵌入式应用程序的要求可能会限制代码在返回答案之前可以运行的时间。这些要求可能会有问题,因为解算器无法保证优化的时间。本主题概述了用于估计嵌入式代码在返回结果之前将运行的时间的技术,并描述了您可以在返回结果之前进行的更改o缩短时间要求的代码。

有关为代码生成编写高效代码的一般建议,请参见代码生成的MATLAB代码设计注意事项(MATLAB编码器).

匹配目标环境

要在生成代码之前估计生成代码的执行时间,请设置MATLAB®环境以尽可能接近目标环境。

  • 检查目标硬件和计算机的时钟速度。相应地调整基准测试结果。

  • 设置MaxNumComp线程在MATLAB中为1,因为默认的LAPACK和BLAS库是由MATLAB编码器™是单线程的。

    lastN=maxNumCompThreads(1);

    完成基准测试后,重新设置MaxNumComp线程价值:

    N = maxNumCompThreads (lastN);%或者,% N = maxNumCompThreads('自动');

    笔记

    如果您的目标硬件有多个核,并且您使用自定义多线程LAPACK和BLAS库,则设置MaxNumComp线程为目标硬件上的线程数。看到通过使用LAPACK调用加速独立代码中的线性代数(MATLAB编码器).

  • 如果你有嵌入式编码器®许可证,请参阅以下主题,以了解评估嵌入代码的最终性能的可靠方法的详细信息:用MATLAB函数块生成的代码加速线性代数(嵌入式编码器),从MATLAB功能块生成的代码中加速矩阵运算(嵌入式编码器),验证(嵌入式编码器),性能(嵌入式编码器).

设置编码器配置

要设置代码生成的配置,请调用coder.config.

cfg=coder.config(“墨西哥”);

为了节省生成代码的时间,请关闭完整性检查和整数饱和度检查。假设目标函数和非线性约束函数不需要这些检查,求解器不依赖这些检查来正常工作。有关详细信息,请参见控制运行时检查(MATLAB编码器).

cfg.IntegrityChecks=false;cfg.SaturateOnIntegerOverflow=false;

通常,当使用静态内存分配时,生成的代码运行得更快,尽管这种分配会增加生成代码的数量。另外,一些硬件不支持动态内存分配。万博1manbetx要使用静态内存分配,请指定此设置。

cfg.DynamicMemoryAllocation=“关”;

您可以通过选择不同类型的BLAS(底层线性代数子程序)来提高代码的性能。要了解如何为生成的代码设置BLAS,请参见通过使用BLAS调用加速生成的独立代码中的矩阵运算(MATLAB编码器)。如果希望嵌入式应用程序并行运行,则必须在系统上提供支持并行计算的BLAS或LAPACK库。同样,当您有并行硬件时,可以通过设置自定义LAPACK调用来提高代码的性能。请参阅万博1manbetx通过使用LAPACK调用加速独立代码中的线性代数(MATLAB编码器).

基准的解算器

使用一组典型的应用程序输入参数,在1000次计算的循环中运行MEX生成的代码。查找计算的总时间和最大时间。尝试您认为可能导致解算器耗时过长的参数,并测试这些参数和其他参数。如果MEX应用程序返回令人满意的结果,则在合理的时间范围内,那么您可以预期部署的应用程序也会这样做。

设定初始点

影响运行时和解决方案质量的最重要因素之一是优化的初始点x0. 当参数在解算器调用之间缓慢更改时,来自上一次调用的解决方案通常是下一次调用的良好起点。看见随着参数的变化,遵循方程解,它还展示了由于解决方案切换而导致解决方案时间发生跳转的情况盆地的吸引力.

如果您的优化问题没有缓慢变化的参数,并且只包含几个控制变量,那么尝试从以前的解决方案中估计响应是值得的。构建一个作为参数函数的解决方案模型,作为参数中的二次插值或低维插值,并使用预测的解决方案点作为解算器的起点。万博 尤文图斯

适当设置选项

有时可以通过调整参数来加快解决方案的速度。如果你设定最大迭代次数选项只允许几个迭代,然后求解器迅速停止。例如,如果解算器是铁铬镍铁合金,输入此代码。

opts=options(“fmincon”,“算法”,“sqp”,“最大迭代次数”, 50);[x, fval exitflag] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)

然而,结果可能远非最佳。确保不准确的结果不会对系统造成过度的影响。设置最大迭代次数在满足时间限制的前提下,尽可能的大。您可以通过测量一个迭代需要多长时间来估计这个值,或者通过测量一个函数求值需要多长时间,然后设置最大函数求值选择或最大迭代次数选择。例如,请参见用于优化基础的代码生成.

有关可以加速求解器的设置的进一步建议,请参阅解算耗时太长. 请注意,由于代码生成方面的限制,本主题中的一些建议不适用。看见代码生成在fmincon背景quadprog后台代码生成.

全局极小值

您可能需要全局最小值,而不仅仅是局部最小值作为解决方案。搜索全局最小值可能需要花费大量时间,并且不能保证有效。有关建议,请参阅搜索较小的最小值.

另见

|(MATLAB编码器)||

相关的话题