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

Настройки 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