Вы можете использовать Simulink ® Model Advisor для настройки моделей с фиксированной точкой для достижения более эффективной конструкции и оптимизации созданного кода. Чтобы использовать Model Advisor для проверки моделей с фиксированной точкой, выполните следующие действия.
На вкладке Моделирование (Modeling) модели, которую требуется проанализировать, щелкните Помощник по модели (Model Advisor).
В списке выбора системы выберите систему для анализа.
На левой панели Model Advisor разверните узел «По продукту», а затем узел «Внедренный кодер».
Для создания кода с фиксированной точкой наиболее важными флажками для выбора являются «Идентификация блоков, генерирующих дорогостоящий код с фиксированной точкой и код насыщения», «Идентификация сомнительных операций с фиксированной точкой», «Идентификация блоков, генерирующих дорогостоящий код округления» и «Проверка реализации аппаратного обеспечения».
Чтобы включить все проверки, связанные с выбранным узлом, в меню Править (Edit) помощника по модели (Model Advisor) выберите Выбрать все (Select All).
Щелкните Выполнить выбранные проверки
. Любые советы по повышению эффективности модели с фиксированной точкой отображаются в окне «Консультант по модели» (Model Advisor).
В следующих разделах рассматриваются проверки, связанные с фиксированными точками, и вспомогательные проверки, найденные в Model Advisor. В этих разделах описываются проверки, обсуждается их важность при создании кода с фиксированной точкой и предлагаются рекомендации по корректировке модели для оптимизации созданного кода.
Когда диапазон ввода блока Sum превышает диапазон вывода, возникает ошибка диапазона. Можно получить любое необходимое приложение сложение или вычитание, вставив блоки преобразования типа данных до и/или после блока Sum.
Когда блок суммы имеет вход с поправочным коэффициентом наклона, который не равен регулировочному коэффициенту наклона выхода, несоответствие требует, чтобы блок суммы выполнял операцию умножения каждый раз, когда вход преобразуется в тип данных и масштабирование выхода. Несоответствие можно устранить, изменив масштаб выходного или входного сигнала.
Когда чистая сумма входных смещений блока Sum не равна смещению выходного сигнала, генерируемый код включает в себя одну дополнительную команду сложения или вычитания, чтобы правильно учесть чистую корректировку смещения. Изменение смещения выходного масштабирования может сделать чистую корректировку смещения нулевой и исключить необходимость в дополнительной операции.
Когда входные и выходные данные блока MinMax имеют различные типы данных, при каждом выполнении блока требуется операция преобразования. Модель более эффективна с теми же типами данных.
Когда тип данных и масштабирование входного сигнала блока MinMax не соответствуют типу данных и масштабированию выходного сигнала, перед выполнением реляционной операции требуется преобразование. Это может привести к ошибке диапазона при литье или потере точности при каждом выполнении преобразования. Измените масштаб ввода или вывода, чтобы создать более эффективный код.
Когда вход блока MinMax имеет другой коэффициент регулировки наклона, чем выход, блок MinMax требует операции умножения каждый раз, когда блок выполняется для преобразования входа в тип данных и масштабирования выхода. Можно исправить несоответствие, изменив масштаб ввода или вывода.
Когда начальное условие для блоков интегратора дискретного времени используется для инициализации состояния и вывода, выходное уравнение генерирует избыточный код и требуется дополнительная глобальная переменная. Рекомендуется установить для параметра Function Block Parameters > Initial condition setting значение State (most efficient).
Если входной тип данных блока сравнения с нулем не может точно представлять ноль, входной сигнал сравнивается с ближайшим представимым значением нуля, что приводит к переполнению параметра. Чтобы избежать переполнения этого параметра, выберите тип входных данных, который может представлять ноль.
Если параметр Constant value параметра Compare to Constant находится вне диапазона, который может представлять тип входных данных, входной сигнал сравнивается с ближайшим представимым значением константы. Это приводит к переполнению параметров. Чтобы избежать переполнения этого параметра, выберите тип входных данных, который может представлять значение константы, или измените значение константы на значение, которое может соответствовать типу входных данных.
Компромиссы эффективности, связанные с данными таблицы поиска, описаны в разделе Влияние интервалов на скорость, ошибки и использование памяти. Основываясь на этих компромиссах, Model Advisor определяет блоки, где есть потенциал для повышения эффективности, такие как:
Входные данные таблицы подстановки расположены неравномерно.
Входные данные таблицы поиска не распределяются равномерно при квантовании, но они очень близки к равномерно распределенным.
Входные данные таблицы поиска равномерно разнесены, но интервал не равен двум.
Дополнительные сведения об оптимизации таблицы подстановки см. в разделе Оптимизация таблицы подстановки.
Созданный код целочисленного деления содержит защиту от арифметических исключений, таких как деление на ноль, INT_MIN/-1 и LONG_MIN/-1. При построении моделей, делающих невозможным для исключения инициирование входных комбинаций для достижения операции разделения, код защиты, генерируемый как часть операции разделения, является избыточным.
Метод индексного поиска Evenly-spaced points требует операции разделения, которая может быть дорогостоящей в вычислительном отношении.
Если изменение уклона с фиксированной точкой не является степенью двух, необходимо вычислить суммарный наклон. Как правило, вычисление чистого наклона выполняется с использованием целочисленного умножения, за которым следуют сдвиги. При некоторых условиях альтернативная реализация требует просто целочисленного деления на константу. Одним из условий является то, что чистый наклон может быть очень точно представлен как обратная величина целого числа. При выполнении этого условия реализация разделения обеспечивает более точное численное поведение. В зависимости от компилятора и встроенного аппаратного обеспечения реализация разделения может быть более желательной, чем реализация умножения и сдвига. Созданный код может быть более эффективным с точки зрения размера ПЗУ или размера выполнения модели.
Model Advisor предупреждает, когда:
Для параметра оптимизации расчета чистого откоса с фиксированной точкой установлено значение «Использовать деление». ‘On’, но конфигурация модели несовместима с этим выбором.
Конфигурация модели подходит для использования деления для обработки вычисления чистого откоса, но параметр «Использовать разделение для вычисления фиксированного чистого откоса» не устанавливается равным ‘On’.
Дополнительные сведения см. в разделе Расчет чистого откоса.
Количество умножений и делений, которые выполняет блок, может оказать значительное влияние на точность и эффективность. Model Advisor обнаруживает некоторые, но не все ситуации, в которых перегруппировка операций может повысить точность, эффективность или и то, и другое.
Одной из таких ситуаций является вычисление, использующее более одной операции деления. Общее руководство из области численного анализа состоит в том, чтобы сначала умножить все члены знаменателя вместе, затем сделать одно и только одно деление. Это повышает точность и часто скорость в плавающей и особенно фиксированной точках. Это может быть выполнено в Simulink путем каскадирования блоков продукта. Обратите внимание, что несколько разделов, распределенных по ряду блоков, не обнаруживаются модулем Model Advisor.
Другая ситуация заключается в том, что один блок продукта сконфигурирован для выполнения нескольких операций умножения или деления. Это поддерживается, но если тип выходных данных - целое число или фиксированная точка, то лучшие результаты, вероятно, будут получены, если эта операция разделена на несколько блоков, каждый из которых выполняет одно умножение или одно деление. Использование нескольких блоков позволяет пользователю управлять типом данных и масштабированием, используемыми для промежуточных вычислений. Выбор типов данных для промежуточных вычислений влияет на точность, погрешность диапазона и эффективность.
Установка параметра Saturate on integer overflow может привести к появлению кода проверки состояния, который может не потребоваться приложению.
Проверьте, требует ли приложение установки параметров блока > атрибутов сигнала > насыщения при переполнении целых чисел. В противном случае удалите этот параметр для наиболее эффективной реализации блока в сгенерированном коде.
Эта проверка идентифицирует блоки, которые генерируют многословные операции, громоздкие операции умножения и деления, дорогостоящий код преобразования, неэффективность в блоках таблицы поиска и дорогостоящий код сравнения.
Если в результате операции тип данных превышает наибольший размер слова процессора, созданный код содержит многословные операции. Многословные операции могут оказаться неэффективными на оборудовании. Чтобы предотвратить многословные операции, отрегулируйте длины слов, вводимых в операции, так, чтобы они не превышали наибольший размер слова процессора. Дополнительные сведения об управлении многословными операциями в сгенерированном коде см. в разделе Многословные операции с фиксированной точкой в сгенерированном коде.
В разделе «Нацеливание процессора для встраиваемых систем» рассматриваются возможности и ограничения процессоров для встраиваемых систем. Правила проектирования рекомендуют, чтобы входные данные операции умножения не имели длины слов, превышающие базовый целочисленный тип процессора. Умножение с большей длиной слова всегда может быть обработано в программном обеспечении, но этот подход требует гораздо больше кода и гораздо медленнее. Model Advisor определяет блоки, в которых требуется нежелательное программное умножение. Визуальный осмотр сгенерированного кода, включая сгенерированную функцию умножения, позволит уточнить стоимость этих операций. Настоятельно рекомендуется настроить модель, чтобы избежать этих операций.
Правила для арифметических операций обсуждают детали реализации умножения и деления с фиксированной точкой. Значительное увеличение сложности происходит, когда в умножение и деление вовлечены сигналы с ненулевыми смещениями. Настоятельно рекомендуется внести изменения, чтобы исключить необходимость в этих сложных операциях. Для реализации умножения требуются дополнительные шаги. Вставка блока преобразования типа данных до и после блока, выполняющего умножение, позволяет удалить смещения и позволяет пользователю управлять типом данных и масштабированием для промежуточных вычислений. Во многих случаях блоки преобразования типа данных могут быть перемещены в «края» (под) системы. Преобразование выполняется только один раз, и все блоки могут воспользоваться более простой математикой без смещения.
Поведение округления целочисленного деления со знаком не полностью определено стандартами языка C. Следовательно, сгенерированный код для разделения слишком велик, чтобы обеспечить достоверное согласование между моделированием и генерацией кода. Чтобы избежать слишком большого кода с целочисленным разделением, в диалоговом окне «Параметры конфигурации» на панели «Реализация оборудования» задайте для параметра «Округления целочисленного деления с подписью» рекомендуемое значение.
Компромиссы эффективности, связанные с данными таблицы поиска, описаны в разделе Влияние интервалов на скорость, ошибки и использование памяти. Основываясь на этих компромиссах, Model Advisor определяет блоки, где есть потенциал для повышения эффективности, и выдает предупреждение, когда:
Входные данные таблицы подстановки расположены неравномерно.
Входные данные таблицы поиска не распределяются равномерно при квантовании, но они очень близки к равномерно распределенным.
Входные данные таблицы поиска равномерно разнесены, но интервал не равен двум.
Для блока таблицы поиска Prelookup или n-D метод поиска индекса Evenly spaced points. Данные точки останова не имеют значения 2 интервала.
Если данные точек останова не могут быть настроены, рекомендуется настроить данные на четные значения, мощность которых равна 2 интервалам. В противном случае в диалоговом окне параметров блока укажите другой метод поиска «Индекс», чтобы избежать интенсивной операции деления.
Когда блок настроен таким образом, что он создает неэффективный код для преобразования типа данных, консультант по модели генерирует предупреждение и предлагает, как сделать модель более эффективной.
При выборе isInf, isNaN, или isFinite в качестве операции для блока реляционного оператора блок переключается в режим с одним входом. В этом режиме, если типом входных данных является фиксированная точка, логическое значение или встроенное целое число, результатом является FALSE для isInf и isNaN, TRUE для isFinite. Это может привести к мертвому коду, который будет исключен Simulink Coder™.
Когда входные типы данных блока реляционного оператора не совпадают, операция преобразования требуется каждый раз при выполнении блока. Если один из входов является инвариантным, то изменение типа данных и масштабирования инвариантного входа для соответствия другому входу повышает эффективность модели.
Когда входы блока реляционного оператора имеют различные диапазоны, при литье будет возникать ошибка диапазона и потеря точности каждый раз при выполнении преобразования. Перед блоком «Реляционный оператор» можно вставить блоки преобразования типов данных, чтобы преобразовать оба ввода в общий тип данных, который имеет достаточный диапазон и точность для представления каждого ввода.
Когда входы блока реляционного оператора имеют различные коэффициенты регулировки наклона, блок реляционного оператора должен выполнять операцию умножения каждый раз, когда вход с меньшим положительным диапазоном преобразуется в тип данных и масштабирование входа с большим положительным диапазоном. Дополнительное умножение требует дополнительного кода, замедляет скорость выполнения и обычно вводит дополнительные потери точности. Регулировка масштаба входных данных позволяет устранить несовпадающие уклоны.
Когда модель настроена таким образом, что созданный код содержит дорогостоящий код сравнения, консультант по модели генерирует предупреждение.
Если конструкция содержит целочисленные или фиксированные длины слов, которые отсутствуют на целевом оборудовании, созданный код может содержать дополнительный код насыщения, сдвиги и многословные операции. Изменение типа данных на тип, поддерживаемый целевым оборудованием, позволяет повысить эффективность создаваемого кода. Model Advisor помечает эти дорогостоящие типы данных в модели. Например, Model Advisor отметит тип данных с фиксированной точкой длиной слова 17, если целевое оборудование было 32 бита.
Эта проверка предупреждает о наличии оптимизации округления. Для проверки блоков, генерирующих дорогостоящий код округления, Model Advisor выполняет следующие подчеки:
Проверка дорогих операций округления в умножении и делении
Проверка параметров оптимизации и внедрения оборудования (блоки поиска)
Проверка дорогостоящего округления при преобразовании типа данных
Проверка дорогих режимов округления в модели
Традиционный рукописный код, особенно для управляющих приложений, почти всегда использует округление «без усилий». Например, для целочисленных чисел без знака и целых чисел с знаком дополнения два смещение вправо и отбрасывание битов эквивалентно округлению до пола. Чтобы получить результаты, сравнимые или лучше, чем вы ожидаете от традиционного рукописного кода, используйте простейший режим округления. В общем, простейший режим обеспечивает решение по минимальной стоимости без переливов. Если простейший режим недоступен, округляйтесь до этажа.
Основным исключением из этого правила является поведение округления целочисленного деления со знаком. Стандарт C оставляет это поведение округления неопределенным, но для большинства производственных целей режим «без усилий» должен округляться до нуля. Для беззнакового деления всё неотрицательно, поэтому округление до пола и округление до нуля идентичны. Чтобы повысить эффективность округления, установите Параметры конфигурации модели > Реализация оборудования > Сведения об устройстве > Округления целочисленного деления с подписью для использования режима, используемого в производственном объекте.
Используйте параметр Режим округления целых чисел в блоках модели, чтобы смоделировать поведение округления компилятора Си, который используется для компиляции кода, созданного из модели. Этот параметр отображается на панели Атрибуты сигнала (Signal Attributes) диалоговых окон параметров блоков, которые могут выполнять арифметику целых чисел со знаком, например блок Изделие (Product). Чтобы получить наиболее эффективный созданный код, измените параметр режима округления целого числа блока на рекомендуемый параметр.
Дополнительные сведения о свойствах, которые следует учитывать при выборе режима округления, см. в разделе Выбор метода округления.