主要内容

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

生成代码的时间限制

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

有关编写代码生成高效的代码一般建议,请参阅代码生成的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;

通常,使用静态内存分配的时候,虽然这种分配可以增加的产生码量生成的代码的运行速度更快。此外,某些硬件不支持动态内存分配。金宝app要使用静态内存分配,指定此设置。

cfg。DynamicMemoryAllocation =“关闭”

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

基准的求解

在使用一组输入参数,这是典型的应用程序的1000个评估循环运行MEX生成的代码。发现无论是总时间和最大的评估时间。试试你认为可能会导致求解器的时间过长的参数,并对其进行测试和其它参数。如果MEX应用程序返回的合理时限令人满意的结果,那么你可以想到的是,部署的应用程序也将这样做。

设置初始点

影响运行时和解决方案质量的最重要因素之一是优化的初始点x0.当参数在求解器调用之间缓慢变化时,前一次调用的解决方案通常是下一次调用的良好起点。看到在参数变化时遵循方程解,其也示出了如何可以发生在溶液时间跳跃,因为溶液开关吸引力盆地

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

适当设置选项

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

选择= optimoptions ('fmincon''算法'“小数量议定书”“MaxIterations”,50);[X,FVAL,exitflag] = fmincon(乐趣,X0,A,B,AEQ,BEQ,LB,UB,nonlcon,选项)

然而,结果可能远非最佳。确保不准确的结果不会对系统造成过度的影响。集MaxIterations尽可能大,同时还能满足你的时间约束。您可以通过测量一个迭代需要多长时间,或者通过测量功能的评估需要多长时间,然后或者设置估计这个值MaxFunctionEvaluations选项或MaxIterations选项。对于一个示例,请参见代码生成的优化基础

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

全球最低

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

另请参阅

|||(MATLAB编码器)

相关话题