Используйте опции генерации кода и оптимизации, чтобы улучшить скорость выполнения сгенерированного кода. Вы можете изменять или отключать динамическое выделение памяти, что может повлиять на скорость выполнения. Параллелизированный код может быть сгенерирован при помощи parfor
циклы. При наличии используйте преимущества уже существующего оптимизированного кода С и специализированных библиотек, чтобы ускорить выполнение.
Для получения дополнительной информации о том, как оптимизировать код для определенных условий, смотрите Стратегии Оптимизации.
parfor | Параллельные for - цикл |
coder.varsize | Объявить данные переменного размера |
coder.const | Сложите выражения в константы в сгенерированном коде |
coder.inline | Управляйте встраиванием определенной функции в сгенерированный код |
coder.loop.parallelize | Отключите автоматическую параллелизацию for цикл |
coder.unroll | Разблокируйте for -loop путем создания копии тела цикла для каждой итерации цикла |
coder.ceval | Вызов внешней функции C/C + + |
coder.LAPACKCallback | Абстрактный класс для определения библиотеки LAPACK и файла заголовка LAPACKE для вызовов LAPACK в сгенерированном коде |
coder.BLASCallback | Абстрактный класс для определения библиотеки BLAS, заголовка CBLAS и информации о типе данных для вызовов BLAS в сгенерированном коде |
coder.fftw.StandaloneFFTW3Interface | Абстрактный класс для определения библиотеки FFTW для вызовов FFTW в сгенерированном коде |
Минимизируйте динамическое выделение памяти
Улучшите время выполнения путем минимизации динамического выделения памяти.
Обеспечьте максимальный размер для массивов переменного размера
Используйте методы, чтобы помочь генератору кода определить верхнюю границу для массива переменного размера.
Отключите динамическое выделение памяти во время генерации кода
Отключите динамическое выделение памяти в приложении или в командной строке.
Установите динамический порог выделения памяти
Отключите динамическое выделение памяти для массивов размером меньше определенного.
Сгенерируйте код с параллельными циклами для циклов (parfor)
Сгенерируйте цикл, который запускается параллельно на многоядерных платформах с общей памятью.
Задайте максимальное количество резьб в циклы parfor
Сгенерируйте MEX-функцию, которая выполняет итерации цикла параллельно на определенном количестве доступных ядер.
Управление компиляцией циклов parfor
Лечите parfor
-циклы как parfor
- циклы, выполняемые в одном потоке.
Установка библиотеки OpenMP на платформу macOS
Установите библиотеку OpenMP, чтобы сгенерировать параллельные for
-циклы на платформе macOS.
Минимизация избыточных операций в циклах
Перемещайте операции за пределы цикла, когда это возможно.
Развертывание циклов for-Loops
Цикл управления.
Автоматическая параллелизация циклов в сгенерированном коде
Итерации параллельных for
циклы могут запускаться одновременно на нескольких ядрах на целевом компьютере.
Избегайте копий данных входных параметров функции в сгенерированном коде
Сгенерируйте код, который передает входные параметры по ссылке.
Управление инкрустацией для тонкой настройки эффективности и читаемости сгенерированного кода
Inlining устраняет накладные расходы на вызовы функций, но может создать больший код C/C + + и снизить читаемость кода.
Сворачивание вызовов функций в константы
Сократите время выполнения путем замены выражения константой в сгенерированном коде.
Отключите поддержку целочисленного переполнения или нефинитов
Улучшите эффективность путем подавления генерации поддерживающего кода для обработки целочисленного переполнения или нефинитов.
Интеграция внешнего/пользовательского кода
Улучшите эффективность, интегрировав свой собственный оптимизированный код.
Ускорение линейной алгебры в сгенерированном автономном коде при помощи вызовов LAPACK
Сгенерируйте вызовы LAPACK для определенных линейных алгебр-функций. Укажите библиотеку LAPACK для использования.
Ускорение матричных операций в сгенерированном автономном коде при помощи вызовов BLAS
Сгенерируйте вызовы BLAS для определенных низкоуровневых матричных операций. Укажите библиотеку BLAS для использования.
Сгенерируйте вызовы библиотеки FFTW для быстрых преобразований Фурье. Укажите библиотеку FFTW.
Синхронизация многопоточного доступа к планированию FFTW в сгенерированном автономном коде
Реализуйте методы класса коллбэка библиотеки FFT и предоставьте поддерживающий код С, чтобы предотвратить параллельный доступ к планированию FFTW.
Оптимизируйте скорость выполнения или использование памяти сгенерированного кода.
Динамическое выделение памяти и эффективность
Динамическое выделение памяти может замедлить скорость выполнения.
Ускорение алгоритма с использованием параллельных циклов для циклов (parfor)
Сгенерируйте MEX-функции для parfor
-циклы.
Классификация переменных в циклы parfor
Переменные внутри parfor
- циклы классифицируются как циклы, нарезанные, широковещательные, редукционные или временные.
Назначения сокращения в циклах parfor
Переменная сокращения накапливает значение, которое зависит от всех итераций цикла вместе.
MATLAB CODER в сгенерированном коде
Чтобы улучшить эффективность сгенерированного кода, генератор кода использует оптимизации.
Генератор кода оптимизирует сгенерированный код при помощи memcpy
.
Генератор кода оптимизирует сгенерированный код при помощи memset
.
Вызовы LAPACK в сгенерированном коде
Вызовы функций LAPACK улучшают скорость выполнения кода, сгенерированного для определенных линейных алгебраических функций.
Вызовы BLAS в сгенерированном коде
Вызовы функций BLAS улучшают скорость выполнения кода, сгенерированного для определенных низкоуровневых векторных и матричных операций.
Сгенерируйте код, который использует размещение массива Row-Major
Сгенерируйте код C/C + + с элементами строк, непрерывно хранящимися в памяти.
Поиск и устранение проблем с циклами parfor
Диагностируйте ошибки для генерации кода parfor
-циклы.
MEX, сгенерированный на платформе macOS, остается загруженным в памяти
Диагностируйте проблемы, возникающие при исходном MATLAB® код содержит глобальные или постоянные переменные, которые доступны из тела parfor
-цикл.
Решите проблему: массив или шаблон переменного доступа, не подходящий для параллельного выполнения
Диагностируйте проблему автоматического отказа параллелизации, вызванного шаблоном доступа к памяти внутри for
цикл.