Советы по повышению эффективности сгенерированного кода

Настройки fimath для эффективного кода

Настройки по умолчанию для fimath объект предлагает наименьшую ошибку округления и предотвращает переполнение. Однако они могут привести к дополнительной логике в сгенерированном коде. Этими настройками по умолчанию являются:

  • RoundingMethod: Nearest

  • OverflowAction: Saturate

  • ProductMode: FullPrecision

  • SumMode: FullPrecision

Для более постного кода рекомендуется, чтобы вы совпадали с fimath настройки настроек процессора.

  • The KeepLSB настройка для ProductMode и SumMode моделирует поведение целочисленных операций в языке C. KeepMSB для ProductMode моделирует поведение многих устройств DSP.

  • Различные методы округления требуют различных объемов служебного кода. Установка RoundingMethod свойство к Floor, что эквивалентно усечению дополнения двух, обеспечивает наиболее эффективную реализацию округления для большинства операций. Для функции деления, наиболее эффективной RoundingMethod является Zero.

  • Стандартным методом для обработки переполнений является перенос с помощью арифметики по модулю. Другие методы обработки переполнения создают дорогостоящую логику. Рекомендуется, чтобы вы установили OverflowAction свойство к Wrap когда это возможно.

Замените функции на более эффективные реализации с фиксированной точкой

CORDIC

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

Интерполяционные таблицы

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

Деление

Деление часто не поддерживается оборудованием. Когда это возможно, лучше избегать операций деления.

Когда знаменатель является степенью двойки, можно переписать деление как операцию битового сдвига.

x/8

может быть переписан как

bitsra(x,3)

В другое время более эффективно реализовать деление как умножение на взаимное.

x/5

может быть переписан как

x*0.2