exponenta event banner

Общий поток операций создания кода

Общий рабочий процесс создания кода для функций 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 -setup
Дополнительные сведения см. в разделе Изменение компилятора по умолчанию.

Создать код с помощью codegen

После настройки компилятора создайте код для функции начального уровня с помощью 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).

См. также

(Кодер MATLAB)

Связанные темы