使用Model Advisor优化生成的代码

您可以使用Simulink的金宝app®Model Advisor帮助您配置定点模型,以实现更有效的设计并优化生成的代码。使用模型顾问检查你的定点模型:

  1. 在里面建模要分析该模型的选项卡中,单击模型的顾问

  2. 在系统选择器中选择系统来分析。

  3. 在模型顾问左窗格中展开按产品节点,然后嵌入式编码节点。

  4. 对于定点代码生成,最重要的复选框以选择是识别生成昂贵的定点和饱和代码的块确定有问题的定点操作标识生成昂贵的舍入代码块检查硬件实现

    为了使与所选择的节点相关联的所有模型顾问检查,从模型顾问编辑菜单中,选择全选

  5. 点击选择运行检查。为了提高您的定点模型的效率任何提示出现在模型顾问窗口。

下面的小节讨论在Model Advisor中发现的定点相关检查和子检查。这些部分解释了检查,讨论了它们在定点代码生成中的重要性,并提供了调整模型以优化生成的代码的建议。

识别会产生昂贵的块定点和饱和度码

为有问题的定点操作确定Sum块

  • 当的输入范围块超过输出范围时,发生错误的范围。您可以得到任何加法或减法您的应用程序通过之前和/或之后将数据类型转换块需要块。

  • 当一个块具有与不等于输出的斜率调整因子的斜率调整因子的输入,则失配需要块以执行乘法运算的每个输入被转换为输出的数据类型和缩放比例的时间。失配可以通过改变输出或输入的缩放比例被移除。

  • 当的净总和块输入偏差不等于输出的偏压,所产生的代码包括一个额外的加法或减法指令正确地占净偏置调整。改变输出比例的偏差可以使净偏置调整为零,消除了对额外操作的需要。

确定最小最大块有问题的定点操作

  • 当的输入和输出极大极小块具有不同的数据类型,每次执行该块时都需要一个转换操作。对于相同的数据类型,模型更有效。

  • 当的输入的数据类型和缩放比例极大极小块不匹配的输出的数据类型和缩放,转换正在执行关系运算之前需要。铸造时,或精度损失进行转换每次这可能导致一个距离误差。改变输入或输出的定标以产生更有效的代码。

  • 当的输入极大极小块具有比输出不同的斜率调整因子,该极大极小块需要的乘法运算的每个块执行将输入转换到输出的数据类型和缩放比例的时间。你可以通过改变输入或输出的范围纠正不匹配。

确定离散积分块有问题的定点操作

  • 当用于初始条件离散时间积分器块用于初始化的状态和输出,所述输出方程产生过度的代码,并且需要额外的全局变量。建议您设置的功能块参数>初始条件设置参数国家(最有效的)

标识有问题的定点操作的常量块

  • 的输入数据类型相较于零块不能准确地表示零,将输入信号与最接近的可表示值零进行比较,导致参数溢出。要避免此参数溢出,请选择可以表示零的输入数据类型。

  • 如果恒值的参数相较于恒是输入数据类型可以表示的范围之外,则输入信号是相对于恒定的最接近表示值。这导致参数溢出。为了避免这种参数溢出,选择一个输入数据类型可以表示的恒值,或改变恒值于能够由输入数据类型被容纳的值。

确定查找表块有问题的定点操作

有关查找表数据效率的权衡中描述对速度,错误和内存使用间距的影响。。基于这些权衡,模型顾问识别块哪里有效率的改进,如潜能:

  • 查找表输入数据不被均匀地隔开。

  • 查询表输入数据是当量化均匀分布的,但它是非常接近均匀地间隔。

  • 查询表输入数据是均匀间隔的,但间隔不是2的乘方。

有关查找表优化的更多信息,请参见查找表的优化

检查的优化和硬件实现的设置

  • 整数除法生成的代码中包含针对算术异常如分裂保护由零,INT_MIN / -1,并且LONG_MIN / -1。如果您构建模型使它不可能为异常触发输入组合达到一个除法运算,如除法运算的部分所产生的保护代码是多余的。

  • 索引搜索方法等间隔点需要除法运算,其可以是计算昂贵的。

