Define and Pass Function Handles for Code Acceleration

The following code example shows how to define and call function handles for code acceleration.

function [y1, y2] = addval(m)
%#codegen
 
 disp(m);
 
  % Pass function handle to addone
  %  to add one to each element of m
  y1 = map(@addone, m);
  disp(y1);
 
  % Pass function handle to addtwo
  %  to add two to each element of m
  y2 = map(@addtwo, m);
  disp(y2);
 
  function y = map(f,m)
    y = m;
    for i = 1:numel(y)
       y(i) = f(y(i));
    end
 
  function y = addone(u)
  y = u + 1;
 
  function y = addtwo(u)
  y = u + 2;

This code passes function handles @addone and @addtwo to the function map which increments each element of the matrix m by the amount prescribed by the referenced function. Note that map stores the function handle in the input variable f and then uses f to invoke the function — in this case addone first and then addtwo.

You can use the function fiaccel to convert the function addval to a MEX executable that you can run in MATLAB®. Follow these steps:

  1. At the MATLAB command prompt, define and initialize a 3-by-3 matrix:

    m = fi(magic(3));
    
  2. Use fiaccel to compile the function to a MEX executable:

    fiaccel addval -args {m}
    
  3. Execute the function:

    [y1, y2] = addval_mex(m);
         8     1     6
         3     5     7
         4     9     2
    
              DataTypeMode: Fixed-point: binary point scaling
                Signedness: Signed
                WordLength: 16
            FractionLength: 11
         9     2     7
         4     6     8
         5    10     3
    
              DataTypeMode: Fixed-point: binary point scaling
                Signedness: Signed
                WordLength: 16
            FractionLength: 11
        10     3     8
         5     7     9
         6    11     4
    
              DataTypeMode: Fixed-point: binary point scaling
                Signedness: Signed
                WordLength: 16
            FractionLength: 11
    
Was this topic helpful?