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

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

Используйте опции генерации кода и оптимизацию, чтобы улучшить скорость выполнения сгенерированного кода. Можно изменить или отключить динамическое выделение памяти, которое может влиять на скорость выполнения. Параллелизированный код может быть сгенерирован при помощи parfor циклы. Когда доступно, используйте в своих интересах существующий ранее оптимизированный код С и специализированные библиотеки, чтобы ускорить выполнение.

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

Функции

parforПараллельный for- цикл
coder.varsizeОбъявите данные переменного размера
coder.constСверните выражения в константы в сгенерированном коде
coder.inlineУправляйте встраиванием в сгенерированном коде
coder.unrollРазверните for- цикл путем создания копии тела цикла для каждой итерации цикла
coder.cevalВызовите внешнюю функцию C/C++

Классы

coder.LAPACKCallbackАбстрактный класс для определения библиотеки LAPACK и заголовочного файла LAPACKE для LAPACK вызывает в сгенерированном коде
coder.BLASCallbackАбстрактный класс для определения библиотеки BLAS и заголовка CBLAS и информации о типе данных для BLAS вызывает в сгенерированном коде
coder.fftw.StandaloneFFTW3Interface Абстрактный класс для определения библиотеки FFTW для FFTW вызывает в сгенерированном коде

Примеры и руководства

Массивы переменного размера

Минимизируйте динамическое выделение памяти

Улучшите время выполнения путем минимизации динамического выделения памяти.

Обеспечьте максимальный размер для массивов Переменного Размера

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

Отключите динамическое выделение памяти во время генерации кода

Отключите динамическое выделение памяти в приложении или в командной строке.

Установите порог динамического выделения памяти

Отключите динамическое выделение памяти для массивов меньше, чем определенный размер.

Циклы

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

Сгенерируйте цикл, который запускает параллельно на общей памяти многожильные платформы.

Задайте Максимальное количество Потоков в циклах parfor

Сгенерируйте MEX-функцию, которая выполняет итерации цикла параллельно на определенном количестве доступных ядер.

Управляйте Компиляцией циклов parfor

Обработайте parfor- циклы как parfor- циклы, которые работают на одном потоке.

Установите Библиотеку OpenMP по macOS Платформе

Установите библиотеку OpenMP, чтобы сгенерировать параллельный for- циклы на macOS платформе.

Минимизируйте избыточные операции в циклах

Операции пересылки за пределами цикла, если это возможно.

Разверните циклы for

Разворачивающий цикл управления.

Вызовы функции

Избегайте копий данных входных параметров функции в сгенерированном коде

Сгенерируйте код, который передает входные параметры ссылкой.

Встроенный код

Встраивание устраняет издержки вызова функции, заменяя вызов функции на тело функции.

Управляйте встраиванием

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

Сверните вызовы функции в константы

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

Числовые случаи ребра

Отключите поддержку Integer Overflow или Nonfinites

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

Внешняя интеграция кода

Объединяйтесь Внешний / Пользовательский код

Улучшайте производительность путем интеграции собственного оптимизированного кода.

Ускорьте линейную алгебру в сгенерированном автономном коде при помощи вызовов LAPACK

Сгенерируйте призывы LAPACK к определенным функциям линейной алгебры. Задайте библиотеку LAPACK, чтобы использовать.

Ускорьте Матричные операции в сгенерированном автономном коде при помощи вызовов BLAS

Сгенерируйте призывы BLAS к определенным низкоуровневым операциям над матрицей. Задайте библиотеку BLAS, чтобы использовать.

Ускорьте быстрые преобразования Фурье в сгенерированном автономном коде при помощи вызовов библиотеки FFTW

Сгенерируйте библиотеку FFTW, призывает к быстрым преобразованиям Фурье. Задайте библиотеку FFTW.

Синхронизируйте многопоточный доступ к FFTW, планирующему в сгенерированном автономном коде

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

Концепции

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

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

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

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

Ускорение алгоритма Используя параллельные циклы for (parfor)

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

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

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

Присвоения сокращения в циклах parfor

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

Оптимизация MATLAB Coder в сгенерированном коде

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

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

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

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

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

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

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

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

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

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

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

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

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

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

MEX, Сгенерированный на macOS Платформе, Остается Загруженным в Памяти

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

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