MATLAB® Coder™ вводит определенные оптимизации при генерации C/C++
код или MEX
функций из кода MATLAB. Для получения дополнительной информации смотрите Оптимизации MATLAB CODER в Сгенерированном коде.
Чтобы оптимизировать свой сгенерированный код дальше, можно:
Адаптируйте код MATLAB.
Управляйте генерацией кода с помощью объекта строения из командной строки или диалогового окна настроек проекта.
Чтобы оптимизировать скорость выполнения сгенерированного кода, для этих условий выполните следующие действия при необходимости:
Состояние | Действие |
---|---|
У вас есть for - циклы, итерации которых независимы друг от друга. | Сгенерируйте код с параллельными циклами для циклов (parfor) |
В коде MATLAB есть массивы переменного размера. | Минимизируйте динамическое выделение памяти |
У вас есть несколько массивов переменного размера в коде MATLAB. Вы хотите динамическое выделение памяти для больших массивов и статическое выделение для небольших таковых. | Установите динамический порог выделения памяти |
Вы хотите, чтобы ваша сгенерированная функция вызывалась по ссылке. | Избегайте копий данных входных параметров функции в сгенерированном коде |
Вы вызываете небольшие функции в коде MATLAB. | Встроенный код |
У вас ограничена целевая память для вашего сгенерированного кода. Вы хотите встроить маленькие функции и сгенерировать отдельный код для больших таковых. | Управление инкрустацией для тонкой настройки эффективности и читаемости сгенерированного кода |
Вы не хотите генерировать код для выражений, которые содержат только константы. | Сворачивание вызовов функций в константы |
У вас есть операции цикла в коде MATLAB, которые не зависят от индекса цикла. | Минимизация избыточных операций в циклах |
У вас есть целочисленные операции в коде MATLAB. Вы заранее знаете, что целочисленное переполнение не происходит во время выполнения вашего сгенерированного кода. | Отключите поддержку целочисленного переполнения |
Вы заранее знаете, что Inf s и NaN s не происходит во время выполнения вашего сгенерированного кода. | Отключите поддержку нефинитовых чисел |
У вас есть for -циклы с несколькими итерациями. | Развертывание циклов for-Loops |
У вас уже есть устаревший код C/C + +, оптимизированный для вашего целевого окружения. | Интеграция внешнего/пользовательского кода |
Вы хотите ускорить код, сгенерированный для основных векторных и матричных функций. | Ускорение матричных операций в сгенерированном автономном коде при помощи вызовов BLAS |
Вы хотите ускорить код, сгенерированный для линейных алгебраических функций. | Ускорение линейной алгебры в сгенерированном автономном коде при помощи вызовов LAPACK |
Вы хотите ускорить генерацию кода для быстрого преобразования Фурье (БПФ) функций. | Ускорение быстрых преобразований Фурье в сгенерированном автономном коде при помощи вызовов библиотеки FFTW |
Чтобы оптимизировать использование памяти сгенерированного кода, для этих условий выполните следующие действия при необходимости:
Состояние | Действие |
---|---|
У вас есть if/else/elseif операторы или switch/case/otherwise операторы в коде MATLAB. Вам не требуются некоторые ветви операторов в сгенерированном коде. | Предотвратите генерацию кода для неиспользованных путей выполнения |
Вы хотите, чтобы ваша сгенерированная функция вызывалась по ссылке. | Избегайте копий данных входных параметров функции в сгенерированном коде |
У вас есть ограниченное пространство стека для вашего сгенерированного кода. | Управление использованием пространства стека |
Вы вызываете небольшие функции в коде MATLAB. | Встроенный код |
У вас ограничена целевая память для вашего сгенерированного кода. Вы хотите встроить маленькие функции и сгенерировать отдельный код для больших таковых. | Управление инкрустацией для тонкой настройки эффективности и читаемости сгенерированного кода |
Вы не хотите генерировать код для выражений, которые содержат только константы. | Сворачивание вызовов функций в константы |
У вас есть операции цикла в коде MATLAB, которые не зависят от индекса цикла. | Минимизация избыточных операций в циклах |
У вас есть целочисленные операции в коде MATLAB. Вы заранее знаете, что целочисленное переполнение не происходит во время выполнения вашего сгенерированного кода. | Отключите поддержку целочисленного переполнения |
Вы заранее знаете, что Inf -s и NaN -s не происходит во время выполнения вашего сгенерированного кода. | Отключите поддержку нефинитовых чисел |
Ваш код MATLAB имеет переменные, которые являются большими массивами или структурами. Ваши переменные не используются повторно в сгенерированном коде. Они сохранились. Вы хотите увидеть, влияет ли на эффективность дополнительная память, необходимая для сохранения имен переменных больших массивов или структур. | Повторное использование больших массивов и структур |