Оптимизируйте сгенерированный код с Model Advisor

Можно использовать Simulink® Model Advisor, чтобы помочь вам сконфигурировать свои модели фиксированной точки, чтобы достигнуть более эффективного проекта и оптимизировать ваш сгенерированный код. Использовать Model Advisor, чтобы проверять ваши модели фиксированной точки:

  1. Во вкладке Modeling модели вы хотите анализировать, нажать Model Advisor.

  2. В Системном Селекторе выберите систему, чтобы анализировать.

  3. На левой панели Model Advisor расширьте узел By Product и затем узел Embedded Coder.

  4. Для генерации фиксированной точки самыми важными флажками, чтобы выбрать является Identify blocks that generate expensive fixed-point and saturation code, Identify questionable fixed-point operations, Identify blocks that generate expensive rounding code и Check the hardware implementation.

    Чтобы включить все проверки Model Advisor, сопоставленные с выбранным узлом, в меню Model Advisor Edit, выбирают Select All.

  5. Нажмите Run selected checks. Любые советы для того, чтобы повысить эффективность вашей модели фиксированной точки появляются в окне Model Advisor.

Разделы, которые следуют, обсуждают связанные с фиксированной точкой проверки и подпроверки, найденные в Model Advisor. Эти разделы объясняют проверки, обсуждают их важность в генерации фиксированной точки и предлагают предложения для тонкой настройки вашей модели, чтобы оптимизировать ваш сгенерированный код.

Идентифицируйте Блоки, которые Генерируют Дорогой Код Фиксированной точки и Насыщения

Идентифицируйте блоки Суммы для сомнительных операций фиксированной точки

  • Когда входной диапазон блока Sum превышает выходную область значений, ошибка области значений происходит. Можно получить любое сложение или вычитание, которого приложение требует путем вставки блоков преобразования типа данных прежде и/или после блока Sum.

  • Когда блок Sum имеет вход с наклонным поправочным коэффициентом, который не равняется наклонному поправочному коэффициенту выхода, несоответствие требует, чтобы блок Sum выполнил умножить операцию каждый раз, когда вход преобразован в тип данных и масштабирование выхода. Несоответствие может быть удалено путем изменения масштабирования выхода или входа.

  • То, когда сетевая сумма блока Sum ввела смещения, не равняется смещению выхода, сгенерированный код включает одну дополнительную инструкцию по сложению или вычитанию правильно составлять сетевую корректировку смещения. Изменение смещения выходного масштабирования может внести сетевую корректировку смещения обнулить и избавить от необходимости дополнительную операцию.

Идентифицируйте блоки Мин Макса для сомнительных операций фиксированной точки

  • Когда ввод и вывод блока MinMax имеет различные типы данных, операция преобразования требуется каждый раз, когда блок выполняется. Модель более эффективна с совпадающими типами данных.

  • Когда тип данных и масштабирование входа блока MinMax не совпадают с типом данных и масштабированием выхода, преобразование требуется прежде, чем выполнить реляционную операцию. Это могло привести к ошибке области значений при кастинге или потере точности каждый раз, когда преобразование выполняется. Измените масштабирование любого ввод или вывод, чтобы сгенерировать более эффективный код.

  • Когда вход блока MinMax имеет различный наклонный поправочный коэффициент, чем выход, блок MinMax требует умножить операции каждый раз, когда блок выполняется, чтобы преобразовать вход в тип данных и масштабирование выхода. Можно откорректировать несоответствие путем изменения масштабирования любого ввод или вывод.

Идентифицируйте Дискретные блоки Интегратора для сомнительных операций фиксированной точки

  • Когда начальное условие для блоков Discrete-Time Integrator используется, чтобы инициализировать состояние и вывести, выходное уравнение генерирует чрезмерный код, и требуется дополнительная глобальная переменная. Рекомендуется, чтобы вы установили Function Block Parameters> параметр Initial condition setting к State (most efficient).

Идентифицируйте Выдерживают сравнение с Постоянными блоками для сомнительных операций фиксированной точки

  • Если тип входных данных блока Compare to Zero не может представлять нуль точно, входной сигнал сравнивается с самым близким представимым значением нуля, приводящего к переполнению параметра. Чтобы избежать этого переполнения параметра, выберите тип входных данных, который может представлять нуль.

  • Если параметр Constant value Compare to Constant вне области значений, которую может представлять тип входных данных, входной сигнал сравнивается с самым близким представимым значением константы. Это приводит к переполнению параметра. Чтобы избежать этого переполнения параметра, выберите тип входных данных, который может представлять Constant value, или изменять Constant value в значение, которое может быть размещено типом входных данных.

