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 содержит переменные, представляющие собой большие массивы или структуры. Переменные не используются повторно в созданном коде. Они сохранились. Необходимо проверить, влияет ли на производительность дополнительная память, необходимая для сохранения имен переменных больших массивов или структур. | Повторное использование больших массивов и структур |