CMSIS-DSP  
CMSIS DSP Software Library
CMSIS DSP Software Library

Introduction

This user manual describes the CMSIS DSP software library, a suite of common compute processing functions for use on Cortex-M and Cortex-A processor based devices.

The library is divided into a number of functions each covering a specific category:

The library has generally separate functions for operating on 8-bit integers, 16-bit integers, 32-bit integer and 32-bit floating-point values and 64-bit floating-point values.

The library is providing vectorized versions of most algorithms for Helium and of most f32 algorithms for Neon.

When using a vectorized version, provide a little bit of padding after the end of a buffer (3 words) because the vectorized code may read a little bit after the end of a buffer. You don't have to modify your buffers but just ensure that the end of buffer + padding is not outside of a memory region.

CMSIS-DSP pack is containing an optional project : The CMSIS-DSP Compute Graph. The documentation for this project is available on the CMSIS-DSP github repository.

A Python wrapper is also available with a Python API as close as possible to the C one. It can be used to start developing and testing an algorithm with NumPy and SciPy before writing the C version. Is is available on PyPI.org. It can be installed with : pip install cmsisdsp

Using the Library

The library is released in source form. It is strongly advised to compile the library using -Ofast to have the best performances.

The library functions are declared in the public file arm_math.h which is placed in the Include folder. Simply include this file. If you don't want to include everything, you can also rely on headers in Include/dsp folder and use only what you need.

Examples

The library ships with a number of examples which demonstrate how to use the library functions. Please refer to Examples.

Toolchain Support

The library is now tested on Fast Models building with cmake. Core M0, M4, M7, M33, M55, A32 are tested.

Preprocessor Macros

Each library project has different preprocessor macros.

  • ARM_MATH_BIG_ENDIAN:
    • Define macro ARM_MATH_BIG_ENDIAN to build the library for big endian targets. By default library builds for little endian targets.
  • ARM_MATH_MATRIX_CHECK:
    • Define macro ARM_MATH_MATRIX_CHECK for checking on the input and output sizes of matrices
  • ARM_MATH_ROUNDING:
    • Define macro ARM_MATH_ROUNDING for rounding on support functions
  • ARM_MATH_LOOPUNROLL:
    • Define macro ARM_MATH_LOOPUNROLL to enable manual loop unrolling in DSP functions
  • ARM_MATH_NEON:
    • Define macro ARM_MATH_NEON to enable Neon versions of the DSP functions. It is not enabled by default when Neon is available because performances are dependent on the compiler and target architecture.
  • ARM_MATH_NEON_EXPERIMENTAL:
    • Define macro ARM_MATH_NEON_EXPERIMENTAL to enable experimental Neon versions of of some DSP functions. Experimental Neon versions currently do not have better performances than the scalar versions.
  • ARM_MATH_HELIUM:
    • It implies the flags ARM_MATH_MVEF and ARM_MATH_MVEI and ARM_MATH_MVE_FLOAT16.
  • ARM_MATH_HELIUM_EXPERIMENTAL:
    • Only taken into account when ARM_MATH_MVEF, ARM_MATH_MVEI or ARM_MATH_MVE_FLOAT16 are defined. Enable some vector versions which may have worse performance than scalar depending on the core / compiler configuration.
  • ARM_MATH_MVEF:
    • Select Helium versions of the f32 algorithms. It implies ARM_MATH_FLOAT16 and ARM_MATH_MVEI.
  • ARM_MATH_MVEI:
    • Select Helium versions of the int and fixed point algorithms.
  • ARM_MATH_MVE_FLOAT16:
    • MVE Float16 implementations of some algorithms (Requires MVE extension).
  • DISABLEFLOAT16:
    • Disable float16 algorithms when __fp16 is not supported for a specific compiler / core configuration. This is only valid for scalar. When vector architecture is supporting f16 then it can't be disabled.
  • ARM_MATH_AUTOVECTORIZE:
    • With Helium or Neon, disable the use of vectorized code with C intrinsics and use pure C instead. The vectorization is then done by the compiler.

CMSIS-DSP in ARM::CMSIS Pack

The following files relevant to CMSIS-DSP are present in the ARM::CMSIS Pack directories:

File/Folder Content
CMSIS\Documentation\DSP This documentation
CMSIS\DSP\Examples Example projects demonstrating the usage of the library functions
CMSIS\DSP\ComputeLibrary Small Neon kernels when building on Cortex-A
CMSIS\DSP\Include include files for using and building the lib
CMSIS\DSP\PrivateInclude private include files for building the lib
CMSIS\DSP\Source source files

Revision History of CMSIS-DSP

Please refer to Revision History.

License

The CMSIS-DSP is provided free of charge under the Apache 2.0 License.