Общий рабочий процесс создания кода для функций Toolbox™ статистики и машинного обучения, которые не являются объектными функциями моделей машинного обучения, совпадает с рабочим процессом, описанным в MATLAB ® Coder™. Для получения дополнительной информации см. Начало работы с кодером MATLAB (MATLAB Coder). Сведения о создании кода для объектных функций моделей машинного обучения см. в разделе Введение в создание кода.
В этом примере кратко объясняется общий рабочий процесс создания кода, обобщенный на этой блок-схеме:
![]()
Функция начального уровня, также известная как функция верхнего уровня или первичная функция, является функцией, определяемой для создания кода. Потому что вы не можете вызвать какую-либо функцию на верхнем уровне с помощью codegen (MATLAB Coder), необходимо определить функцию точки входа, которая вызывает функции с поддержкой генерации кода, и создать код C/C + + для функции точки входа с помощью codegen. Все функции в рамках функции начального уровня должны поддерживать генерацию кода.
Добавить %#codegen директива компилятора (или прагматика) для функции начального уровня после сигнатуры функции, указывающая, что предполагается создать код для алгоритма MATLAB. Добавление этой директивы дает команду анализатору кода MATLAB помочь в диагностике и устранении нарушений, которые могут привести к ошибкам при создании кода. См. раздел Проверка кода с помощью анализатора кода (кодер MATLAB).
Например, чтобы создать код, который оценивает межквартильный диапазон набора данных, используя 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) и Указание аргументов переменного размера для создания кода.Для создания кода C/C + + необходимо иметь доступ к компилятору, настроенному правильно. MATLAB Coder находит и использует поддерживаемый установленный компилятор. Для просмотра и изменения компилятора C по умолчанию введите:
mex -setupcodegenПосле настройки компилятора создайте код для функции начального уровня с помощью codegen (MATLAB Coder) или приложение MATLAB Coder. Чтобы узнать, как создать код с помощью приложения MATLAB Coder, см. раздел Создание функций MEX с помощью приложения MATLAB Coder App (MATLAB Coder).
Чтобы создать код в командной строке, используйте codegen (Кодер MATLAB). Поскольку C и C++ являются статически типизированными языками, необходимо определить свойства всех переменных в функции точки входа во время компиляции. Укажите типы данных и размеры всех входов функции точки входа при вызове codegen с помощью -args вариант.
Чтобы указать тип данных и точный размер входного массива, передайте выражение MATLAB, представляющее набор значений с определенным типом данных и размером массива. Например, чтобы указать, что созданный код из iqrCodeGen.m должен принимать вектор столбца с двойной точностью, содержащий 100 элементов, введите:
testX = randn(100,1); codegen iqrCodeGen -args {testX} -report
-report флаг генерирует отчет о создании кода. См. Отчеты по генерации кода (кодер MATLAB).
Чтобы указать, что хотя бы один из размеров может иметь любую длину, используйте -args вариант с coder.typeof (Кодер MATLAB) следующим образом.
-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 (логический 1) означает, что соответствующее измерение имеет переменный размер; значение false (логический 0) означает, что соответствующее измерение имеет фиксированный размер.
Указание ввода переменного размера удобно при наличии данных с неизвестным количеством наблюдений во время компиляции. Например, чтобы указать, что созданный код из 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.Constant (Кодер MATLAB). Например, предположим, что 'Name' является допустимым аргументом пары имя-значение для iqrCodeGen.mи соответствующее значение value является числовым. Затем введите:
codegen iqrCodeGen -args {testX,coder.Constant('Name'),value} -report
Дополнительные сведения см. в разделах Создание кода C в командной строке (кодер MATLAB) и Указание свойств входов функции точки входа (кодер MATLAB).
Кодер MATLAB может генерировать код для следующих типов:
Функция MEX (MATLAB Executable)
Автономный код C/C + +
Автономный код C/C + +, скомпилированный в статическую библиотеку
Автономный код C/C + +, скомпилированный в динамически связанную библиотеку
Автономный код C/C + +, скомпилированный в исполняемый файл
Тип сборки можно указать с помощью -config вариант codegen (Кодер MATLAB). Дополнительные сведения о настройке параметров генерации кода см. в разделе Настройка параметров сборки (кодер MATLAB).
По умолчанию codegen генерирует функцию MEX. Функция MEX - это программа C/C + +, выполняемая из MATLAB. Функцию MEX можно использовать для ускорения алгоритмов MATLAB и тестирования сгенерированного кода на наличие проблем функциональности и времени выполнения. Дополнительные сведения см. в разделах Ускорение алгоритма MATLAB (кодер MATLAB) и Зачем тестировать функции MEX в MATLAB? (Кодер MATLAB).
Вы можете использовать -report для создания отчета о создании кода. Этот отчет помогает отладить проблемы создания кода и просмотреть созданный код C/C + +. Для получения дополнительной информации см. Отчеты по генерации кода (кодер MATLAB).
Протестируйте функцию MEX для проверки того, что сгенерированный код обеспечивает те же функциональные возможности, что и исходный код MATLAB. Для выполнения этого теста запустите функцию MEX, используя те же входные данные, которые использовались для запуска исходного кода MATLAB, а затем сравните результаты. Запуск функции MEX в MATLAB перед созданием автономного кода также позволяет обнаруживать и исправлять ошибки времени выполнения, которые гораздо сложнее диагностировать в сгенерированном автономном коде. Дополнительные сведения см. в разделе Зачем тестировать функции MEX в MATLAB? (Кодер MATLAB).
Передать некоторые данные, чтобы проверить, 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 возвращает логический 1 (true), если все входы равны.
Можно также проверить функцию MEX с помощью тестового файла и coder.runTest (Кодер MATLAB). Для получения дополнительной информации см. Тестирование кода, сгенерированного из кода MATLAB (кодер MATLAB).
codegen (Кодер MATLAB)