Общий рабочий процесс генерации кода для функций Statistics and Machine Learning Toolbox™, которые не являются объектными функциями моделей машинного обучения, совпадает с рабочим процессом, описанным в MATLAB® Coder™. Для получения дополнительной информации смотрите Начало работы с MATLAB Coder (MATLAB Coder). Чтобы изучить, как сгенерировать код для объектных функций моделей машинного обучения, смотрите Введение в Генерацию кода.
Этот пример кратко объясняет общий рабочий процесс генерации кода, как получено в итоге в этой блок-схеме:
Функция точки входа, также известная как или первичную функцию верхнего уровня, является функцией, которую вы задаете для генерации кода. Поскольку вы не можете вызвать функцию при использовании верхнего уровня codegen
(MATLAB Coder), необходимо задать функцию точки входа, которая вызывает включенные генерацией кода функции, и сгенерируйте код C/C++ для функции точки входа при помощи codegen
. Все функции в функции точки входа должны поддержать генерацию кода.
Добавьте %#codegen
директива компилятора (или прагма) к функции точки входа после функциональной подписи, чтобы указать, что вы намереваетесь сгенерировать код для алгоритма MATLAB. Добавление этой директивы дает Анализатору кода MATLAB команду помогать вам диагностировать и зафиксировать нарушения, которые вызвали бы ошибки во время генерации кода. Смотрите Проверку кода с Анализатором кода (MATLAB Coder).
Например, чтобы сгенерировать код, который оценивает межквартильный размах использования набора данных iqr
, задайте эту функцию.
function r = iqrCodeGen(x) %#codegen %IQRCODEGEN Estimate interquartile range % iqrCodeGen returns the interquartile range of the data x, % a single- or double-precision vector. r = iqr(x); end
varargin
как входной параметр. Для получения дополнительной информации смотрите Генерацию кода для Списков аргументов Переменной длины (MATLAB Coder) и Задайте Аргументы Переменного Размера для Генерации кода.Чтобы сгенерировать код C/C++, у вас должен быть доступ к компилятору, который сконфигурирован правильно. MATLAB Coder определяет местоположение и использует поддерживаемый, установленный компилятор. Просмотреть и изменить компилятор C по умолчанию, введите:
mex -setup
codegen
После подготовки вашего компилятора сгенерируйте код для функции точки входа при помощи codegen
(MATLAB Coder) или приложение MATLAB Coder. Чтобы изучить, как сгенерировать код с помощью приложения MATLAB Coder, смотрите, Генерируют MEX-функции при помощи Приложения MATLAB Coder (MATLAB Coder).
Чтобы сгенерировать код в командной строке, использовать codegen
(MATLAB Coder). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Задайте типы данных и размеры всех входных параметров функции точки входа, когда вы вызовете codegen
при помощи -args
опция.
Чтобы задать тип данных и точный размер входного массива, передайте выражение MATLAB, которое представляет множество значений определенным размером типа данных и массива. Например, чтобы указать, что сгенерированный код от iqrCodeGen.m
должен принять числовой вектор-столбец с двойной точностью с 100 элементами, введите:
testX = randn(100,1); codegen iqrCodeGen -args {testX} -report
-report
флаг генерирует отчет генерации кода. См. Отчеты Генерации кода (MATLAB Coder).
Задавать в наименьшем количестве одной из размерностей может иметь любую длину, использовать -args
опция с coder.typeof
(MATLAB Coder) можно следующим образом.
-args {coder.typeof(example_value, size_vector, variable_dims)}
example_value
, size_vector
, и variable_dims
задайте свойства входного массива, который может принять сгенерированный код.
Входной массив имеет совпадающий тип данных как значения в качестве примера в example_value
.
size_vector
размер массивов входного массива если соответствующий variable_dims
значением является false
.
size_vector
верхняя граница размера массивов если соответствующий variable_dims
значением является true
.
variable_dims
задает, имеет ли каждая размерность массива переменный размер или фиксированный размер. Значение true
(логическая единица) означает, что соответствующая размерность имеет переменный размер; значение false
(логический ноль) означает, что соответствующая размерность имеет фиксированный размер.
Определение входа переменного размера удобно, когда у вас есть данные с неизвестным количеством наблюдений во время компиляции. Например, чтобы указать, что сгенерированный код от iqrCodeGen.m
может принять числовой вектор-столбец с двойной точностью любой длины, введите:
testX = coder.typeof(0,[Inf,1],[1,0]); codegen iqrCodeGen -args {testX} -report
0 для
example_value
значение подразумевает, что типом данных является double
потому что double
тип числовых данных по умолчанию MATLAB. [Inf,1]
для size_vector
значение и [1,0]
для variable_dims
значение подразумевает, что размер первой размерности является переменным и неограниченным, и размер второго измерения фиксируется, чтобы быть 1.
Примечание
Спецификация переменных входных параметров размера может влиять на эффективность. Для получения дополнительной информации смотрите Выделение Управляющей памяти для Массивов Переменного Размера (MATLAB Coder).
Чтобы задать символьный массив, такой как поддерживаемые аргументы пары "имя-значение", задают символьный массив как постоянное использование coder.Constant
(MATLAB Coder). Например, предположите тот 'Name'
допустимый аргумент пары "имя-значение" для iqrCodeGen.m
, и соответствующее значение value
isnumeric. Затем войдите:
codegen iqrCodeGen -args {testX,coder.Constant('Name'),value} -report
Для получения дополнительной информации смотрите, Генерируют код С в Командной строке (MATLAB Coder) и Specify Properties Входных параметров функции Точки входа (MATLAB Coder).
MATLAB Coder может сгенерировать код для этих типов:
MEX (Исполняемый файл MATLAB) функция
Автономный код C/C++
Автономный код C/C++ скомпилирован к статической библиотеке
Автономный код C/C++ скомпилирован к динамически подключаемой библиотеке
Автономный код C/C++ скомпилирован к исполняемому файлу
Можно задать тип сборки с помощью -config
опция codegen
(MATLAB Coder). Для получения дополнительной информации об установке опций генерации кода смотрите, Конфигурируют Настройки Сборки (MATLAB Coder).
По умолчанию, codegen
генерирует MEX-функцию. MEX-функция является программой C/C++, которая является исполняемым файлом из MATLAB. Можно использовать MEX-функцию, чтобы ускорить алгоритмы MATLAB и протестировать сгенерированный код на функциональность и проблемы во время выполнения. Для получения дополнительной информации смотрите Ускорение алгоритма MATLAB (MATLAB Coder) и Зачем тестировать MEX-функции в MATLAB? (MATLAB Coder).
Можно использовать -report
отметьте, чтобы представить отчет генерации кода. Этот отчет помогает вам отладить проблемы генерации кода и просмотреть сгенерированный код C/C++. Для получения дополнительной информации см. Отчеты Генерации кода (MATLAB Coder).
Протестируйте MEX-функцию, чтобы проверить, что сгенерированный код обеспечивает ту же функциональность как оригинальный код MATLAB. Чтобы выполнить этот тест, запустите MEX-функцию с помощью тех же входных параметров, что вы раньше запускали оригинальный код MATLAB, и затем сравнивали результаты. Выполнение MEX-функции в MATLAB прежде, чем сгенерировать автономный код также позволяет вам обнаружить и зафиксировать ошибки времени выполнения, которые намного более трудно диагностировать в сгенерированном автономном коде. Для получения дополнительной информации смотрите Зачем тестировать MEX-функции в MATLAB? (MATLAB Coder).
Передайте некоторые данные, чтобы проверить ли iqr
, iqrCodeGen
, и iqrCodeGen_mex
возвратите тот же межквартильный размах.
testX = randn(100,1); r = iqr(testX); r_entrypoint = iqrCodeGen(testX); r_mex = iqrCodeGen_mex(testX);
Сравните выходные параметры при помощи isequal
.
isequal(r,r_entrypoint,r_mex)
isequal
возвращает логическую единицу, (TRUE), если все входные параметры равны.
Можно также проверить MEX-функцию с помощью тестового файла и coder.runTest
(MATLAB Coder). Для получения дополнительной информации см. Код Тестирования, Сгенерированный из кода MATLAB (MATLAB Coder).
codegen
(MATLAB Coder)