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

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

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

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

Функции

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

Классы

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

Темы

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

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

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

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

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

Оптимизируйте неявное расширение в сгенерированном коде

Неявное расширение в сгенерированном коде включено по умолчанию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Оптимизируйте динамический массив доступ

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

Размещение массивов

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

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

Циклы

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

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

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

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

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

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

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

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

Задайте максимальное количество потоков, чтобы идти параллельно циклы for в сгенерированном коде

Идите параллельно for- циклы на определенном количестве доступных ядер в сгенерированном коде.

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

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

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

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

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

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

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

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

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

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

Автоматически параллелизируйте циклы for в сгенерированном коде

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

Сгенерируйте код SIMD для функций MATLAB

Улучшите скорость выполнения использования сгенерированного кода Intel SSE и Intel технология AVX.

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

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

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

Управляйте встраиванием, чтобы подстроить эффективность и удобочитаемость сгенерированного кода

Встраивание устраняет издержки вызовов функции, но может произвести больший код C/C++ и уменьшать удобочитаемость кода.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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