Наклон сети Расчета

Handle Net Slope Computation (Вычисление наклона

Программное обеспечение Fixed-Point Designer™ предоставляет параметр оптимизации, Use division for fixed-point net slope computation, который управляет тем, как программное обеспечение обрабатывает расчеты уклона сети. Чтобы узнать, как включить эту оптимизацию, смотрите Использование Целого Деления для Обработки Расчетов Наклона Сети.

Когда изменение наклона с фиксированной точкой не является степенью двойки, необходимо расчет откоса сети. Обычно расчет сетевого наклона реализуется с помощью целочисленного умножения с последующими сдвигами. При определенные обстоятельства расчет наклона сети может быть реализовано с помощью целочисленного деления или рационального приближения наклона сети. Одно из условий состоит в том, что наклон сети может быть точно представлен как рациональная дробь или как обратная величина целого числа. При этом условии реализация деления дает более точное численное поведение. В зависимости от вашего компилятора и встроенного оборудования, реализация деления может быть более желательной, чем реализация умножения и сдвигов. Сгенерированный код для рационального приближения и/или реализации целочисленного деления может потребовать меньше ПЗУ или улучшить время выполнения модели.

Когда использовать деление для расчета уклона сети с фиксированной точкой

Эта оптимизация работает, если:

  • Наклон сети может быть аппроксимирован дробью или является обратным целым числом.

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

    Примечание

    Программное обеспечение Fixed-Point Designer не знает о целевом компьютере. Прежде чем выбирать эту опцию, проверьте, что деление более эффективно, чем умножение, за которым следуют сдвиги на вашем целевом компьютере.

Когда не использовать деление для обработки расчетов уклона сети

Эта оптимизация не работает, если:

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

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

  • Наклон сети является степенью 2 или рациональное приближение наклона сети содержит деление на степень 2.

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

Используйте деление для обработки расчетов уклона сети

Чтобы включить эту оптимизацию:

  1. В диалоговом окне Configuration Parameters, на Math and Data Types> Data Types панель, набор Use division for fixed-point net slope computation к On, или Use division for reciprocals of integers only

    Для получения дополнительной информации смотрите Использование деления для расчета наклона сети с фиксированной точкой.

  2. На панели Hardware Implementation > Device details установите параметр конфигурации Signed integer division rounds to равным Floor или Zero, в зависимости от вашего целевого компьютера. Оптимизация не происходит, если параметр Signed integer division rounds to Undefined.

    Примечание

    Установите этот параметр для целевого компьютера. Отказ для этого может привести к операциям разделения, которые соответствуют определению на панели Hardware Implementation, но не подходят для целевого компьютера.

  3. Установите Integer rounding mode блоков, которые требуют вычисления сетевого наклона (например, Product, Gain и Data Type Conversion), равными Simplest или соответствовать режиму округления вашего целевого компьютера.

Примечание

Можно использовать Model Advisor, чтобы предупредить вас, если вы не сконфигурировали модель правильно для этой оптимизации. Откройте Model Advisor и запустите проверку Identify questionable fixed-point operations. Для получения дополнительной информации см. Раздел «Идентифицируйте блоки», которые будут вызывать расчет уклона сети.

Улучшите числовую точность результатов симуляции с рациональными приближениями, чтобы обработать наклон сети

Этот пример иллюстрирует, как установить параметр 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 в этой модели,

Эти значения представлены общей схемой кодирования [Наклон Смещения], описанной в масштабирование:Vi=SiQi+Bi.

Потому что нет никакого смещения для входов или выходов:

SaQa=SbQb.ScQc

или

Qa=SbScSa.QbQc

где уклон сети:

SbScSa

Наклон сети для блока Product 7/11. Поскольку наклон сети может быть представлен как дробное значение, состоящее из малых целых чисел, можно использовать On установка параметра оптимизации Use division for fixed-point net slope computation, если ваша модель и аппаратное строение подходят. Для получения дополнительной информации см. Раздел «Когда использовать деление для расчета уклона сети с фиксированной точкой»

Чтобы настроить модель и запустить симуляцию:

  1. Для блока Constant Vb, установите Output data type равным fixdt(1, 8, 0.7, 0). Для блока Constant Vc, установите Output data type равным fixdt(1, 8, 0).

  2. Для блока Product установите Output data type равным fixdt(1, 16, 1.1, 0). Установите Integer rounding mode равным Simplest.

  3. В диалоговом окне Configuration Parameters, набор Hardware Implementation> Device details> Signed integer division rounds to параметр конфигурации к Zero.

  4. Установите значение Math and Data Types > Use division for fixed-point net slope computation Off.

  5. В вашем Simulink® окна модели, на вкладке Simulation, нажмите Run.

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

    Примечание

    Можно настроить программное обеспечение Fixed-Point Designer, чтобы предоставлять предупреждения, когда потеря точности происходит в константах с фиксированной точкой. Для получения дополнительной информации смотрите Net Slope и Net Bias Precision.

  6. Установите значение 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 в этой модели,

Vm=Va×Vb

Эти значения представлены общей схемой кодирования [Наклон Смещения], описанной в масштабирование:Vi=SiQi+Bi.

Потому что нет никакого смещения для входов или выходов:

SmQm=SaQa.SbQb

или

Qm=SaSbSm.QaQb

где уклон сети:

SaSbSm

Наклон сети для блока Product 9/10.

Точно так же для блока Data Type Conversion в этой модели,

SaQa+Ba=SbQb+Bb

Предвзятости нет. Поэтому поперечный уклон сети SbSa. Наклон сети для этого блока также 9/10.

Поскольку уклон сети может быть представлен как дробь, можно задать параметр оптимизации Math and Data Types > Use division for fixed-point net slope computation равным On если ваша модель и аппаратные строения подходят. Для получения дополнительной информации см. Раздел «Когда использовать деление для расчета уклона сети с фиксированной точкой»

Чтобы настроить модель и сгенерировать код:

  1. Для блока Inport Va, установите Output data type равным fixdt(1, 8, 9/10, 0); для блока Inport Vb, установите Output data type равным int8.

  2. Для блока Data Type Conversion установите Integer rounding mode равным Simplest. Установите Output data type равным int16.

  3. Для блока Product установите Integer rounding mode равным Simplest. Установите Output data type равным int16.

  4. Установите параметр конфигурации Hardware Implementation > Device details > Signed integer division rounds to равным Zero.

  5. Установите значение Math and Data Types > Use division for fixed-point net slope computation Off.

  6. На вкладке Apps Simulink выберите 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. Это приближение вводит числовую неточность. Для примера использование той же модели с постоянными входами приводит к следующим результатам.

  7. В исходной модели с входами 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);

  8. В сгенерированном коде значение расчета наклона сети теперь является идеальным значением 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 запускает оптимизацию только в случаях, когда наклон сети является обратным целым числом. Эта настройка приводит к одинарному целому делению, чтобы обработать расчеты наклона сети.