You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: Documentation/Doxygen/src/mainpage.md
+21-2Lines changed: 21 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,6 +46,16 @@ More documentation about the @ref dsppp_main "DSP++" extension.
46
46
47
47
The library is released in source form. It is strongly advised to compile the library using `-Ofast` optimization to have the best performances.
48
48
49
+
Following options should be avoided:
50
+
51
+
*`-fno-builtin`
52
+
*`-ffreestanding` because it enables previous options
53
+
54
+
The library is doing some type [punning](https://en.wikipedia.org/wiki/Type_punning) to process word 32 from memory as a pair of `q15` or a quadruple of `q7`. Those type manipulations are done through `memcpy` functions. Most compilers should be able to optimize out those function calls when the length to copy is small (4 bytes).
55
+
56
+
This optimization will **not** occur when `-fno-builtin` is used and it will have a **very bad** impact on the performances.
57
+
58
+
49
59
The library functions are declared in the public file `Include/arm_math.h`. Simply include this file to use the CMSIS-DSP library. If you don't want to include everything, you can also rely on individual header files from the `Include/dsp/` folder and include only those that are needed in the project.
50
60
51
61
## Examples {#example}
@@ -70,7 +80,6 @@ The table below explains the content of **ARM::CMSIS-DSP** pack.
70
80
📂 Include | Include files for using and building the lib
71
81
📂 PrivateInclude | Private include files for building the lib
@@ -138,14 +147,24 @@ Constant tables can use a lot of read only memory but the linker can remove the
138
147
139
148
For this you need to use the right initialization functions in the library and the right options for the linker (they are compiler dependent).
140
149
141
-
For all transforms functions (CFFT, RFFT ...) instead of using a generic initialization function that works for all lengths (like `arm_cff_init_f32`), use a dedicated initialization function for a specific size (like `arm_cfft_init_1024_f32`).
150
+
For all transforms functions (CFFT, RFFT ...) instead of using a generic initialization function that works for all lengths (like `arm_cfft_init_f32`), use a dedicated initialization function for a specific size (like `arm_cfft_init_1024_f32`).
142
151
143
152
By using the right initialization function, you're telling the linker what is really used.
144
153
145
154
If you use a generic function, the linker cannot deduce the used lengths and thus will keep all the constant tables required for each length.
146
155
147
156
Then you need to use the right options for the compiler so that the unused tables and functions are removed. It is compiler dependent but generally the options are named like `-ffunction-sections`, `-fdata-sections`, `--gc-sections` ...
148
157
158
+
## Variations between the architectures
159
+
160
+
Some algorithms may give slightlty different results on different architectures (like M0 or M4/M7 or M55). It is a tradeoff made for speed reasons and to make best use of the different instruction sets.
161
+
162
+
All algorithms are compared with a double precision reference and the different versions (for different architectures) have the same characteristics when compared to the double precision (SNR bound, max bound for sample error ...)
163
+
164
+
As consequence, the small differences that may exists between the different architecture implementations should be too small to have any practical consequences.
165
+
166
+
167
+
149
168
## License {#license}
150
169
151
170
The CMSIS-DSP is provided free of charge under the [Apache 2.0 License](https://raw.githubusercontent.com/ARM-software/CMSIS-DSP/main/LICENSE).
Copy file name to clipboardExpand all lines: README.md
-14Lines changed: 0 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,20 +46,6 @@ With this wrapper you can design your algorithm in Python using an API as close
46
46
47
47
The goal is to make it easier to move from a design to a final implementation in C.
48
48
49
-
### Compute Graph
50
-
51
-
CMSIS-DSP is also providing an experimental [static scheduler for compute graph](ComputeGraph/README.md) to describe streaming solutions:
52
-
53
-
* You define your compute graph in Python
54
-
* A static and deterministic schedule (computed by the Python script) is generated
55
-
* The static schedule can be run on the device with low overhead
56
-
57
-
The Python scripts for the static scheduler generator are part of the CMSIS-DSP Python wrapper.
58
-
59
-
The header files are part of the CMSIS-DSP pack (version 1.10.2 and above).
60
-
61
-
The Compute Graph makes it easier to implement a streaming solution : connecting different compute kernels each consuming and producing different amount of data.
62
-
63
49
## Support / Contact
64
50
65
51
For any questions or to reach the CMSIS-DSP team, please create a new issue in https://github.com/ARM-software/CMSIS-DSP/issues
0 commit comments