Идентифицируйте блоки Интерполяционной таблицы для сомнительных операций фиксированной точки

Компромиссы КПД, связанные с данными об интерполяционной таблице, описаны в Эффектах Разрядки на Скорости, Ошибке и Использовании памяти. На основе этих компромиссов Model Advisor идентифицирует блоки, где существует потенциал для улучшений КПД, таких как:

  • Входные данные интерполяционной таблицы равномерно не расположены с интервалами.

  • Входные данные интерполяционной таблицы равномерно не расположены с интервалами, когда квантовано, но это очень близко к тому, чтобы быть равномерно расположенным с интервалами.

  • Входные данные интерполяционной таблицы равномерно расположены с интервалами, но интервал не является степенью двойки.

Для получения дополнительной информации об оптимизации интерполяционной таблицы смотрите Оптимизацию Интерполяционной таблицы.

Проверяйте настройки аппаратной реализации и оптимизация

  • Сгенерированный код целочисленного деления содержит защиту от арифметических исключений, таких как деление на нуль, INT_MIN/-1 и LONG_MIN/-1. Если вы создаете модели, лишающие возможности входные комбинации инициирования исключения достигнуть операции деления, код защиты, сгенерированный, когда часть операции деления избыточна.

  • Метод поиска по индексу Evenly-spaced points требует операции деления, которая может быть в вычислительном отношении дорогой.

Идентифицируйте блоки, которые вызовут сетевой наклонный расчет

Когда изменение наклона фиксированной точки не является степенью двойки, сетевой наклонный расчет необходим. Обычно, сетевой наклонный расчет реализован с помощью целочисленного умножения, сопровождаемого сдвигами. При некоторых условиях альтернативная реализация требует только целочисленного деления на константу. Одно из условий - то, что сетевой наклон может быть очень точно представлен как обратная величина целого числа. Когда это условие соблюдают, реализация деления производит более точное числовое поведение. В зависимости от вашего компилятора и встроенного оборудования, реализация деления может быть более желательной, чем реализация сдвигов и умножение. Сгенерированный код может быть более эффективным или в размере ROM или в размере выполнения модели.

Model Advisor предупреждает вас когда:

  • Вы устанавливаете параметр оптимизации Use division for fixed-point net slope computation на ‘On’, но ваша настройка модели не совместима с этим выбором.

  • Ваша настройка модели подходит для использования деления, чтобы обработать сетевой наклонный расчет, но вы не устанавливаете параметр оптимизации Use division for fixed-point net slope computation на ‘On’.

Для получения дополнительной информации смотрите Сетевой Наклонный Расчет.

Идентифицируйте блоки продукта, которые менее эффективны

Количество умножения и делений, которые выполняет блок, может оказать значительное влияние на точность и КПД. Model Advisor обнаруживает некоторых, но не все, ситуации, где реорганизация операций может улучшить точность, КПД или обоих.

Одна такая ситуация состоит в том, когда вычисление с помощью больше чем одной операции деления вычисляется. Общее руководство от поля числового анализа должно умножить все условия знаменателя вместе сначала, затем сделать одно и только одно деление. Это улучшает точность и часто скорость в и особенно фиксированной точке с плавающей точкой. Это может быть выполнено в Simulink путем расположения каскадом блоков Product. Обратите внимание на то, что несколько делений, распространенных по серии блоков, не обнаруживаются Model Advisor.

Другая ситуация состоит в том, когда блок единого продукта сконфигурирован, чтобы сделать больше чем одно умножение или операцию деления. Это поддерживается, но если тип выходных данных является целочисленной или фиксированной точкой, то лучшие результаты вероятны, если эта операция разделена через несколько блоков каждое выполнение одного умножения или одного деления. Используя несколько блоков позволяет пользователю управлять типом данных и масштабированием используемого в промежуточных вычислениях. Выбор типов данных для промежуточных вычислений влияет на точность, ошибки области значений и КПД.

Проверяйте на дорогой код насыщения

Установка параметра Saturate on integer overflow может произвести код проверки условия, которого не может потребовать ваше приложение.

Проверяйте, требует ли ваше приложение установки Block Parameters> Signal Attributes> Saturate on integer overflow. В противном случае очистите этот параметр для наиболее эффективного внедрения блока в сгенерированном коде.

