По умолчанию сгенерированный код для следующих блоков интерполяционной таблицы включает условные операторы, которые проверяют на вне области допустимого индекса или входов:
Чтобы сгенерировать код, который является более эффективным, можно удалить условные операторы, которые защищают от значений входа вне области допустимого.
Блок | Флажок для выбора |
---|---|
1-D Lookup Table | Remove protection against out-of-range input in generated code |
2-D Lookup Table | |
n-D Lookup Table | |
Prelookup | |
Interpolation Using Prelookup | Remove protection against out-of-range index in generated code |
Установка флажка в диалоговом окне блока повышает эффективность кода, поскольку меньше операторов для выполнения. Однако, если вы генерируете код для критически важных для безопасности приложений, вы не должны удалять код проверки диапазона.
Чтобы проверить использование флажка, запустите следующие проверки Model Advisor и выполните рекомендуемые действия.
Проверка Model Advisor | Когда запускать проверку |
---|---|
By Product> Embedded Coder> Identify lookup table blocks that generate expensive out-of-range checking code | Для эффективности кода |
By Product> Simulink Check> Modeling Standards> DO-178C/DO-331 Checks> Check usage of lookup table blocks | Для критически важных приложений |
Для получения дополнительной информации о Model Advisor, смотрите Проверить свою модель Используя Model Advisor в Simulink® документация.
Когда точки останова в интерполяционной таблице настраиваются, интервалы не влияют на эффективность или использование памяти сгенерированного кода. Когда точки останова не настраиваются, тип интервала может повлиять на следующие факторы.
Фактор | Четная степень 2-х разнесенных данных | Равномерно разнесенные данные | Неравномерно разнесенные данные |
---|---|---|---|
Скорость выполнения | Скорость выполнения самая быстрая. Поиск и интерполяция положения те же, что и для данных с равномерными интервалами. Однако, чтобы увеличить скорость немного больше для фиксированных точек, битовый сдвиг заменяет поиск положения, а битовая маска заменяет интерполяцию. | Скорость выполнения быстрее, чем для неравномерно разнесенных данных, потому что поиск положения быстрее, и интерполяция использует простое деление. | Скорость выполнения является самой медленной из различных интервалов, потому что поиск положения медленнее, и интерполяция требует большего количества операций. |
Ошибка | Ошибка может быть больше, чем ошибка для неравномерно разнесенных данных, потому что для аппроксимации функции с неоднородной кривизной требуется больше точек, чтобы достичь той же точности. | Ошибка может быть больше, чем ошибка для неравномерно разнесенных данных, потому что для аппроксимации функции с неоднородной кривизной требуется больше точек, чтобы достичь той же точности. | Ошибка может быть меньше, потому что для аппроксимации функции с неоднородной кривизной требуется меньше точек, чтобы достичь той же точности. |
Использование ПЗУ | Использует меньше ПЗУ команд, но больше ПЗУ данных. | Использует меньше ПЗУ команд, но больше ПЗУ данных. | Использует больше командного ПЗУ, но меньше ПЗУ данных. |
Использование оперативной памяти | Несущественный. | Несущественный. | Несущественный. |
Следуйте этим рекомендациям:
Для типов данных с фиксированной точкой используйте точки прерывания с четным интервалом мощности 2.
Для типов данных, не являющихся фиксированными точками, используйте точки прерывания с четными интервалами.
Чтобы идентифицировать возможности повышения эффективности кода в блоках интерполяционной таблицы, запустите следующие проверки Model Advisor и выполните рекомендуемые действия:
By Product> Embedded Coder> Identify questionable fixed-point operations
By Product> Embedded Coder> Identify blocks that generate expensive saturation and rounding code
Для получения дополнительной информации о Model Advisor, смотрите Проверить модель Используя Model Advisor в документации Simulink.
Когда вы используете переменные рабочей области для хранения данных таблицы и точек по оси Х для блоков Интерполяционной таблицы, а затем конфигурируете эти переменные для настраиваемости, можно избежать копий данных с помощью совпадающего типа данных для параметров блоков и переменной. Переменные рабочей области включают число MATLAB® переменные и Simulink.Parameter
объекты, которые вы храните в рабочей области, такое как базовое рабочее пространство или в словаре данных. Если тип данных переменной меньше, чем тип данных параметров блоков, сгенерированный код неявно приводит тип данных переменной к типу данных параметров блоков. Это неявное приведение требует копии данных, которая потенциально может значительно увеличить потребление ОЗУ и замедлить скорость выполнения кода для больших векторов или матриц.
Для получения дополнительной информации смотрите Типы данных параметра в Сгенерированном коде (Embedded Coder) и Создайте Настраиваемый Параметр Калибровки в Сгенерированном Коде (Simulink Coder).
Чтобы сгенерировать эффективный код для размещения массива с основной строкой, выберите параметр конфигурации модели Math and Data Types > Use algorithms optimized for row-major array layout. Алгоритмы основной строки выполняют с наилучшей скоростью и использованием памяти при работе с данными таблицы с размещением массива основной строки. Точно так же алгоритмы по умолчанию для основных столбцов лучше всего работают с размещением массива для основных столбцов. Рассмотрите использование алгоритма, который оптимизирован для заданного размещения массива, чтобы достичь наилучшей эффективности. Например, используйте алгоритмы основной строки, когда размещение массива установлено как основной алгоритм строки во время генерации кода.
Размещение массива | Алгоритм | Алгоритм, удобный для кэша |
---|---|---|
Основной столбец | Основной столбец | Рекомендуется |
Основная строка | Основная строка | Рекомендуется |
Основная строка | Основной столбец | Не рекомендуется |
Основной столбец | Основная строка | Не рекомендуется |
Для получения дополнительной информации смотрите Преобразование макета основной строки в основную строку моделей с блоками интерполяционной таблицы (Simulink Coder).
Interpolation Using Prelookup | n-D Lookup Table | Prelookup