Use coder.const
with Extrinsic Function Calls
You can use coder.const
to fold a function call into a
constant in the generated code. The code generator evaluates the function call and
replaces it with the result of the evaluation. If you make the function call extrinsic,
the function call is evaluated by MATLAB® instead of by the code generator. Use coder.const
with an extrinsic function call to:
Reduce code generation time, especially for constant-folding of computationally intensive expressions.
Force constant-folding when
coder.const
is unable to constant-fold.
To make an individual function call extrinsic, use feval
. To make
all calls to a particular function extrinsic, use
coder.extrinsic
.
Reduce Code Generation Time by Using coder.const
with feval
Consider this function that folds a computationally intensive expression
besselj(3, zTable)
into a
constant:
function j = fcn(z) zTable = coder.const(0:0.01:100); jTable = coder.const(besselj(3,zTable)); j = interp1(zTable,jTable,z); end
To make code generation of fcn
faster, evaluate
besselj(3, zTable)
in MATLAB by using
feval
.
function j = fcn(z) zTable = coder.const(0:0.01:100); jTable = coder.const(feval('besselj',3,zTable)); j = interp1(zTable,jTable,z); end
Force Constant-Folding by Using coder.const
with feval
Consider this function that folds the function call rand(1,100)
into a
constant.
function yi = fcn(xi) y = coder.const(rand(1,100)); yi = interp1(y,xi); end
Code generation ends with an error.
codegen fcn -args {0} -config:lib -report
??? The input to coder.const cannot be reduced to a constant.
To successfully constant-fold
rand(1,100)
, evaluate it in MATLAB by using
feval
.
function yi = fcn(xi) y = coder.const(feval('rand',1,100)); yi = interp1(y,xi); end