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

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

Чтобы оптимизировать свой сгенерированный код дальше, можно:

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

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

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

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

Сгенерируйте код с параллельными циклами для циклов (parfor)

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

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

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

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