Скорость выполнения

Улучшите скорость выполнения сгенерированного кода C/C + +

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

Синхронизация многопоточного доступа к планированию FFTW в сгенерированном автономном коде

Реализуйте методы класса коллбэка библиотеки FFT и предоставьте поддерживающий код С, чтобы предотвратить параллельный доступ к планированию FFTW.

Концепции

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

Оптимизируйте скорость выполнения или использование памяти сгенерированного кода.

Динамическое выделение памяти и эффективность

Динамическое выделение памяти может замедлить скорость выполнения.

Ускорение алгоритма с использованием параллельных циклов для циклов (parfor)

Сгенерируйте MEX-функции для parfor-циклы.

Классификация переменных в циклы parfor

Переменные внутри parfor- циклы классифицируются как циклы, нарезанные, широковещательные, редукционные или временные.

Назначения сокращения в циклах parfor

Переменная сокращения накапливает значение, которое зависит от всех итераций цикла вместе.

MATLAB CODER в сгенерированном коде

Чтобы улучшить эффективность сгенерированного кода, генератор кода использует оптимизации.

Оптимизация memcpy

Генератор кода оптимизирует сгенерированный код при помощи memcpy.

Оптимизация мемсета

Генератор кода оптимизирует сгенерированный код при помощи memset.

Вызовы LAPACK в сгенерированном коде

Вызовы функций LAPACK улучшают скорость выполнения кода, сгенерированного для определенных линейных алгебраических функций.

Вызовы BLAS в сгенерированном коде

Вызовы функций BLAS улучшают скорость выполнения кода, сгенерированного для определенных низкоуровневых векторных и матричных операций.

Сгенерируйте код, который использует размещение массива Row-Major

Сгенерируйте код C/C + + с элементами строк, непрерывно хранящимися в памяти.

Поиск и устранение проблем

Поиск и устранение проблем с циклами parfor

Диагностируйте ошибки для генерации кода parfor-циклы.

MEX, сгенерированный на платформе macOS, остается загруженным в памяти

Диагностируйте проблемы, возникающие при исходном MATLAB® код содержит глобальные или постоянные переменные, которые доступны из тела parfor-цикл.

Решите проблему: массив или шаблон переменного доступа, не подходящий для параллельного выполнения

Диагностируйте проблему автоматического отказа параллелизации, вызванного шаблоном доступа к памяти внутри for цикл.

Рекомендуемые примеры