Embedded math kernels that keep the DSP name for legacy reasons
Optimized compute kernels for ARM Cortex-M and Cortex-A, offering a Python prototyping path and a C++ loop-fusion layer despite its legacy DSP branding.

What it does
CMSIS-DSP is a collection of optimized compute kernels for ARM Cortex-M and Cortex-A microcontrollers and processors. It covers basic mathematics, linear algebra, digital filtering, FFTs, DCTs, MFCCs, statistics, and classical ML primitives like SVMs and distance functions. The library supports multiple numeric formats—floating point in 64-, 32-, and 16-bit widths, plus fixed-point types (q31, q15, q7)—and automatically uses Helium or Neon vector instructions when the hardware offers them.
The interesting bit
The project is aware that “DSP” in its name is a legacy holdover, and it has quietly grown into a broader embedded compute stack. The most unusual additions are a header-only C++ layer called DSP++ that fuses loops across kernel calls to eliminate temporary arrays, and an experimental automatic-differentiation extension built on top of it for on-device model fine-tuning. There is also a NumPy-compatible Python wrapper so you can sketch an algorithm in Python with fixed-point support and then port the logic to C without rewriting the API mental model.
Key highlights
- Vectorized kernels for Helium (Cortex-M) and Neon (Cortex-A) extensions.
- Broad dtype coverage:
f64,f32,f16,q31,q15,q7. - DSP++ C++ API is header-only and optional; it can fuse multiple operations into a single loop.
- Python wrapper (
cmsisdsp) mimics the C API and supports fixed-point arithmetic. - Experimental autodiff extension for on-device fine-tuning using existing kernels.
Caveats
- DSP++ is currently unsupported in builds with
ARM_MATH_NEONenabled; its incomplete Neon implementation can cause compilation errors with no automatic scalar fallback. - Half-float (
f16) support is only useful when the target has hardware acceleration for it; otherwise it may cause compilation problems and should be disabled. - The README notes that GCC currently delivers poor performance when targeting Helium; the Arm compiler is advised for those builds.
Verdict
Worth a look if you are building signal-processing or lightweight ML pipelines on ARM embedded hardware and need hand-optimized kernels with a path from Python prototype to C deployment. Skip it if you are not targeting Cortex-M or Cortex-A, or if you need a full-featured desktop ML framework rather than a kernel library.
Frequently asked
- What is ARM-software/CMSIS-DSP?
- Optimized compute kernels for ARM Cortex-M and Cortex-A, offering a Python prototyping path and a C++ loop-fusion layer despite its legacy DSP branding.
- Is CMSIS-DSP open source?
- Yes — ARM-software/CMSIS-DSP is open source, released under the Apache-2.0 license.
- What language is CMSIS-DSP written in?
- ARM-software/CMSIS-DSP is primarily written in C.
- How popular is CMSIS-DSP?
- ARM-software/CMSIS-DSP has 1.1k stars on GitHub.
- Where can I find CMSIS-DSP?
- ARM-software/CMSIS-DSP is on GitHub at https://github.com/ARM-software/CMSIS-DSP.