Оптимизация с фиксированной точкой с использованием заданных минимального и максимального значений

В этом примере показано, как оптимизировать операции с фиксированной точкой в сгенерированном коде с помощью минимальных и максимальных значений, которые вы задаете в модели.

Обзор

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

Примечание: Вы должны убедиться, что указанные минимальное и максимальное значения точны и заслуживают доверия. В противном случае оптимизация может привести к численному несоответствию с симуляцией.

Преимущества оптимизации сгенерированного кода:

  • Уменьшение потребления ПЗУ и ОЗУ.

  • Улучшение скорости выполнения.

Откройте модель

Откройте fxpdemo_min_max_optimization модели.

open_system('fxpdemo_min_max_optimization');

Осмотрите модель

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

Сгенерируйте код без оптимизации

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

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for: fxpdemo_min_max_optimization
### Successful completion of code generation for: fxpdemo_min_max_optimization

Build Summary

Top model targets built:

Model                         Action          Rebuild Reason                                    
================================================================================================
fxpdemo_min_max_optimization  Code generated  Code generation information file does not exist.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 18.142s

Смотрите код без оптимизации

Откроется отчет генерации кода HTML. Исследуйте код, относящийся к блоку «Продукт с уменьшенной длиной дроби выхода данных type». Щелкните правой кнопкой мыши по этому блоку и выберите Генерация Кода > Navigate to code....

rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');

Сгенерированный код:

rtY.Out1 = mul_u32_u32_u32_sr10(rtU.In1, rtU.In2);

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

Включите оптимизацию

  1. Дважды кликните желтую кнопку, чтобы открыть диалоговое окно Параметров конфигурации.

  2. В этом диалоговом окне в разделе Генерация кода выберите Оптимизировать с использованием заданных минимального и максимального значений.

set_param('fxpdemo_min_max_optimization', 'UseSpecifiedMinMax', 'on');

Сгенерируйте код с оптимизацией

Теперь перегенерируйте код с помощью заданных минимального и максимального значений.

Дважды кликните синюю кнопку.

rtwbuild('fxpdemo_min_max_optimization');
### Starting build procedure for: fxpdemo_min_max_optimization
### Successful completion of code generation for: fxpdemo_min_max_optimization

Build Summary

Top model targets built:

Model                         Action          Rebuild Reason                   
===============================================================================
fxpdemo_min_max_optimization  Code generated  Generated code was out of date.  

1 of 1 models built (0 models already up to date)
Build duration: 0h 0m 8.4294s

Исследуйте оптимизированный код

Щелкните правой кнопкой мыши по блоку «Продукт с сокращенным типом выходных данных длины дроби» и выберите Генерация Кода > Navigate to code....

rtwtrace('fxpdemo_min_max_optimization/Product with reduced fraction length output data type');

Сгенерированный код:

rtY.Out1 = rtU.In1 * rtU.In2 >> 10;

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

Исследуйте другие операции

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

Для просмотра документации необходимо авторизоваться на сайте