Идентифицируйте сомнительные операции фиксированной точки

Эта проверка идентифицирует блоки, которые генерируют операции многословные, громоздкое умножение и операции деления, дорогой код преобразования, неэффективность в блоках интерполяционной таблицы и дорогой код сравнения.

Проверяйте на операции многословные

Когда операция приводит к типу данных, больше, чем самый большой размер слова вашего процессора, сгенерированный код содержит операции многословные. Операции многословные могут быть неэффективными на оборудовании. Чтобы предотвратить операции многословные, настройте размеры слова входных параметров к операциям так, чтобы они не превышали самый большой размер слова вашего процессора. Для получения дополнительной информации об управлении операциями многословными в сгенерированном коде смотрите Фиксированную точку Операции Многословные В Сгенерированном коде.

Проверяйте на дорогой код умножения

  • Предназначение для Встраиваемого процессора обсуждает возможности и ограничения встраиваемых процессоров. Правила проектирования рекомендуют, чтобы входные параметры к умножить операции не имели размеров слова, больше, чем основной целочисленный тип вашего процессора. Умножение с большими размерами слова может всегда обрабатываться в программном обеспечении, но тот подход требует намного большего количества кода и намного медленнее. Model Advisor идентифицирует блоки, где нежелательное умножение программного обеспечения требуется. Визуальный осмотр сгенерированного кода, включая сгенерированную служебную функцию умножения, ясно даст понять стоимость этих операций. Строго рекомендуется, чтобы вы настроили модель, чтобы избежать этих операций.

  • Правила для Арифметических операций обсуждают детали реализации умножения фиксированной точки и деления. Значительное увеличение сложности происходит, когда сигналы с ненулевыми смещениями вовлечены в умножение и деление. Строго рекомендуется, чтобы вы внесли изменения, чтобы избавить от необходимости эти сложные операции. Дополнительные шаги требуются, чтобы реализовывать умножение. Вставка блока Data Type Conversion до и после блока, делающего умножение, позволяет смещениям быть удаленными и позволяет пользователю управлять типом данных и масштабирующийся для промежуточных вычислений. Во многих случаях блоки Data Type Conversion могут быть перемещены в “ребра” (sub) системы. Преобразование только сделано однажды, и все блоки могут извлечь выгоду из более простой математики без смещений.

Проверяйте на дорогой код деления

Округляющееся поведение деления целого числа со знаком не полностью задано стандартами языка C. Поэтому сгенерированный код для деления является слишком большим, чтобы предоставить битно-истинное соглашение между симуляцией и генерацией кода. Чтобы избежать сгенерированного кода целочисленного деления, который является слишком большим, в диалоговом окне Configuration Parameters, на панели Hardware Implementation, устанавливает параметр Signed integer division rounds to на рекомендуемое значение.

Идентифицируйте блоки поиска с неравномерным интервалом точки останова

Компромиссы КПД, связанные с данными об интерполяционной таблице, описаны в Эффектах Разрядки на Скорости, Ошибке и Использовании памяти. На основе этих компромиссов Model Advisor идентифицирует блоки, где существует потенциал для улучшений КПД и выдает предупреждение когда:

  • Входные данные интерполяционной таблицы равномерно не расположены с интервалами.

  • Входные данные интерполяционной таблицы равномерно не расположены с интервалами, когда квантовано, но это очень близко к тому, чтобы быть равномерно расположенным с интервалами.

  • Входные данные интерполяционной таблицы равномерно расположены с интервалами, но интервал не является степенью двойки.

Проверяйте на дорогое деление перед поиском

Для блока Prelookup или n-D Lookup Table Index search method является Evenly spaced points. Данные о точке останова не имеют силы 2 интервалов.

Если данные о точке останова являются ненастраиваемыми, рекомендуется, чтобы вы настроили данные, чтобы иметь даже, степень 2 интервалов. В противном случае, в диалоговом окне параметров блоков, задайте различный Index search method, чтобы избежать интенсивной расчетом операции деления.

Проверяйте на дорогие преобразования типа данных

Когда блок сконфигурирован таким образом, что он сгенерировал бы неэффективный код для преобразования типа данных, Model Advisor генерирует предупреждение и делает предложения о том, как сделать вашу модель более эффективной.

Проверяйте на сравнения фиксированной точки с предопределенными результатами

