Советы для того, чтобы сделать сгенерированный код более эффективным

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

Настройки по умолчанию fimath объект:

  • RoundingMethod: Nearest

  • OverflowAction: Saturate

  • ProductMode: FullPrecision

  • SumMode: FullPrecision

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

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

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

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

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

CORDIC

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

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

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

Деление

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

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

x/8

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

bitsra(x,3)

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

x/5

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

x*0.2