Программное обеспечение Fixed-Point Designer™ обеспечивает параметр оптимизации, Use division for fixed-point net slope computation, который управляет, как программное обеспечение обрабатывает сетевой наклонный расчет. Чтобы изучить, как включить эту оптимизацию, смотрите Целочисленное деление Использования, чтобы Обработать Сетевой Наклонный Расчет.
Когда изменение наклона фиксированной точки не является степенью двойки, сетевой наклонный расчет необходим. Обычно, сетевой наклонный расчет реализован с помощью целочисленного умножения, сопровождаемого сдвигами. При определенных обстоятельствах сетевой наклонный расчет может быть реализован с помощью целочисленного деления или рационального приближения сетевого наклона. Одно из условий - то, что сетевой наклон может быть точно представлен как рациональная часть или как обратная величина целого числа. При этом условии реализация деления дает более точное числовое поведение. В зависимости от вашего компилятора и встроенного оборудования, реализация деления может быть более желательной, чем реализация сдвигов и умножение. Сгенерированный код для рациональной реализации приближения и/или целочисленного деления может потребовать меньшего количества ROM или улучшить время выполнения модели.
Эта оптимизация работает если:
Сетевой наклон может быть аппроксимирован частью или является обратной величиной целого числа.
Деление более эффективно, чем умножение, сопровождаемое сдвигами на целевом компьютере.
Примечание
Программное обеспечение Fixed-Point Designer не знает о целевом компьютере. Прежде, чем выбрать эту опцию, проверьте, что деление более эффективно, чем умножение, сопровождаемое сдвигами на вашем целевом компьютере.
Эта оптимизация не работает если:
Программное обеспечение не может выполнить деление с помощью производственной платформы long
тип данных и поэтому должен использовать операции многословные.
Используя деление многословное не производит код, подходящий для целевых процессоров. Поэтому не используйте деление, чтобы обработать сетевой наклонный расчет в моделях, которые используют операции многословные. Если ваша модель содержит блоки, которые используют операции многословные, изменяют размер слова этих блоков, чтобы избежать этих операций.
Сетевой наклон является степенью 2, или рациональное приближение сетевого наклона содержит деление степенью 2.
Единственное двоичной точкой масштабирование, где сетевой наклон является степенью 2, включает перемещение двоичной точки в слове фиксированной точки. Этот режим масштабирования уже минимизирует количество арифметических операций процессора.
Включить эту оптимизацию:
В диалоговом окне Configuration Parameters, на Math and Data Types> панель Data Types, устанавливает Use division for fixed-point net slope computation на On
, или Use division for reciprocals of integers only
Для получения дополнительной информации смотрите деление Использования для фиксированной точки сетевой наклонный расчет.
На Hardware Implementation> панель Device details, набор параметр конфигурации Signed integer division rounds to к Floor
или Zero
, как подходящий для вашего целевого компьютера. Оптимизация не происходит, если параметром Signed integer division rounds to является Undefined
.
Примечание
Установите этот параметр на значение, которое подходит для целевого компьютера. Отказ сделать так может привести к операциям деления, которые выполняют определение на панели Hardware Implementation, но являются несоответствующими для целевого компьютера.
Установите Integer rounding mode блоков, которые требуют сетевого наклонного расчета (например, Product, Gain и Data Type Conversion) к Simplest
или совпадайте с округляющимся режимом своего целевого компьютера.
Примечание
Можно использовать Model Advisor, чтобы предупредить вас, если вы не сконфигурировали свою модель правильно для этой оптимизации. Откройте Model Advisor и осуществите проверку Identify questionable fixed-point operations. Для получения дополнительной информации, seeIdentify блоки, которые вызовут сетевой наклонный расчет.
Этот пример иллюстрирует как, устанавливая Math and Data Types> параметр Use division for fixed-point net slope computation к On
улучшает числовую точность. Открыть ex_net_slope1
модель, в командной строке MATLAB®, введите:
addpath(fullfile(docroot,'toolbox','fixpoint','examples')) ex_net_slope1
Для блока Product в этой модели,
Эти значения представлены генералом [Наклонное Смещение] схема кодирования, описанная в Масштабировании:.
Поскольку нет никакого смещения для вводов или выводов:
или
где сетевой наклон:
Сетевым наклоном для блока Product является 7/11
. Поскольку сетевой наклон может быть представлен как дробное значение, состоящее из маленьких целых чисел, можно использовать On
установка параметра оптимизации Use division for fixed-point net slope computation, если ваша и аппаратная конфигурация модели подходит. Для получения дополнительной информации смотрите, Когда Использовать Деление для Фиксированной точки Сетевой Наклонный Расчет.
Настраивать модель и запускать симуляцию:
Для блока Constant Vb
, установите Output data type на fixdt(1, 8, 0.7, 0)
. Для блока Constant Vc
, установите Output data type на fixdt(1, 8, 0)
.
Для блока Product, набор Output data type к fixdt(1, 16, 1.1, 0)
. Установите Integer rounding mode на Simplest
.
В диалоговом окне Configuration Parameters, набор Hardware Implementation> Device details> параметр конфигурации Signed integer division rounds to к Zero
.
Установите Math and Data Types> Use division for fixed-point net slope computation к Off
.
В вашем окне модели Simulink®, во вкладке Simulation, нажимают Run.
Поскольку симуляция использует умножение, сопровождаемое сдвигами, чтобы обработать сетевой наклонный расчет, сетевая наклонная потеря точности происходит. Эта потеря точности приводит к числовой погрешности: расчетным продуктом является 306.9
, не 308
, как вы ожидаете.
Примечание
Можно настроить программное обеспечение Fixed-Point Designer, чтобы обеспечить предупреждения, когда потеря точности происходит в константах фиксированной точки. Для получения дополнительной информации смотрите Сетевую Наклонную и Сетевую Точность Смещения.
Установите Math and Data Types> Use division for fixed-point net slope computation к On
.
Сохраните свою модель и симулируйте снова.
Программное обеспечение реализует сетевой наклонный расчет с помощью рационального приближения вместо умножения, сопровождаемого сдвигами. Расчетным продуктом является 308
, как вы ожидаете.
Оптимизация работает на эту модель потому что:
Сетевой наклон является представимым как часть с маленькими целыми числами в числителе и знаменателе.
Hardware Implementation> Device details> параметр конфигурации Signed integer division rounds to установлен в Zero
.
Примечание
Эта установка должна совпадать с вашим режимом округления целевого компьютера.
Integer rounding mode блока Product в модели установлен в Simplest
.
Модель не использует операции многословные.
В этом примере показано, как установка параметра оптимизации Math and Data Types> Use division for fixed-point net slope computation к On
повышает эффективность сгенерированного кода.
Примечание
Сгенерированный код более эффективен, только если деление более эффективно, чем умножение, сопровождаемое сдвигами на вашем целевом компьютере.
Открыть ex_net_slope2
модель, в командной строке MATLAB, введите:
addpath(fullfile(docroot,'toolbox','fixpoint','examples')) ex_net_slope2
Для блока Product в этой модели,
Эти значения представлены генералом [Наклонное Смещение] схема кодирования, описанная в Масштабировании:.
Поскольку нет никакого смещения для вводов или выводов:
или
где сетевой наклон:
Сетевым наклоном для блока Product является 9/10
.
Точно так же для блока Data Type Conversion в этой модели,
Нет никакого смещения. Поэтому сетевой наклон . Сетевым наклоном для этого блока является также 9/10
.
Поскольку сетевой наклон может быть представлен как часть, можно установить Math and Data Types> параметр оптимизации Use division for fixed-point net slope computation к On
если ваша и аппаратная конфигурация модели подходит. Для получения дополнительной информации смотрите, Когда Использовать Деление для Фиксированной точки Сетевой Наклонный Расчет.
Настраивать модель и генерировать код:
Для блока Inport Va
, установите Output data type на fixdt(1, 8, 9/10, 0)
; для блока Inport Vb
, установите Output data type на int8
.
Для блока Data Type Conversion, набор Integer rounding mode к Simplest
. Установите Output data type на int16
.
Для блока Product, набор Integer rounding mode к Simplest
. Установите Output data type на int16
.
Установите Hardware Implementation> Device details> параметр конфигурации Signed integer division rounds to к Zero
.
Установите Math and Data Types> Use division for fixed-point net slope computation к Off
.
От вкладки Simulink Apps выберите Embedded Coder. Во вкладке C Code нажмите Build.
Концептуально, сетевым наклонным расчетом является 9/10
или 0.9
:
Vc = 0.9 * Va; Vm = 0.9 * Va * Vb;
Сгенерированный код использует умножение со сдвигами:
% For the conversion Vc = (int16_T)(Va * 115 >> 7); % For the multiplication Vm = (int16_T)((Va * Vb >> 1) * 29491 >> 14);
Идеальным значением сетевого наклонного расчета является 0.9
. В сгенерированном коде приближенным значением сетевого наклонного расчета является 29491 >> 15 = 29491/2^15 = 0.899993896484375
. Это приближение вводит числовую погрешность. Например, использование той же модели с постоянными входными параметрами приводит к следующим результатам.
В исходной модели с входными параметрами Va
и Vb
, установите Math and Data Types> параметр Use division for fixed-point net slope computation к On
, обновите схему и сгенерируйте код снова.
Сгенерированный код теперь использует целочисленное деление вместо умножения, сопровождаемого сдвигами:
% For the conversion Vc = (int16_T)(Va * 9/10); % For the multiplication Vm = (int16_T)(Va * Vb * 9/10);
В сгенерированном коде значение сетевого наклонного расчета является теперь идеальным значением 0.9
. Используя деление, результаты численно точны.
В модели с постоянными входными параметрами, набор Math and Data Types> параметр Use division for fixed-point net slope computation к On
и симулируйте модель.
Оптимизация работает на эту модель потому что:
Сетевой наклон является представимым как часть с маленькими целыми числами в числителе и знаменателе.
Hardware Implementation> Device details> параметр конфигурации Signed integer division rounds to установлен в Zero
.
Примечание
Эта установка должна совпадать с вашим режимом округления целевого компьютера.
Для Product и блоков Data Type Conversion в модели, Integer rounding mode установлен в Simplest
.
Модель не использует операции многословные.
Установка Math and Data Types> параметр Use division for fixed-point net slope computation к Use division for reciprocals of integers only
инициировал оптимизацию только в случаях, где сетевой наклон является обратной величиной целого числа. Эта установка приводит к одному целочисленному делению, чтобы обработать сетевые наклонные расчеты.