Generate Code for Functions with Multiple Signatures
An entry-point function is a top-level MATLAB® function from which you generate code. If your entry-point function has inputs, you must specify the properties of the inputs to generate code. In this case, the generated code works only with the signature of the entry-point function that you specify during code generation.
If your entry-point function supports multiple signatures, you can generate a single MEX function instead of generating a separate MEX function for each signature. Additionally, you can also generate corresponding C/C++ code for each signature. The generated code works with the multiple signatures provided during code generation.
By using multisignature functionality, you can:
Generate code that supports the multiple signatures that you specify in the entry-point function.
Reduce the overhead involved in generating and using separate MEX functions for each signature of your entry-point function.
Achieve MATLAB function-like behavior in the generated MEX function.
Generate Multisignature MEX Function for a Single Entry-Point Function
To generate a multisignature MEX (polymorphic MEX) function, consider this function
myAdd:
function y = myAdd(a,b) %#codegen y = a+b; end
myAdd that works with three different data types:
double, int8, and vector of
doubles. Specify the three arguments as: {1,2},
{int8(2), int8(3)}, and {1:10, 1:10}. You specify
the entry-point function followed by a -args for each signature of the
entry-point function.To generate code for myAdd function, at the MATLAB command prompt,
run this codegen
command:
codegen -config:mex myAdd.m -args {1,2} -args {int8(2),int8(3)} -args {1:10,1:10} -report
myAdd_mex for the signatures
specified in the codegen command.At the command prompt, call the generated MEX function myAdd_mex.
Make sure that the values you pass to myAdd_mex match the input
properties that you specified in the codegen command.
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 21Running the MATLAB function myAdd with these input values produces the same
output. These test cases verify that myAdd and
myAdd_mex have the same behavior.
Generate Multisignature MEX Function for Multiple Entry-Point Functions
During code generation, you can also generate one MEX function for multiple entry-point functions containing multiple signatures.
Suppose that you have two entry-point functions myAdd and
myMul. The first entry-point function, myAdd
returns the sum of two values:
function y = myAdd(a,b) %#codegen y = a+b; end
The second entry-point function, myMul returns the multiplication
of two values:
function y = myMul(a,b) %#codegen y = a*b; end
You specify the entry-point function followed by a -args for each
signature of the entry-point function. Consider that the function
myAdd supports the input types double and
int8. Specify these arguments as: {1,2} and
{int8(1), int8(2)}. Similarly, if the function
myMul supports the input types double and
int16, specify these arguments as: {1,2} and
{int16(1), int16(2)}. Now, you can generate a MEX function from your
entry-point functions.
To generate code for myAdd and myMul
functions, at the MATLAB command prompt, run this codegen command:
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
This syntax generates one MEX function myMath for
all the signatures that you specified in the
codegen command.
You can verify the output values by using the generated MEX function
myMath at the command prompt. Make sure that the values you pass to
myMath match the input properties that you specified before code
generation.
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
30Running the MATLAB function myAdd and myMul with these
input values produces the same output. These test cases verify that
myAdd, myMul, and the generated MEX function
myMath have the same behavior.
Limitations
Multisignature MEX (polymorphic MEX) generation does not support:
fiaccel(Fixed-Point Designer)-float2fixedconfiguration.Defining input parameters programmatically. See Specify Input Types Using assert Statements in MATLAB Code.