主要内容

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

生成代码的时间限制

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

有关为代码生成编写高效代码的一般建议,请参见代码生成的MATLAB代码设计考虑(MATLAB编码器)

匹配目标环境

要在生成代码之前估计生成代码的执行时间,请设置MATLAB®环境尽可能地与目标环境相匹配。

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

  • maxNumCompThreads在MATLAB中为1,因为默认的LAPACK和BLAS库生成MATLAB编码器™是单线程的。

    lastN = maxNumCompThreads (1);

    完成基准测试后,重新设置maxNumCompThreads值:

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

    请注意

    如果您的目标硬件有多个核,并且您使用自定义多线程LAPACK和BLAS库,则设置maxNumCompThreads为目标硬件上的线程数。看到通过使用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库。万博1manbetx类似地,当您有并行硬件时,您可以通过设置自定义LAPACK调用来提高代码的性能。看到通过使用LAPACK调用加速独立代码中的线性代数(MATLAB编码器)

基准的解算器

使用一组应用程序的典型输入参数,在1000次计算的循环中运行MEX生成的代码。找到总时间和最大计算时间。尝试您认为可能导致求解器花费太长时间的参数,并测试它们和其他参数。如果MEX应用程序在合理的时间范围内返回满意的结果,那么您可以预期部署的应用程序将做同样的事情。

设置初始点

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

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

适当设置选项

有时你可以通过调整参数来加速解决方案。如果你设置MaxIterations选项只允许几个迭代,然后求解器迅速停止。例如,如果解算器是fmincon,输入这个代码。

选择= optimoptions (“fmincon”“算法”“sqp”“MaxIterations”, 50);[x, fval exitflag] = fmincon (Aeq有趣,x0, A, b,说真的,磅,乌兰巴托,nonlcon,选项)

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

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

全球最低

你可能想要一个全局最小值,而不仅仅是局部最小值作为解。搜索全局最小值可能会花费大量时间,而且不能保证有效。建议,请参阅寻找更小的最小值

另请参阅

|||(MATLAB编码器)

相关的话题