确定将调用净斜率计算的块

当定点坡度的变化不是2的幂时,需要进行净坡度的计算。通常情况下,净坡度的计算是用整数相乘加移位来实现的。在某些情况下,另一种实现只需要一个整数除以一个常数。其中一个条件是,净斜率可以非常精确地表示为整数的倒数。当满足此条件时,除法实现产生更精确的数值行为。根据编译器和嵌入式硬件的不同,除法实现可能比乘法和移位实现更可取。生成的代码在ROM大小或模型执行大小方面可能更有效。

Model Advisor会在以下情况警告您:

  • 您可以设置使用除法进行定点网斜率计算优化参数'上',但你的模型配置与此选择兼容。

  • 您的模型配置适合于使用除法处理净斜率计算,但您没有设置使用除法进行定点网斜率计算优化参数'上'

欲了解更多信息,请参阅网护坡计算

识别产品块是效率较低的

一个块执行的乘法和除法的数量对精度和效率有很大的影响。Model Advisor会检测到一些(但不是全部)重新安排操作可以提高准确性、效率或两者兼而有之的情况。

一种这样的情况是,当使用一个以上的除法运算的计算被计算出来。从数值分析领域的一般原则是先一起乘以所有分母项,然后做一个且只有一个师。这改善了精度和速度往往在浮点和尤其是定点。这可以在Simulink通过级联来实现金宝app产品块。需要注意的是多个部门分布在一系列块不被模型顾问检测。

另一种情况是当单个产品块被配置为执行一个以上的乘法或除法运算。这被支持,但是,金宝app如果输出数据类型是整数或固定点,则较好的结果很可能,如果这操作拆分跨若干块,每个块做一个乘法或除法一个。使用几个块允许用户控制用于中间计算的数据类型和缩放。数据类型的用于中间计算的选择会影响精度,范围的错误,和效率。

检查贵饱和码

设置饱和整数溢出参数可以生成应用程序可能不需要的条件检查代码。

检查您的应用程序是否需要设置块参数>信号属性>饱和整数溢出。否则,清除此参数用于在生成的代码的最有效的实施块。

找出有问题的定点操作

此检查可识别生成多字操作、繁琐的乘法和除法操作、昂贵的转换代码、查找表块效率低下和昂贵的比较代码的块。

检查多字操作

当在数据运算结果输入比你的处理器的最大字长越大,生成的代码包含多字的操作。多字的操作也可以对硬件的低效。为了防止多字操作,调整的输入操作的字长,让他们不要超过你的处理器的最大字长。有关在生成的代码控制多字操作的更多信息,请参阅定点多字的操作生成的代码

检查昂贵的乘法码

  • 以嵌入式处理器为目标讨论了功能和嵌入式处理器的局限性。设计规则建议乘法操作的输入的字长不应大于处理器的基本整数类型。与更大的字长相乘总是可以在软件中处理,但是这种方法需要更多的代码,速度也慢得多。Model Advisor识别需要进行不必要的软件乘法的块。对生成的代码(包括生成的乘法实用程序函数)进行可视化检查,可以清楚地了解这些操作的成本。强烈建议您调整模型以避免这些操作。

  • 规则算术运算讨论定点乘法和除法的实现细节。在非零偏压信号涉及乘除发生在复杂显著增加。我们强烈建议您进行更改,以消除这些复杂操作的需要。需要额外的步骤来实现倍增。插入数据类型转换之前和之后的块执行乘法允许偏差被去除,并允许用户为中间计算控制数据类型和缩放框。在许多情况下,数据类型转换块可以移动到(子)系统的“边”。转换只执行一次,所有块都可以受益于更简单的无偏差数学。

检查贵区划代码

符号整数除法的舍入行为不是完全用C语言标准规定。因此,对于分裂生成的代码太大提供仿真和代码生成间位真协议。为了避免整数除法生成的代码太大,在配置参数对话框,在硬件实现面板中,将符号整数除法回合参数的推荐值。

识别查找不均匀断点间隔块

