exponenta event banner

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

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

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

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

Функции

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 в сгенерированном коде

Примеры и способы

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

Минимизация динамического выделения памяти

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

Максимальный размер массивов переменного размера

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

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

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

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

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

Петли

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

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

Укажите максимальное количество потоков в контурах parfor-loops

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

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

Удовольствие parfor-закольцовывает как parfor- циклы, выполняемые в одном потоке.

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

Установка библиотеки OpenMP для создания параллельных for-циклы на платформе macOS.

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

По возможности перемещайте операции за пределы цикла.

Разматывание для контуров

Разматывание контура управления.

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

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

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

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

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

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

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

Вызовы функции сворачивания в константы

Сократите время выполнения, заменив выражение константой в созданном коде.

Варианты с числовым краем

Отключить поддержку переполнения целых чисел или нефинитов

Повышение производительности за счет подавления генерации поддерживающего кода для обработки переполнения целых чисел или нефинитов.

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

Интеграция внешнего/пользовательского кода

Повысьте производительность за счет интеграции собственного оптимизированного кода.

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

Создание вызовов LAPACK для определенных функций линейной алгебры. Укажите библиотеку LAPACK для использования.

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

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

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

Создание вызовов библиотеки FFTW для быстрых преобразований Фурье. Укажите библиотеку FFTW.

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

Реализуйте методы класса обратного вызова библиотеки FFT и предоставляйте поддерживающий код C для предотвращения параллельного доступа к планированию FFTW.

Понятия

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

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

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

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

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

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

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

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

Назначения сокращения в петлях Parfor-Loops

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

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

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

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

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

Оптимизация набора мемов

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

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

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

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

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

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

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

Поиск неисправностей

Устранение неполадок в петлях Parfor-Loops

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

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

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

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

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

Характерные примеры