Когда вы выбираете isInfisnan, или isFinite как операция для блока Relational Operator, блок переключается на режим с одним входом. В этом режиме, если тип входных данных является фиксированной точкой, булевской переменной или встроенным целым числом, выход является FALSE для isInf и isNaN, TRUE для isFinite. Этот результат силы в мертвом коде, который будет устранен Simulink Coder™.

Проверяйте на дорогие бинарные операции сравнения

  • Когда типы входных данных блока Relational Operator не являются тем же самым, операция преобразования требуется каждый раз, когда блок выполняется. Если одни из входных параметров являются инвариантными, то изменение типа данных и масштабирование инвариантного входа, чтобы совпадать с другим входом повышают эффективность модели.

  • Когда входные параметры блока Relational Operator будут иметь различные области значений, будет ошибка области значений при кастинге и потеря точности каждый раз, когда преобразование выполняется. Можно вставить блоки Data Type Conversion перед блоком Relational Operator, чтобы преобразовать оба входных параметров в тип общих данных, который имеет достаточно области значений и точности, чтобы представлять каждый вход.

  • Когда входные параметры блока Relational Operator имеют различные наклонные поправочные коэффициенты, блок Relational Operator требуется, чтобы выполнять умножить операцию каждый раз, когда вход с меньшей положительной областью значений преобразован в тип данных и масштабирование входа с большей положительной областью значений. Дополнительное умножение требует дополнительного кода, замедляет скорость выполнения, и обычно вводит дополнительную потерю точности. Путем корректировки масштабирования входных параметров можно устранить наклоны, которым не соответствуют.

Проверяйте на дорогой код сравнения

Когда ваша модель сконфигурирована таким образом, что сгенерированный код содержит дорогой код сравнения, Model Advisor генерирует предупреждение.

Проверяйте на дорогие типы данных с фиксированной точкой в сгенерированном коде

Когда проект содержит размеры слова целочисленной или фиксированной точки, которые не существуют на вашем целевом компьютере, сгенерированный код может содержать дополнительный код насыщения, сдвиги и операции многословные. Путем изменения типа данных в тот, который поддерживается целевым компьютером, можно повысить эффективность сгенерированного кода. Model Advisor отмечает эти дорогие типы данных в вашей модели. Например, Model Advisor отметил бы тип данных с фиксированной точкой с помощью размера слова 17, если бы целевой компьютер составлял 32 бита.

Идентифицируйте Блоки, которые Генерируют Дорогое Округление Кода

Эта проверка предупреждает вас, когда округляющаяся оптимизация доступна. Чтобы проверять на блоки, которые генерируют дорогой код округления, Model Advisor выполняет следующие подпроверки:

  • Проверяйте на дорогие операции округления в умножении и делении

  • Проверяйте оптимизацию и настройки Hardware Implementation (Блоки Поиска)

  • Проверяйте на дорогое округление в преобразовании типа данных

  • Проверяйте на дорогие режимы округления в модели

Традиционный рукописный код, специально для приложений управления, почти всегда не использует “усилия” округление. Например, для беззнакового целого и дополнительных целых чисел со знаком two, переключая право и пропуская биты эквивалентно округлению на пол. Чтобы получить результаты, сопоставимые с, или лучше, чем, что вы ожидаете от традиционного рукописного кода, используют самый простой режим округления. В целом самый простой режим обеспечивает минимальное экономичное решение без переполнения. Если самый простой режим не доступен, вокруг на пол.

Первичным исключением к этому правилу является округляющееся поведение деления целого числа со знаком. Стандарт C оставляет это поведение округления незаданным, но для большинства производственных платформ “никакое усилие” режим не к раунду, чтобы обнулить. Для деления без знака, все неотрицательно, так округляется на пол и округление, чтобы обнулить, идентичны. Чтобы повысить округление эффективности, установите Параметры конфигурации Модели> Аппаратная реализация> детали Устройства> раунды деления Целого числа со знаком к использованию режима, который использует ваша производственная платформа.

Используйте параметр Integer rounding mode на блоках своей модели, чтобы симулировать округляющееся поведение компилятора C, который вы используете, чтобы скомпилировать код, сгенерированный из модели. Эта установка появляется на панели Signal Attributes диалоговых окон параметра блоков, которые могут выполнить арифметику целого числа со знаком, такую как блок Product. Чтобы получить самый эффективный сгенерированный код, измените параметр Integer rounding mode блока к рекомендуемой установке.

Для получения дополнительной информации о свойствах рассмотреть при выборе округляющегося режима, смотрите Выбор Rounding Method.