Функция начального уровня - это функция верхнего уровня MATLAB ®, из которой создается код. Если входная функция имеет входы, необходимо указать свойства входов для создания MEX-функции. В этом случае сгенерированная функция MEX работает только с сигнатурой функции точки входа, указанной при создании кода.
Если функция начального уровня поддерживает несколько сигнатур, можно создать одну функцию MEX вместо создания отдельной функции MEX для каждой сигнатуры. Сгенерированная функция MEX работает с несколькими сигнатурами, предоставляемыми во время генерации кода.
Используя функции MEX с несколькими знаками, можно:
Создайте одну функцию MEX, поддерживающую несколько сигнатур, указанных в функции точки входа.
Сократите издержки, связанные с созданием и использованием отдельных функций MEX для каждой сигнатуры функции начального уровня.
Достижение функционального поведения MATLAB в сгенерированной функции MEX.
Чтобы создать функцию MEX с несколькими знаками, рассмотрите эту функцию. myAdd:
function y = myAdd(a,b) %#codegen y = a+b; end
myAdd который работает с тремя различными типами данных: double, int8, и vector of doubles. Укажите три аргумента как: {1,2}, {int8(2), int8(3)}, и {1:10, 1:10}. Указывается функция точки входа, за которой следует -args для каждой подписи функции точки входа.Создание кода для myAdd в командной строке MATLAB выполните эту команду codegen команда:
codegen -config:mex myAdd.m -args {1,2} -args {int8(2),int8(3)} -args {1:10,1:10} -report
myAdd_mex для подписей, указанных в codegen команда.В командной строке вызовите сгенерированную функцию MEX myAdd_mex. Убедитесь, что переданные значения myAdd_mex соответствуют входным свойствам, указанным в codegen команда.
myAdd_mex(3,4)
ans =
7myAdd_mex(int8(5),int8(6))
ans = int8 11
myAdd_mex(1:10,2:11)
ans =
3 5 7 9 11 13 15 17 19 21Выполнение функции MATLAB myAdd с этими входными значениями выдает один и тот же выходной сигнал. Эти тестовые примеры подтверждают, что myAdd и myAdd_mex имеют то же поведение.
Во время создания кода можно также создать одну функцию MEX для нескольких функций точки входа, содержащих несколько сигнатур.
Предположим, что у вас есть две функции точки входа myAdd и myMul. Первая функция точки входа, myAdd возвращает сумму двух значений:
function y = myAdd(a,b) %#codegen y = a+b; end
Вторая функция точки входа, myMul возвращает умножение двух значений:
function y = myMul(a,b) %#codegen y = a*b; end
Указывается функция точки входа, за которой следует -args для каждой подписи функции точки входа. Учтите, что функция myAdd поддерживает типы ввода double и int8. Укажите следующие аргументы: {1,2} и {int8(1), int8(2)}. Аналогично, если функция myMul поддерживает типы ввода double и int16, укажите следующие аргументы: {1,2} и {int16(1), int16(2)}. Теперь можно создать функцию MEX из функций начального уровня.
Создание кода для myAdd и myMul функции, в командной строке MATLAB, выполните это codegen команда:
codegen -config:mex myAdd.m -args {1,2} -args {int8(1),int8(2)} myMul.m -args {1,2} -args {int16(1),int16(2)} -o 'myMath' -report
Этот синтаксис генерирует одну функцию MEX myMath для всех подписей, указанных в codegen команда.
Выходные значения можно проверить с помощью созданной функции MEX. myMath в командной строке. Убедитесь, что переданные значения myMath соответствует входным свойствам, указанным перед созданием кода.
myMath("myAdd",3,4)ans =
7myMath("myAdd",int8(5),int8(6))ans =
int8
11myMath("myMul",3,4)ans =
12myMath("myMul",int16(5),int16(6))ans =
int16
30Выполнение функции MATLAB myAdd и myMul с этими входными значениями выдает один и тот же выходной сигнал. Эти тестовые примеры подтверждают, что myAdd, myMulи сгенерированная функция MEX myMath имеют то же поведение.
Генерация MEX с несколькими знаками не поддерживает:
fiaccel (Конструктор фиксированных точек)
-float2fixed конфигурация.
Программное определение входных параметров. См. раздел Программное определение входных свойств в файле MATLAB.