有关查找表数据效率的权衡中描述对速度,错误和内存使用间距的影响。。基于这些权衡,示范Advisor将标识块,其中有潜在的效率改进,问题时警告:

  • 查找表输入数据不被均匀地隔开。

  • 查询表输入数据是当量化均匀分布的,但它是非常接近均匀地间隔。

  • 查询表输入数据是均匀间隔的,但间隔不是2的乘方。

检查昂贵的预查找师

对于一个Prelookup要么一天的查找表块,索引搜索方法均匀分隔点。断点数据不具有2间距功率。

如果断点数据nontunable,建议您调整数据有偶,2间距的力量。否则,在块参数对话框,指定不同的索引搜索方法避免了计算密集的除法运算。

检查昂贵的数据类型转换

当一个块被配置,使得它会生成一个数据类型转换低效的代码,模型顾问会生成一个警告,并就如何使你的模型更有效的建议。

检查与预定的结果定点比较

当您选择isInfisNaN, 要么isFinite的作为用于操作关系运算符块时,块切换到一个输入模式。在这种模式下,如果输入的数据类型是固定点,布尔值,或内置的整数,输出是FALSE为isInfisNaN,为TRUEisFinite的。这可能会导致死代码将被消除金宝appSimulink的编码器™

检查昂贵的二进制比较操作

  • 当输入的数据类型的关系运算符块不一样,每次执行块时都需要一个转换操作。如果其中一个输入是不变的,那么改变不变输入的数据类型和比例以匹配另一个输入可以提高模型的效率。

  • 当的输入关系运算符块具有不同的范围,会有铸造时的范围误差,并执行转换每次精度损失。你可以插入数据类型转换前块关系运算符块既输入转换到具有足够的范围和精度来表示每个输入共同的数据类型。

  • 当的输入关系运算符块具有不同的斜率调整的因素,该关系运算符块需要执行的乘法运算的每个具有较小正范围的输入被转换为以更大的正的范围的输入的数据类型和缩放比例的时间。额外的乘法需要额外的代码,减慢执行速度,通常引入额外的精度损失。通过调整投入的比例,可以消除不匹配的斜坡。

检查贵比较代码

当你的模型被配置使得生成的代码包含了昂贵的比较代码,模型顾问会生成一个警告。

检查在生成的代码昂贵定点数据类型

当设计包含整数或定点字长不上你的目标硬件存在,生成的代码可以包含额外的饱和码,转移和多字操作。通过改变由目标硬件支持的数据类型之一,可以提高生成的代码的效率。金宝app模型顾问模型标记这些昂贵的数据类型。例如,具有17字长的模型顾问将标志定点数据类型,如果该目标是硬件32位。

识别会产生昂贵的舍入代码块

此检查提醒您,当四舍五入优化可用。要检查是否存在生成昂贵的舍入代码块,示范顾问执行以下子检查:

  • 检查贵舍入操作的乘法和除法

  • 检查优化和硬件实现设置(查找块)

  • 检查昂贵舍入在数据类型转换

  • 检查模型中的昂贵的舍入模式

传统的手写代码,特别是对于控制应用,几乎总是使用“不遗余力”四舍五入。例如,对于无符号整数和两个互补符号整数,右移并丢弃位相当于四舍五入到地板上。为了让效果媲美或优于,你从传统的手写代码会发生什么,用最简单的舍入模式。通常最简单的模式提供与没有溢出的最小成本的解决方案。如果简单的模式是不可用的,圆形地板。

主要的例外是符号整数除法的舍入行为。C标准树叶此舍入行为未指定,但对于大多数生产指标“不遗余力”的模式是向零。对于无符号除法,一切都是非负的,因此舍入到地板和舍入到零是相同的。为了提高效率四舍五入,集型号配置参数>硬件实现>设备详情>符号整数除法回合使用生产目标使用的模式。

使用整数舍入模式您使用编译从模型生成的代码对你的模型的参数块来模拟C编译器的舍入行为。该设置将出现在信号属性的块的参数的对话框可整数运算进行有符号,如窗格产品块。为了获得最有效的生成的代码,更改整数舍入模式参数块为推荐的设置的。

有关属性的更多信息,选择舍入模式时要考虑的,看选择的舍入方法