exponenta event banner

Стратегии оптимизации

MATLAB ® Coder™ предлагает определенные оптимизации при созданииC/C++ код или MEX функции из кода MATLAB. Дополнительные сведения см. в разделе Оптимизация кодера MATLAB в разделе Сгенерированный код.

Для дальнейшей оптимизации созданного кода можно:

  • Адаптируйте код MATLAB.

  • Управление созданием кода с помощью объекта конфигурации из командной строки или диалогового окна параметров проекта.

Для оптимизации скорости выполнения генерируемого кода для этих условий необходимо выполнить следующие действия:

СостояниеДействие
У вас есть for- циклы, итерации которых независимы друг от друга.

Создание кода с параллельными контурами (parfor)

Автоматическая параллелизация для циклов в сгенерированном коде

В коде MATLAB имеются массивы переменного размера.Минимизация динамического выделения памяти
В коде MATLAB имеется несколько массивов переменного размера. Требуется динамическое выделение памяти для больших массивов и статическое выделение памяти для меньших массивов.Установить порог динамического выделения памяти
Необходимо вызвать созданную функцию по ссылке.Избегайте копирования данных входных данных функций в сгенерированном коде
В коде MATLAB вызываются небольшие функции.Встроенный код
Объем целевой памяти для созданного кода ограничен. Требуется встроить небольшие функции и создать отдельный код для больших функций.Управление встроением для точной настройки производительности и удобочитаемости сгенерированного кода
Не требуется создавать код для выражений, содержащих только константы.Вызовы функции сворачивания в константы
Операции цикла в коде MATLAB не зависят от индекса цикла.Минимизация избыточных операций в контурах
В коде MATLAB имеются целочисленные операции. Вы заранее знаете, что переполнение целого числа не происходит во время выполнения созданного кода.Отключить поддержку переполнения целых чисел
Вы заранее знаете, что Infs и NaNs не происходит во время выполнения созданного кода.Отключить поддержку неокончательных чисел
У вас есть for- циклы с несколькими итерациями.Разматывание для контуров
Устаревший код C/C + + уже оптимизирован для целевой среды.Интеграция внешнего/пользовательского кода
Требуется ускорить создание кода для основных векторных и матричных функций.Ускорение операций матрицы в сгенерированном автономном коде с помощью вызовов BLAS
Требуется ускорить создание кода для функций линейной алгебры.Ускорение линейной алгебры в сгенерированном автономном коде с помощью вызовов LAPACK
Требуется ускорить создание кода для функций быстрого преобразования Фурье (FFT).Ускорение быстрых преобразований Фурье в сгенерированном автономном коде с помощью вызовов библиотеки FFTW

Для оптимизации использования памяти сгенерированного кода при следующих условиях необходимо выполнить следующие действия:

СостояниеДействие
У вас есть if/else/elseif заявления или switch/case/otherwise операторов в коде MATLAB. Некоторые ветви инструкций в созданном коде не требуются.Запретить создание кода для неиспользуемых путей выполнения
Необходимо вызвать созданную функцию по ссылке.Избегайте копирования данных входных данных функций в сгенерированном коде
Для созданного кода недостаточно места в стеке.Использование пространства стека элементов управления
В коде MATLAB вызываются небольшие функции.Встроенный код
Объем целевой памяти для созданного кода ограничен. Требуется встроить небольшие функции и создать отдельный код для больших функций.Управление встроением для точной настройки производительности и удобочитаемости сгенерированного кода
Не требуется создавать код для выражений, содержащих только константы.Вызовы функции сворачивания в константы
Операции цикла в коде MATLAB не зависят от индекса цикла.Минимизация избыточных операций в контурах
В коде MATLAB имеются целочисленные операции. Вы заранее знаете, что переполнение целого числа не происходит во время выполнения созданного кода.Отключить поддержку переполнения целых чисел
Вы заранее знаете, что Inf-s и NaN-s не происходит во время выполнения созданного кода.Отключить поддержку неокончательных чисел
Код MATLAB содержит переменные, представляющие собой большие массивы или структуры. Переменные не используются повторно в созданном коде. Они сохранились. Необходимо проверить, влияет ли на производительность дополнительная память, необходимая для сохранения имен переменных больших массивов или структур.Повторное использование больших массивов и структур