exponenta event banner

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

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

Обзор

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

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

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

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

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

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

Откройте 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. Проверьте код, соответствующий блоку «Тип выходных данных продукта с уменьшенной длиной дроби». Щелкните правой кнопкой мыши по этому блоку и выберите «Создание кода» > «Перейти к коду»....

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

Проверка оптимизированного кода

Щелкните правой кнопкой мыши по блоку «Product with reducted fraction length output data type» и выберите Code Generation > Navigate to code....

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

Генерируемый код:

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

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

Проверка других операций

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