| AIfES 2 2.0.0

Functions
aimath_f32_cmsis.h File Reference

Go to the source code of this file.

## Functions
void | aimath_f32_cmsis_linear (const aitensor_t *a, const aitensor_t *b, const aitensor_t *c, aitensor_t *result)
| Performs a matrix multiplication of f32 tensors a and b and adds a 1D tensor c to each row, using the ARM CMSIS DSP. More...
void | aimath_f32_cmsis_mat_mul (const aitensor_t *a, const aitensor_t *b, aitensor_t *result)
| Performs a matrix multiplication of f32 tensors a and b, using the ARM CMSIS DSP. More...

## Detailed Description

Version
  2.2.0

Copyright
  Copyright (C) 2020-2023 Fraunhofer Institute for Microelectronic Circuits and Systems. All rights reserved.
  AIfES is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
  This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
  You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.

## Function Documentation

## ◆ aimath_f32_cmsis_linear()

void aimath_f32_cmsis_linear | ( | const aitensor_t * | a,
|  | const aitensor_t * | b,
|  | const aitensor_t * | c,
|  | aitensor_t * | result
| ) |  |

Performs a matrix multiplication of f32 tensors a and b and adds a 1D tensor c to each row, using the ARM CMSIS DSP.

The addition of the horizontal vector c is performed via broadcast, i.e. elementwise in each column Mathematically this broadcast is equal to multiplying c with an vertical vector of ones (with the same number of elements as c)

and adding the result to a * b

\[ result = a \cdot b + \left( \begin{array}{r} 1 \\ 1 \\ \vdots \\ 1 \\ \end{array}\right) \cdot c \]

Example:

\[ a = \left( \begin{array}{rrr} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9 \end{array}\right) \]

\[ b = \left( \begin{array}{rr} 1 & 0 \\ 0 & 1 \\ 0 & 0 \end{array}\right) \]

\[ c = \left( \begin{array}{rr} 2 & 5 \end{array}\right) \]

\[ result = a \cdot b + \left( \begin{array}{r} 1 \\ 1 \\ 1 \\ \end{array}\right) \cdot c \]

\[ = \left( \begin{array}{rr} 1 & 2 \\ 4 & 5 \\ 7 & 8 \end{array}\right) + \left( \begin{array}{rr} 2 & 5 \\ 2 & 5 \\ 2 & 5 \end{array}\right) \]

\[ = \left( \begin{array}{rr} 3 & 7 \\ 6 & 10 \\ 9 & 13 \end{array}\right) \]

Parameters

  *a | f32 tensor a
  *b | f32 tensor b
  *c | Tensor c, 1 row and as many columns as the result
  *result | Result f32 tensor

## ◆ aimath_f32_cmsis_mat_mul()

void aimath_f32_cmsis_mat_mul | ( | const aitensor_t * | a,
|  | const aitensor_t * | b,
|  | aitensor_t * | result
| ) |  |

Performs a matrix multiplication of f32 tensors a and b, using the ARM CMSIS DSP.

\[ result = a \cdot b \]

Parameters

  *a | f32 tensor a
  *b | f32 tensor b
  *result | Result f32 tensor of the multiplication