From e7f9ab01acd27f1d6e8ae062dcaf01d741c17a67 Mon Sep 17 00:00:00 2001 From: Christophe Favergeon Date: Mon, 6 Mar 2023 14:11:24 +0100 Subject: [PATCH] Added documentation for CMSIS-DSP nodes, cyclo-static scheduling, memory optimizations Updated copyright years on Compute graph files --- ComputeGraph/FAQ.md | 2 +- ComputeGraph/README.md | 6 +- ComputeGraph/cg/nodes/cpp/CFFT.h | 8 +- ComputeGraph/cg/nodes/cpp/ICFFT.h | 8 +- .../cg/nodes/cpp/InterleavedStereoToMono.h | 8 +- ComputeGraph/cg/nodes/cpp/MFCC.h | 8 +- ComputeGraph/cg/nodes/cpp/NullSink.h | 8 +- ComputeGraph/cg/nodes/cpp/OverlapAndAdd.h | 8 +- ComputeGraph/cg/nodes/cpp/SlidingBuffer.h | 8 +- ComputeGraph/cg/nodes/cpp/ToComplex.h | 8 +- ComputeGraph/cg/nodes/cpp/ToReal.h | 8 +- ComputeGraph/cg/nodes/cpp/Unzip.h | 8 +- ComputeGraph/cg/nodes/cpp/Zip.h | 8 +- ComputeGraph/cg/nodes/cpp/host/FileSink.h | 8 +- ComputeGraph/cg/nodes/cpp/host/FileSource.h | 8 +- ComputeGraph/cg/src/GenericNodes.h | 8 +- ComputeGraph/cg/src/cg_status.h | 26 ++++++ ComputeGraph/documentation/Memory.md | 79 ++++++++++++++++++ ComputeGraph/documentation/buffer.png | Bin 0 -> 2889 bytes ComputeGraph/documentation/fifos.png | Bin 0 -> 5944 bytes ComputeGraph/documentation/inter.png | Bin 0 -> 8061 bytes ComputeGraph/documentation/memory.png | Bin 0 -> 6033 bytes ComputeGraph/documentation/shared_complex.png | Bin 0 -> 6190 bytes .../documentation/shared_complex_buffer.png | Bin 0 -> 5998 bytes ComputeGraph/examples/cyclo/AppNodes.h | 7 +- ComputeGraph/examples/example1/AppNodes.h | 5 +- ComputeGraph/examples/example10/AppNodes.h | 11 +-- ComputeGraph/examples/example2/AppNodes.h | 8 +- ComputeGraph/examples/example3/AppNodes.h | 9 +- ComputeGraph/examples/example4/appnodes.py | 4 +- ComputeGraph/examples/example5/appnodes.py | 7 +- ComputeGraph/examples/example6/AppNodes.h | 9 +- ComputeGraph/examples/example7/appnodes.py | 7 +- ComputeGraph/examples/example8/AppNodes.h | 9 +- ComputeGraph/examples/example8/appnodes.py | 6 +- ComputeGraph/examples/example9/AppNodes.h | 11 +-- ComputeGraph/examples/simple/AppNodes.h | 11 +-- ComputeGraph/examples/simpledsp/AppNodes.h | 11 +-- cmsisdsp/cg/nodes/CFFT.py | 4 +- cmsisdsp/cg/nodes/Duplicate.py | 3 +- cmsisdsp/cg/nodes/ICFFT.py | 4 +- cmsisdsp/cg/nodes/InterleavedStereoToMono.py | 4 +- cmsisdsp/cg/nodes/MFCC.py | 4 +- cmsisdsp/cg/nodes/NullSink.py | 4 +- cmsisdsp/cg/nodes/ToComplex.py | 4 +- cmsisdsp/cg/nodes/ToReal.py | 4 +- cmsisdsp/cg/nodes/Unzip.py | 4 +- cmsisdsp/cg/nodes/Zip.py | 4 +- cmsisdsp/cg/nodes/__init__.py | 4 +- cmsisdsp/cg/nodes/host/FileSink.py | 4 +- cmsisdsp/cg/nodes/host/FileSource.py | 4 +- cmsisdsp/cg/nodes/host/NumpySink.py | 4 +- cmsisdsp/cg/nodes/host/WavSink.py | 4 +- cmsisdsp/cg/nodes/host/WavSource.py | 4 +- cmsisdsp/cg/nodes/host/message.py | 2 +- cmsisdsp/cg/nodes/simu.py | 4 +- cmsisdsp/cg/scheduler/config.py | 4 +- cmsisdsp/cg/scheduler/description.py | 4 +- cmsisdsp/cg/scheduler/graphviz.py | 4 +- cmsisdsp/cg/scheduler/node.py | 4 +- cmsisdsp/cg/scheduler/pythoncode.py | 4 +- cmsisdsp/cg/scheduler/standard.py | 4 +- cmsisdsp/cg/types.py | 4 +- 63 files changed, 215 insertions(+), 222 deletions(-) create mode 100644 ComputeGraph/documentation/Memory.md create mode 100644 ComputeGraph/documentation/buffer.png create mode 100644 ComputeGraph/documentation/fifos.png create mode 100644 ComputeGraph/documentation/inter.png create mode 100644 ComputeGraph/documentation/memory.png create mode 100644 ComputeGraph/documentation/shared_complex.png create mode 100644 ComputeGraph/documentation/shared_complex_buffer.png diff --git a/ComputeGraph/FAQ.md b/ComputeGraph/FAQ.md index bb92c5e8..1fd89b8a 100644 --- a/ComputeGraph/FAQ.md +++ b/ComputeGraph/FAQ.md @@ -29,7 +29,7 @@ For instance, if you need an alignment on a multiple of `16` bytes with a buffer If you can't choose freely the values of `NR` and `NW` then you may need to do a copy inside your component to align the buffer (of course only if the overhead due to the lack of alignment is bigger than doing a copy.) -## Memory sharing +## Memory sharing example When the `memoryOptimization` is enabled, the memory may be reused for different FIFOs to minimize the memory usage. But the scheduling algorithm is not trying to optimize this. So depending on how the graph was scheduled, the level of sharing may be different. diff --git a/ComputeGraph/README.md b/ComputeGraph/README.md index 95d2522b..5651d48e 100644 --- a/ComputeGraph/README.md +++ b/ComputeGraph/README.md @@ -20,9 +20,11 @@ 7. ### Extensions - 1. #### [Cyclo-static scheduling](CycloStatic.md) + 1. #### [Memory optimizations](documentation/Memory.md) - 2. #### [Dynamic / Asynchronous mode](Async.md) + 2. #### [Cyclo-static scheduling](CycloStatic.md) + + 3. #### [Dynamic / Asynchronous mode](Async.md) 8. ### [Maths principles](MATHS.md) diff --git a/ComputeGraph/cg/nodes/cpp/CFFT.h b/ComputeGraph/cg/nodes/cpp/CFFT.h index 4387c420..ccfc173b 100644 --- a/ComputeGraph/cg/nodes/cpp/CFFT.h +++ b/ComputeGraph/cg/nodes/cpp/CFFT.h @@ -3,13 +3,11 @@ * Title: CFFT.h * Description: Node for CMSIS-DSP cfft * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/ICFFT.h b/ComputeGraph/cg/nodes/cpp/ICFFT.h index 9899768a..1349b041 100644 --- a/ComputeGraph/cg/nodes/cpp/ICFFT.h +++ b/ComputeGraph/cg/nodes/cpp/ICFFT.h @@ -3,13 +3,11 @@ * Title: ICFFT.h * Description: Node for CMSIS-DSP icfft * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/InterleavedStereoToMono.h b/ComputeGraph/cg/nodes/cpp/InterleavedStereoToMono.h index 08f52ea3..ab1daa28 100644 --- a/ComputeGraph/cg/nodes/cpp/InterleavedStereoToMono.h +++ b/ComputeGraph/cg/nodes/cpp/InterleavedStereoToMono.h @@ -3,13 +3,11 @@ * Title: InterleavedStereoToMono.h * Description: Interleaved Stereo to mono stream in Q15 * - * $Date: 06 August 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/MFCC.h b/ComputeGraph/cg/nodes/cpp/MFCC.h index a069abe0..c7f4327a 100644 --- a/ComputeGraph/cg/nodes/cpp/MFCC.h +++ b/ComputeGraph/cg/nodes/cpp/MFCC.h @@ -3,13 +3,11 @@ * Title: MFCC.h * Description: Node for CMSIS-DSP MFCC * - * $Date: 06 October 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/NullSink.h b/ComputeGraph/cg/nodes/cpp/NullSink.h index d982a0da..f3669db4 100644 --- a/ComputeGraph/cg/nodes/cpp/NullSink.h +++ b/ComputeGraph/cg/nodes/cpp/NullSink.h @@ -3,13 +3,11 @@ * Title: NullSink.h * Description: Sink doing nothing for debug * - * $Date: 08 August 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/OverlapAndAdd.h b/ComputeGraph/cg/nodes/cpp/OverlapAndAdd.h index ba441f8d..2ab36f35 100644 --- a/ComputeGraph/cg/nodes/cpp/OverlapAndAdd.h +++ b/ComputeGraph/cg/nodes/cpp/OverlapAndAdd.h @@ -3,13 +3,11 @@ * Title: OverlapAndAdd.h * Description: Overlap And Add * - * $Date: 25 October 2022 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2022 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/SlidingBuffer.h b/ComputeGraph/cg/nodes/cpp/SlidingBuffer.h index 971a5832..b782cd52 100644 --- a/ComputeGraph/cg/nodes/cpp/SlidingBuffer.h +++ b/ComputeGraph/cg/nodes/cpp/SlidingBuffer.h @@ -3,13 +3,11 @@ * Title: SlidingBuffer.h * Description: Sliding buffer * - * $Date: 25 October 2022 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2022 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/ToComplex.h b/ComputeGraph/cg/nodes/cpp/ToComplex.h index f91e66bd..e6b26da5 100644 --- a/ComputeGraph/cg/nodes/cpp/ToComplex.h +++ b/ComputeGraph/cg/nodes/cpp/ToComplex.h @@ -3,13 +3,11 @@ * Title: ToComplex.h * Description: Node to convert real to complex * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/ToReal.h b/ComputeGraph/cg/nodes/cpp/ToReal.h index 6d850733..13f8e0ed 100644 --- a/ComputeGraph/cg/nodes/cpp/ToReal.h +++ b/ComputeGraph/cg/nodes/cpp/ToReal.h @@ -3,13 +3,11 @@ * Title: ToReal.h * Description: Node to convert complex to reals * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/Unzip.h b/ComputeGraph/cg/nodes/cpp/Unzip.h index c4d7c860..eeca9826 100644 --- a/ComputeGraph/cg/nodes/cpp/Unzip.h +++ b/ComputeGraph/cg/nodes/cpp/Unzip.h @@ -3,13 +3,11 @@ * Title: Unzip.h * Description: Node to unzip a stream of pair * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/Zip.h b/ComputeGraph/cg/nodes/cpp/Zip.h index e120e870..bae6da48 100644 --- a/ComputeGraph/cg/nodes/cpp/Zip.h +++ b/ComputeGraph/cg/nodes/cpp/Zip.h @@ -3,13 +3,11 @@ * Title: Zip.h * Description: Node to zip a pair of stream * - * $Date: 06 August 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/host/FileSink.h b/ComputeGraph/cg/nodes/cpp/host/FileSink.h index 6835d9d3..4907176d 100644 --- a/ComputeGraph/cg/nodes/cpp/host/FileSink.h +++ b/ComputeGraph/cg/nodes/cpp/host/FileSink.h @@ -3,13 +3,11 @@ * Title: FileSink.h * Description: Node for creating File sinks * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/nodes/cpp/host/FileSource.h b/ComputeGraph/cg/nodes/cpp/host/FileSource.h index eba3fdb6..dd112fd0 100644 --- a/ComputeGraph/cg/nodes/cpp/host/FileSource.h +++ b/ComputeGraph/cg/nodes/cpp/host/FileSource.h @@ -3,13 +3,11 @@ * Title: FileSource.h * Description: Node for creating File sources * - * $Date: 30 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/src/GenericNodes.h b/ComputeGraph/cg/src/GenericNodes.h index 633314d5..166c94b9 100644 --- a/ComputeGraph/cg/src/GenericNodes.h +++ b/ComputeGraph/cg/src/GenericNodes.h @@ -3,13 +3,11 @@ * Title: GenericNodes.h * Description: C++ support templates for the compute graph with static scheduler * - * $Date: 29 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2022 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/cg/src/cg_status.h b/ComputeGraph/cg/src/cg_status.h index 995b117b..dbf271db 100644 --- a/ComputeGraph/cg/src/cg_status.h +++ b/ComputeGraph/cg/src/cg_status.h @@ -1,3 +1,29 @@ +/* ---------------------------------------------------------------------- + * Project: CMSIS DSP Library + * Title: cg_status.h + * Description: Error code for the Compute Graph + * + * + * Target Processor: Cortex-M and Cortex-A cores + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #ifndef _CG_STATUS_H_ diff --git a/ComputeGraph/documentation/Memory.md b/ComputeGraph/documentation/Memory.md new file mode 100644 index 00000000..af24d8d5 --- /dev/null +++ b/ComputeGraph/documentation/Memory.md @@ -0,0 +1,79 @@ +# Memory optimizations + +## Buffers + +Sometimes, a FIFO is in fact a buffer. In below graph, the source is writing 5 samples and the sink is reading 5 samples. + +![buffer](buffer.png) + +The scheduling will obviously be something like: + +`Source, Sink, Source, Sink ...` + +In this case, the FIFO is used as a simple buffer. The read and the write are always taking place from the start of the buffer. + +The schedule generator will detect FIFOs that are used as buffer and the FIFO implementation will be replaced by buffers : the third argument of the template (`isArray`) is set to one: + +```C++ +FIFO fifo0(buf1); +``` + +## Buffer sharing + +When several FIFOs are used as buffers then it may be possible to share the underlying memory for all of those buffers. This optimization is enabled by setting `memoryOptimization` to `true` in the configuration object: + +```python +conf.memoryOptimization=True +``` + +The optimization depends on how the graph has been scheduled. + +With the following graph there is a possibility for buffer sharing: + +![memory](memory.png) + +Without `memoryOptimization`, the FIFO are consuming 60 bytes (4*5 * 3 FIFOs). With `memoryOptimization`, only 40 bytes are needed. + +You cannot share memory for the input / output of a node since a node needs both to read and write for its execution. This imposes some constraints on the graph. + +The constraints are internally represented by a different graph that represents when buffers are live at the same time : the interference graph. The input / output buffers of a node are live at the same time. Graph coloring is used to identify, from this graph of interferences, when memory for buffers can be shared. + +The interference graph is highly depend on how the compute graph is scheduled : a buffer is live when a write has taken place but no read has yet read the full content. + +For the above compute graph and its computed schedule, the interference graph would be: + +![inter](inter.png) + + + +Adjacent vertices in the graph should use different colors. A coloring of this graph is equivalent to assigning memory areas. Graph coloring of the previous interference graph is giving the following buffer sharing: + +![fifos](fifos.png) + +The dimension of the buffer is the maximum for all the edges using this buffers. + +In the C++ code it is represented as: + +```C++ +#define BUFFERSIZE0 20 +CG_BEFORE_BUFFER +uint8_t buf0[BUFFERSIZE0]={0}; +``` + +`uint8_t` is used (instead of the `float32_t` of this example) because different edges of the graph may use different datatypes. + +It is really important that you use the macro `CG_BEFORE_BUFFER` to align this buffer so that the alignment is coherent with the datatype used on all the FIFOs. + +### Shared buffer sizing + +Let's look at a more complex example to see how the size of the shared buffer is computed: + +![shared_complex](shared_complex.png) + +The source is generating 10 samples instead of 5. The FIFOs are using 80 bytes without buffer sharing. + +With buffer sharing, 60 bytes are used. The buffer sharing is: + +![shared_complex_buffer](shared_complex_buffer.png) + +Buffer 1 is used by first and last edge in the graph. The dimension of this buffer is 40 bytes : big enough to be usable by edge 0 and edge 3 in the graph. \ No newline at end of file diff --git a/ComputeGraph/documentation/buffer.png b/ComputeGraph/documentation/buffer.png new file mode 100644 index 0000000000000000000000000000000000000000..5760cbf3ff4a4131c3705cdbac81afae08196472 GIT binary patch literal 2889 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 literal 0 HcmV?d00001 diff --git a/ComputeGraph/documentation/memory.png b/ComputeGraph/documentation/memory.png new file mode 100644 index 0000000000000000000000000000000000000000..784122d35520d4582088248fd356fbaf0c25b960 GIT binary patch literal 6033 zcmbuD2{hF2zsE;1q!>|BVvr|B*|9%vV`o}_uUYZWQiGu zv1G|I%G!uQ-LK#8fB)y+bM86!oO@@^eCPSje4pp}JfF|Aygu((eO+}X#w&~<5Qs@r zL&X3Dq7??pNCq%)O-`d-0KUNXNOcv^pObe^dr=AqbV*H9MajrN^GBB6Q??b(K3twj zw24V#1sYvI|0Rze*?RUk(q8YOm)9}kVj#+uT?p-ow9u#;H3=f-TvDo0N~BAfiRSjb zeSusdsF6B~*lP-U)Nk+1COpV4WYqP`k2oiHIJA`Iko?*~p#K*w?d#WmvjHnvD+kLV zv%j(~BN%uU8F-^ulo@!>J0OU3JbxFXSfn_rPJRRK_|DR@|5MU%u|9K+o2z}oL1_T8REAFA;)2d+X-M$|pRO94-MHD9%_Mx8|x29L_|Vta4YOa$fn(s^-QCij z3#T2OoVsDpxaZkG_Fi72?ve_9OH26-IaJ!~+zF&lMnbPt;MtAiwUcEao(~^Bl%Zc~ zsebR4_NcU<~8RR_SKIj zZFBV*>V@y)jmd~beW+}jL5ag;=BMfDOb}1aO0u*d%Y58Z)@9WelPS$8f1&X;HP{yXBA2t^C~NcwemO(K0AmJaZhl!^+5jf z(U*9ls@Us)od$uy;40S%n1k45sHwUJy0EC|j<`52X#Zd(8v)Y+LXc?v7KgKGJs!zL zfWk7Q+#718ldx1pa~=LusYXI{-J+s!_zSOQ%e&Vf`1o9Gwj8>$ld{H7_Q)YMcr`zt zoHXmPzf)FGVejD3BiX3u$9%(UBj1kWX|MfVEKKf9V~aOqWaim)4gNB;u4iJ;q9-Y^ z+495csvtAB{3B9FO-%$!IL1LNHaePaLX4S-$qs{giD<1NiGiLcBv>Hk2L=YFFxF^m zQ=HPingZ01w3%tRZke5xRX@~RQ)55i9U97AjryGa;r@WHiK*%R5+mWD-&@@ftFgT+ zcBc%qL*hG{kc;{sspeL3Cck$H&@N3r3+hcaZ$7#@+XU zuwi6x1NV*+I%ASOMVu|hMSdUUmjZ#1Mk_0w3_yl8HmaUGp%1;j)8@s2Vm>P+=aZk5 ztJv95$LPfM?n0dE`mFHn+s(^>F?HQF;^N|`!h9;TNZ;(!3k6?kP3^AlFlC6wU<`$LlEIlu)MrheV z4bKw0uqw|o(gm`IP0z#(nN9cf-E1-_%UluFsTGPBe`5R>XIE)%!!B+}#{>TrQZ=mP zBPJzPbZj_A_cmFpfR8ac;+5KOP1!NLoF7NjU3z1`O2%kqW3J}OHd7qqdnxikQ`#}* z%6aRt)$i((%ltLmKE6a)+p0_J;0x-AG!Th#dO`)^dXh#IRr@r>F3WlxYjUUtEC^xI z&1Ye%dsK&7vvQC$bcxk|X5Z-kW0U+SRD!%~u3FJh!DZQ-wn=z4I^L+gTxpR2+zarAIW7W>p`sFhEnK0)M`W8Q2t+~w8bobuu4_YwH zUm^JAeU(6#gH;u9Ebm)w=+-#h;MVR>#NXcPnL1jouD(OlDT%edo;~c^D90)Bqwu~J z8hge7dId`znWX9u6uz&MB1g)#7ekb&F)c9lo(K-j@6W>Ms)n;)G10}sKBe5Rla24z z>*Ryh#P=hjhXM?8o9SV|JVLq43bMx;L)nv==r4bJ zSUdTS5z|4V3g;12?fr30U%3p|tFn>SSFE5+-X<>uyGEP7Wv|jen68gV==`t{#JGoj zA;eSrih~B!B{S+{k<}Xs*v?=XKyXQ43=m@gm?VZJrVadm+N?XawJRF zVGJz3Ob#cKyOtiNszwY86>KsRn(T0V7t~pd5;l(!i8o;0m8CPBa20~)r+{!hV*k0Bv`(f@jf|oV*HtG3JzeDqvX#&$?k@%JY7|2T5h19&F-n)2 z=^Cb`Jn(B2RWXEx℘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 SGXNSpNK;i;r9#;@;y(c2+pHo0 literal 0 HcmV?d00001 diff --git a/ComputeGraph/documentation/shared_complex.png b/ComputeGraph/documentation/shared_complex.png new file mode 100644 index 0000000000000000000000000000000000000000..f196a11d63e7ab3071b178581e5007ba80bcfe82 GIT binary patch literal 6190 zcmbt(c{G&o`~M`_ce2K0UlNj~tXZ-zLn2G0NHYwP5QZ#;7`yCD3`0V8*(OVf5Ho}k z)g=2CV;P3;(~V4t>s(BiuRrF#U}C) z?&V&YTutqf6^pog0nDvy^w9Eim#)QSg)ggx&p*5NHTK@)+{|GUb)ULs4;K0PBg!6q zy+`)Ww0$U_AdzoVoPRa`x85qBf&o$aj-mudFHc{oUshYevTXz2x(Oe?L%DJBY3AFv z6)Ome^X;ciCF#}|quF%ngrk$w|F$<@x&h2izq;Oo=>0P_R%U|z`(yb_9p-9#@#Jn9k5tormwwt`}0Z4pO{$S?+pH z4)F^SL)>^;4sm>pSB(^zZ9@K!=Kr_auKy2P_|~+x#*;`-@4S8iTh>$SH&^RMitfmE)ye{U1h;GLV56eWX5Ls^UEO~TJpOoX zT6waO8N|y(Gx`1d%?1ZS=tZQ#*$+-Ez(5*wH*6doYzHluW4^ACN;Uj+BSjJUS#f%X zAk=qn^#fBOD&@#8RPESj+Vg&V<1poQ83~qUJ+i%{WB2@EW=v>}K1!GB#`g|{x|a%L z-x{ImHuVr#`XF@nHpaWDB4?;{yVbTr8uZpi<~o5)>6o6L_Uka^pDM*|>}9|SRT_*h zB4xN37@qrt;9<({gvRB)!?$xA6`@+yG8wNfnb%GEkBPBQ8>=k(t68|f8yspT+}+)8 zR=#`J<3P*lyBKS2a$Dy7!c5k2t{W1ih0gSD@@xx(`}kY}y|u0QWG%mZmgM?6;qO$b zI0H6I$J|WpO4(L`b+uI1SeE{$>bgu5@!L{dR2i3JIm^G5jKlcy2ST+rIJ(4i)IZad zSR2FPaA}ZU1gXvVEsi5IG3)PUs?F&>0@x0Q8&i#fddMX zx543N^)~^BX~4UH^YWp3#*&M-UWE~Y+Y9QVp$feB5Qy&$FTdKnhe(OYc!AhzBjG09V+Y)T&1w%l_J4)duO5F78_JByj&JSG$)YR404O~Lkqml2}6eDFbOy1&_q)J#Y%`y1lq}*js*=@B8Z~g7sb-HVp-{>QoX78vU_f+UPwcap{=7z>@Sj ze@pEcoz?s4YfDRAlOxvzc^h1`X>eDhpW;<_9;9hWL*0y{TwLCb!z>W)(t3HOUn3KH zUTNuKR+Z6uumw1Ivxdl*7U`c9Yu;&Eo-O+?lUcvk4T zNy&Y$Zz#9>2YetqQKRP~vG13lIYWPv?_@E3vJ7gwe@S=#vR+`0I8rqnJ8wgz3;x?1 zhwRXNckv(&DRhyF_qt|ldpo=hl^r>L(cQB4Zge89&(J-XVDx%@3I5xIM+Yv?aL9)_ ztFxQ*L@~1T3JL7HOAYP2mWev&>+t6%nkkbnDRJiz0hlpQsq{&j4Kh{_jCO)Whlfy) z)3v*-6zaZVBWUvDX;tIjvDP&rZ7a?jZx+O%3=Cet8gfSW%|%ILTmCwEwy1QqS7wH9 z46A2Hl=QFM;`DdiR5SpOT+@M=@cDdYObz7HF;DjUB_geZgtof0pc;8zP^ibxU@5rR z+NJ%Y>H8rejzFHVmLNUb+pL$KI7Hho$3n_&LPyLwltqkzr_`0Zw2^a-z%jt^B68#1 z$9HeE_Uj&z6&MN0b3+et%0GBsno%omdUyo4V4f^>L9IS76#?- zR@!c#e*=x;$HohTiiO3klG9B*Ae_4=I)6EOmp-D^*!5Z6^c@Vc%tY~BQZb%*#W;J# zVd$Be!e{K5M7m#hVm?18Kr5HMF-WLtO^CH@EfQtI(}r`KgMs+{>-g}Fxy~Q7n@AbE zTYgnj=e&N9p<0^-JPTzoz}uju1*4Uy)Iqwa@!ic<@xfC3HX_50-E*eJyo|ZTN>X|7 z33Y-ckp$=TT_WZzao19Gz(laBK`z6D;klnPo~DSTCdwE`Q|#gf@d;EP!IhnH6q+$19TKek)gT{zdtb=8(GM2@mCYH!(=Lv`KP>_)JfBW^)$+3yDjf?r#nNgmOF7BP4FCMz=P3s@1|5V z{cj9gjTxChL`CnBk;!3jFn+h_eW9-!o7)MxsI8&l{G;~PFem5VrHj|H{-jiHH{14= ziv}Oh&PN7QQcKy58DM4XX`VgJD|R-6Pb4D93Th`e$71X!UmiQoGIKQ+dPtN>b1@`F zO)vSsbZ!w#jM9&2aDbO>wOM+x_t{Z@+Bj!#BB=TF=I&tl4!bDjgxt3QbtW1)Kt%JM zeDny7NXsDw&6-}k3i+ll9yg-@@u;WFy8IfC9yZfQCSyi2Q|i1AM3jf-dUy+`)_`2( zv@_T4RSQ~!wQt+&0j*VYV}(0f5`FjICROqHwH3=fR@6P;=Vi{3|N5Fg+P31ug>(xH zvEq#Jcx>~jxp(+o2TaSme<<{)wLLsX`pLGex6|lqaus&Y9HPjHH=<_A!lbo+uUdh> zFU`$Y%TL5DmFNxF)Y!?Ii&psED$EN_qgzT6__DBli&n`*{8HH#r}xGKHq(-^uPw&( z66RpsxxvG5>`8D+%Vgu4dY4Fq*9BGgMA2bX={W3qqgA<$QzK`OT<=r?n(=`)(f=Mk z46B9S6UV8v-!-#{FMOi>c19sbLE89=)R%@f@>3Vw07td&Jr5XpY!?4!`=rb?NN z0Vidh81iE}l5j9Vp(I68c$pv}{tDGg4u65^t(BeWKnU>2InkvJb=7?M5EsuQFY;*H zk^6@^zrUk3fH*+Ud0aw$B@TGvZ)zNEc3&OTX7ZhkYXe{$@vsJ7n6hJP z6{}9Rts#(s9NgxjWvuuZ*^elRb4EXkXcZ!k`i$*FRvfHNCBXpq|CQsu}QhA zKKCCyIBRNZnli60y|S{>9I(c(MP4kPT)wyytVs;?>v!~N2hO`!022DP3%r__xA(8H z64NW=vTFJ~V@1H828O99_7Tm!3&%Sc?VsJO+6g70^7zG- zzDfG#GSYq|+X*Okp~|1clW%pH+Pg*U^Ie&^+_pWeo-#l6Na-HeC__`j_j}X z@2x@PB@D63S!}T-g&RRPfL2STMotn4-IuD{A`1aUgMP(HZZ=^lmsJp;GInBriva|j z80!c=KAbx#8h!NRbV=yhZ+54SP(A?T&4q58%aV+*wqYbB+}3{l`SWn*wlMqFH|+5^ zA78C3tiH@cPhkiY%T8Vl`2`3^|Hvt^PuYK^@@_sq^vru8^UwV@8 zi&&LV(zsojZ3T$MBhA*<_A%hz9{Yx#?s< zqL99w0fp~(gL%Iu8yyV!gmH#o7bMjX_ipGF{r1p4v|ptZ6mEgDJI^K7|BRp&`nVCc zr+&0uctQ>O?RT9<=}eX<1h+!U>sxb2`h7^~yvG)(Y?RPXw6ZMJLauzPCK8jhdk;6T zNehMHVMU>}UXny9?s#DM+KDQ)JF}941wS~+L4ubJci9owo-T8dTusVY#Rg|WHro5= z{elkHnzrUMU4DU2_GyO;wY9B;aLe83#`9>_zEPhAZafh1POSmVjc|2BKww}^M+eJb z?fZ_7#Qc0gCYrN`N4TDY?S(D;Ez2!wMaC}~m+Uq>X~92=leD@9<*^B1%Az6X!W%-| zOx`jDcpsaJ+q(^*)z#Hz@4w2fFyeba_Rxo^t91CJ)hF`<=j#dZ)wMM%Fb5SWLM*}% zjNtO=IFRVr|Harw*(C)1{VeG_huAaE8_}SwHZ(NUAg;X*tI&-E`KYb!9S$_Yzd1V3 z4^=ie3{90{+f|WDx#j@o-+~V~7X>|$F=oY0$F&LDZ(JffHktd(OLzkv!`pG#ut15q zk-Fi51a#w>K%W@-4c^~}N%C_vnGKAmP4!P*_Mlzr-rkL0P`p)FQxkF3WBA^)XH!$V ze{y}Op0C(%cns%t0x6`JBr_B}Kkt6D8Kd3P+iL(MgLIFZWT~N9fyT2j``W+Lp4CH@ zVNiD{^z&%;X`q*VThW7}^NFFqwTiMzqd8 zf0HSifBi{s)(C*8+nobT!`pEyrRA<0jn36E2E`FhaxtCvo&$a0xAeMlCfru~pu0y- zxQ9nyL-^CD=k2PU=asHx(`l=3>B&{8`po(tYeVN$NTX6-H+GHrW})6#%B*tB>>SXw zN#hQ6+W;2>E&~GD@58ERc!@QAro4-anw&%_v$j4&i0bgp|V^ygWTk&p`4m`Wo7SN_ERF!^C|RpAILywJtve^O0~ufI0NQ zynBV_5y)-5zsZW?FVRQC0q6yR0;HagnbhTP}$|QPC3@IzV)tDQa zsra;Yd@qC``lxk&`4ynkl!s4C@oo;y4^ZV!{xM*yX7`7 zUqgp+@&(Tz#PgT)+uJoW0KD|Fd>qzmz(br67^t`XDz+~1lS;uRF*c!ziO?7`7PS5C z=3P0766?=FU#OyTb`+MC1Uurd8wueEaXa=OnwNM&5R`W=b1X1ztI6kkCyJ9Oj9^nZ ze#3Yy2o4$RpMLNWF%qGggj$o};nI{JJ)=1yMbeX2y9~Xteb`j1n4bvk=N=EyZ#96Gl5WEe5YitPynJ4^mrztp6Z4Je!j3dx)ulX5Y`W z5;<5?}`#Yo#i~Y4g&@~p4Zy@@qe5sXnA=)7v;SLY^NZCK3 z%UR1P8r}jLJJ`M!Z%LwoLfgvD^U;+z0A|*o??JUu!x27&)`*Rm3ovAV1qydK~paB8?OAVW4qoau5X#p8MSXy!PY?y`+Kldjl`1hNKi1d_7qUrzsW}lKj z88tNDIavWyCii#hR<9(XdPgjF1WXLu_u)4G1}a_V(Yn8yo@iy*A*t;Y(Kc1F&+aOW z8#X=D^uekqA$w@xsx{9DjrqjX+}IK!ooS1acuUm*q0>`>6p_Wdz%V>LQqbFI21SPt zaGrT#rb#hlnQ5J{km+b@T1bGzqOwa}0Ku2?mkhcrFjwnsA*DI(k#7vkg84+8!$@D} zCV*xoMlFTfnmDWR1tp>RMYQb7RNUOBN%<3BL`WXRs6|2LBErQW(X2Qj?2wXZr|peX zp)h}z=o5b=@Di%ZS2K|>em5ktKHs|YpNxtEf(fO?#_1ZB^FC}>snOk}n0BQ_a0n;g zcv z{^#TH7Lsd0*w$X@@dEX`%F3VL1Lr=iudi#oibn>to(`bsHCO0b_ZLkXr{hxK<>7b-}>st2Jz2O?&Rd; z$FVW%nQ`H(2IbwO=Ur!vOxd_QEsFkBHq8P&)2GhP2+zagV=Wa`Ro|ttk}Q}CA3n)T z4-pG^(^$>w(b;4(L~QZguz1;-=fu7w;zXrm&_aITpWDBkpi2DBVHCAQu(l8Y@uL3& zxvk+_VcZs{T} z8b7d|28mgMe=RmW`G9%J)ExrjW}K#vU`~@^g*NueP)udx-38m{p5)$DF2tY zPQLc@f6oB_-)wl!1JHWUUHX3*Z@TQ)Cui*K7RqE6C literal 0 HcmV?d00001 diff --git a/ComputeGraph/documentation/shared_complex_buffer.png b/ComputeGraph/documentation/shared_complex_buffer.png new file mode 100644 index 0000000000000000000000000000000000000000..97b48e69c0695ce2087aaa1efda8652b643b7a5b GIT binary patch literal 5998 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 literal 0 HcmV?d00001 diff --git a/ComputeGraph/examples/cyclo/AppNodes.h b/ComputeGraph/examples/cyclo/AppNodes.h index a35f43e7..e8ab0ed8 100644 --- a/ComputeGraph/examples/cyclo/AppNodes.h +++ b/ComputeGraph/examples/cyclo/AppNodes.h @@ -1,15 +1,12 @@ /* ---------------------------------------------------------------------- * Project: CMSIS DSP Library * Title: AppNodes.h - * Description: Application nodes for Example 1 - * - * $Date: 29 July 2021 - * $Revision: V1.10.0 + * Description: Application nodes for Example cyclo * * Target Processor: Cortex-M and Cortex-A cores * -------------------------------------------------------------------- */ /* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/example1/AppNodes.h b/ComputeGraph/examples/example1/AppNodes.h index 653d5e82..0d1f1b95 100644 --- a/ComputeGraph/examples/example1/AppNodes.h +++ b/ComputeGraph/examples/example1/AppNodes.h @@ -3,13 +3,10 @@ * Title: AppNodes.h * Description: Application nodes for Example 1 * - * $Date: 29 July 2021 - * $Revision: V1.10.0 - * * Target Processor: Cortex-M and Cortex-A cores * -------------------------------------------------------------------- */ /* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/example10/AppNodes.h b/ComputeGraph/examples/example10/AppNodes.h index aa3111d8..47e21fdc 100644 --- a/ComputeGraph/examples/example10/AppNodes.h +++ b/ComputeGraph/examples/example10/AppNodes.h @@ -1,15 +1,12 @@ /* ---------------------------------------------------------------------- * Project: CMSIS DSP Library * Title: AppNodes.h - * Description: Application nodes for Example 1 - * - * $Date: 29 July 2021 - * $Revision: V1.10.0 + * Description: Application nodes for Example 10 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/example2/AppNodes.h b/ComputeGraph/examples/example2/AppNodes.h index 28f1a430..5481d572 100644 --- a/ComputeGraph/examples/example2/AppNodes.h +++ b/ComputeGraph/examples/example2/AppNodes.h @@ -3,13 +3,11 @@ * Title: AppNodes.h * Description: Application nodes for Example 2 * - * $Date: 29 July 2021 - * $Revision: V1.10.0 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/example3/AppNodes.h b/ComputeGraph/examples/example3/AppNodes.h index 6136701b..7df66010 100644 --- a/ComputeGraph/examples/example3/AppNodes.h +++ b/ComputeGraph/examples/example3/AppNodes.h @@ -3,13 +3,10 @@ * Title: AppNodes.h * Description: Application nodes for Example 3 * - * $Date: 29 July 2021 - * $Revision: V1.10.0 - * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- +* + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/example4/appnodes.py b/ComputeGraph/examples/example4/appnodes.py index 2e2a85fb..7c1d6da8 100644 --- a/ComputeGraph/examples/example4/appnodes.py +++ b/ComputeGraph/examples/example4/appnodes.py @@ -3,13 +3,11 @@ # Title: appnodes.py # Description: Application nodes for Example 4 # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/ComputeGraph/examples/example5/appnodes.py b/ComputeGraph/examples/example5/appnodes.py index c7f7667b..bbc5cc04 100644 --- a/ComputeGraph/examples/example5/appnodes.py +++ b/ComputeGraph/examples/example5/appnodes.py @@ -1,15 +1,12 @@ ########################################### # Project: CMSIS DSP Library # Title: appnodes.py -# Description: Application nodes for Example 4 -# -# $Date: 29 July 2021 -# $Revision: V1.10.0 +# Description: Application nodes for Example 5 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/ComputeGraph/examples/example6/AppNodes.h b/ComputeGraph/examples/example6/AppNodes.h index e7c58343..b989dc14 100644 --- a/ComputeGraph/examples/example6/AppNodes.h +++ b/ComputeGraph/examples/example6/AppNodes.h @@ -3,13 +3,10 @@ * Title: AppNodes.h * Description: Application nodes for Example 6 * - * $Date: 29 July 2021 - * $Revision: V1.10.0 - * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/example7/appnodes.py b/ComputeGraph/examples/example7/appnodes.py index 42fd62ea..f21604c0 100644 --- a/ComputeGraph/examples/example7/appnodes.py +++ b/ComputeGraph/examples/example7/appnodes.py @@ -1,15 +1,12 @@ ########################################### # Project: CMSIS DSP Library # Title: appnodes.py -# Description: Application nodes for Example 4 -# -# $Date: 29 July 2021 -# $Revision: V1.10.0 +# Description: Application nodes for Example 7 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2022 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/ComputeGraph/examples/example8/AppNodes.h b/ComputeGraph/examples/example8/AppNodes.h index d818ba65..f115b36f 100644 --- a/ComputeGraph/examples/example8/AppNodes.h +++ b/ComputeGraph/examples/example8/AppNodes.h @@ -1,14 +1,11 @@ /* ---------------------------------------------------------------------- * Project: CMSIS DSP Library * Title: AppNodes.h - * Description: Application nodes for Example 1 - * - * $Date: 29 July 2021 - * $Revision: V1.10.0 + * Description: Application nodes for Example 8 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* + * -------------------------------------------------------------------- +* * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 diff --git a/ComputeGraph/examples/example8/appnodes.py b/ComputeGraph/examples/example8/appnodes.py index 67125505..992a326e 100644 --- a/ComputeGraph/examples/example8/appnodes.py +++ b/ComputeGraph/examples/example8/appnodes.py @@ -1,15 +1,13 @@ ########################################### # Project: CMSIS DSP Library # Title: appnodes.py -# Description: Application nodes for Example 4 +# Description: Application nodes for Example 8 # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/ComputeGraph/examples/example9/AppNodes.h b/ComputeGraph/examples/example9/AppNodes.h index b90c1a76..50091812 100644 --- a/ComputeGraph/examples/example9/AppNodes.h +++ b/ComputeGraph/examples/example9/AppNodes.h @@ -1,15 +1,12 @@ /* ---------------------------------------------------------------------- * Project: CMSIS DSP Library * Title: AppNodes.h - * Description: Application nodes for Example 1 - * - * $Date: 29 July 2021 - * $Revision: V1.10.0 + * Description: Application nodes for Example 9 * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- +* + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/simple/AppNodes.h b/ComputeGraph/examples/simple/AppNodes.h index f5f65c23..7edc0181 100644 --- a/ComputeGraph/examples/simple/AppNodes.h +++ b/ComputeGraph/examples/simple/AppNodes.h @@ -1,15 +1,12 @@ /* ---------------------------------------------------------------------- * Project: CMSIS DSP Library * Title: AppNodes.h - * Description: Application nodes for Example 1 - * - * $Date: 29 July 2021 - * $Revision: V1.10.0 + * Description: Application nodes for Example simple * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- +* + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/ComputeGraph/examples/simpledsp/AppNodes.h b/ComputeGraph/examples/simpledsp/AppNodes.h index f5f65c23..728310d3 100644 --- a/ComputeGraph/examples/simpledsp/AppNodes.h +++ b/ComputeGraph/examples/simpledsp/AppNodes.h @@ -1,15 +1,12 @@ /* ---------------------------------------------------------------------- * Project: CMSIS DSP Library * Title: AppNodes.h - * Description: Application nodes for Example 1 - * - * $Date: 29 July 2021 - * $Revision: V1.10.0 + * Description: Application nodes for Example simpledsp * * Target Processor: Cortex-M and Cortex-A cores - * -------------------------------------------------------------------- */ -/* - * Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. + * -------------------------------------------------------------------- + * + * Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * diff --git a/cmsisdsp/cg/nodes/CFFT.py b/cmsisdsp/cg/nodes/CFFT.py index fc710b03..31d94e6b 100644 --- a/cmsisdsp/cg/nodes/CFFT.py +++ b/cmsisdsp/cg/nodes/CFFT.py @@ -3,13 +3,11 @@ # Title: CFFTF.py # Description: Node for CMSIS-DSP cfft # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/Duplicate.py b/cmsisdsp/cg/nodes/Duplicate.py index aa977999..063bd4ef 100644 --- a/cmsisdsp/cg/nodes/Duplicate.py +++ b/cmsisdsp/cg/nodes/Duplicate.py @@ -3,12 +3,11 @@ # Title: Duplicate.py # Description: Duplicate nodes # -# $Date: 08 September 2022 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/ICFFT.py b/cmsisdsp/cg/nodes/ICFFT.py index 575b1b22..95b243bc 100644 --- a/cmsisdsp/cg/nodes/ICFFT.py +++ b/cmsisdsp/cg/nodes/ICFFT.py @@ -3,13 +3,11 @@ # Title: ICFFT.py # Description: Node for CMSIS-DSP icfft f32 # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/InterleavedStereoToMono.py b/cmsisdsp/cg/nodes/InterleavedStereoToMono.py index 10e9d126..14d5f6b6 100644 --- a/cmsisdsp/cg/nodes/InterleavedStereoToMono.py +++ b/cmsisdsp/cg/nodes/InterleavedStereoToMono.py @@ -3,13 +3,11 @@ # Title: InterleavedStereoToMono.py # Description: Interleaved Stereo to mono in Q15 # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/MFCC.py b/cmsisdsp/cg/nodes/MFCC.py index e90f2345..e424835b 100644 --- a/cmsisdsp/cg/nodes/MFCC.py +++ b/cmsisdsp/cg/nodes/MFCC.py @@ -3,13 +3,11 @@ # Title: MFCC.py # Description: Node for CMSIS-DSP MFCC # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/NullSink.py b/cmsisdsp/cg/nodes/NullSink.py index 27133448..d5d23aae 100644 --- a/cmsisdsp/cg/nodes/NullSink.py +++ b/cmsisdsp/cg/nodes/NullSink.py @@ -3,13 +3,11 @@ # Title: NullSink.py # Description: Null sink doing nothing for debug # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/ToComplex.py b/cmsisdsp/cg/nodes/ToComplex.py index d8d696e1..b4b9e68a 100644 --- a/cmsisdsp/cg/nodes/ToComplex.py +++ b/cmsisdsp/cg/nodes/ToComplex.py @@ -3,13 +3,11 @@ # Title: ToComplex.py # Description: Node to convert real to complex # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/ToReal.py b/cmsisdsp/cg/nodes/ToReal.py index 9a65ac61..a83adc70 100644 --- a/cmsisdsp/cg/nodes/ToReal.py +++ b/cmsisdsp/cg/nodes/ToReal.py @@ -3,13 +3,11 @@ # Title: ToReal.py # Description: Node to convert complex to real # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/Unzip.py b/cmsisdsp/cg/nodes/Unzip.py index f3f98395..062e8003 100644 --- a/cmsisdsp/cg/nodes/Unzip.py +++ b/cmsisdsp/cg/nodes/Unzip.py @@ -3,13 +3,11 @@ # Title: Unzip.py # Description: Unzip streams # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/Zip.py b/cmsisdsp/cg/nodes/Zip.py index dedfa023..40e620e6 100644 --- a/cmsisdsp/cg/nodes/Zip.py +++ b/cmsisdsp/cg/nodes/Zip.py @@ -3,13 +3,11 @@ # Title: Zip.py # Description: Zip two streams # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/__init__.py b/cmsisdsp/cg/nodes/__init__.py index a6459239..60cbc121 100644 --- a/cmsisdsp/cg/nodes/__init__.py +++ b/cmsisdsp/cg/nodes/__init__.py @@ -3,13 +3,11 @@ # Title: __init__.py # Description: CG default nodes # -# $Date: 30 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/host/FileSink.py b/cmsisdsp/cg/nodes/host/FileSink.py index 612fd282..45477eeb 100644 --- a/cmsisdsp/cg/nodes/host/FileSink.py +++ b/cmsisdsp/cg/nodes/host/FileSink.py @@ -3,13 +3,11 @@ # Title: FileSink.py # Description: Node for creating file sinks # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/host/FileSource.py b/cmsisdsp/cg/nodes/host/FileSource.py index 348684e3..0a1288d0 100644 --- a/cmsisdsp/cg/nodes/host/FileSource.py +++ b/cmsisdsp/cg/nodes/host/FileSource.py @@ -3,13 +3,11 @@ # Title: FileSource.py # Description: Node for creating file source # -# $Date: 30 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/host/NumpySink.py b/cmsisdsp/cg/nodes/host/NumpySink.py index c69eacde..e8f1408b 100644 --- a/cmsisdsp/cg/nodes/host/NumpySink.py +++ b/cmsisdsp/cg/nodes/host/NumpySink.py @@ -3,13 +3,11 @@ # Title: NumpySink.py # Description: Sink node for displaying a buffer in scipy # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/host/WavSink.py b/cmsisdsp/cg/nodes/host/WavSink.py index 2ba6519c..f0a6df93 100644 --- a/cmsisdsp/cg/nodes/host/WavSink.py +++ b/cmsisdsp/cg/nodes/host/WavSink.py @@ -3,13 +3,11 @@ # Title: WavSink.py # Description: Sink node for creating a wav # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/host/WavSource.py b/cmsisdsp/cg/nodes/host/WavSource.py index 271bdf3d..70dbe548 100644 --- a/cmsisdsp/cg/nodes/host/WavSource.py +++ b/cmsisdsp/cg/nodes/host/WavSource.py @@ -3,13 +3,11 @@ # Title: WavSource.py # Description: Source node for reading wave files # -# $Date: 06 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/host/message.py b/cmsisdsp/cg/nodes/host/message.py index f7c77704..317cdc84 100644 --- a/cmsisdsp/cg/nodes/host/message.py +++ b/cmsisdsp/cg/nodes/host/message.py @@ -1,5 +1,5 @@ # -------------------------------------------------------------------------- -# Copyright (c) 2020-2022 Arm Limited (or its affiliates). All rights reserved. +# Copyright (c) 2021-2023 Arm Limited (or its affiliates). All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/nodes/simu.py b/cmsisdsp/cg/nodes/simu.py index 5afef587..5b91fd7a 100644 --- a/cmsisdsp/cg/nodes/simu.py +++ b/cmsisdsp/cg/nodes/simu.py @@ -3,13 +3,11 @@ # Title: simu.py # Description: Support Python classes for the Python static scheduler # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/scheduler/config.py b/cmsisdsp/cg/scheduler/config.py index 04558a02..41bd2eef 100644 --- a/cmsisdsp/cg/scheduler/config.py +++ b/cmsisdsp/cg/scheduler/config.py @@ -3,13 +3,11 @@ # Title: config.py # Description: Configuration of the code generator # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/scheduler/description.py b/cmsisdsp/cg/scheduler/description.py index 24cd3a25..90f71fd7 100644 --- a/cmsisdsp/cg/scheduler/description.py +++ b/cmsisdsp/cg/scheduler/description.py @@ -3,13 +3,11 @@ # Title: description.py # Description: Schedule generation # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2023 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/scheduler/graphviz.py b/cmsisdsp/cg/scheduler/graphviz.py index 242b47f3..f4a268d3 100644 --- a/cmsisdsp/cg/scheduler/graphviz.py +++ b/cmsisdsp/cg/scheduler/graphviz.py @@ -3,13 +3,11 @@ # Title: graphviz.py # Description: Graphviz generation for the CG Static scheduler # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/scheduler/node.py b/cmsisdsp/cg/scheduler/node.py index 117a08e0..0889f779 100644 --- a/cmsisdsp/cg/scheduler/node.py +++ b/cmsisdsp/cg/scheduler/node.py @@ -3,13 +3,11 @@ # Title: node.py # Description: Node class for description of dataflow graph # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/scheduler/pythoncode.py b/cmsisdsp/cg/scheduler/pythoncode.py index 9d0dddb0..544b1122 100644 --- a/cmsisdsp/cg/scheduler/pythoncode.py +++ b/cmsisdsp/cg/scheduler/pythoncode.py @@ -3,13 +3,11 @@ # Title: pythoncode.py # Description: Generation of Python code for the static scheduler # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/scheduler/standard.py b/cmsisdsp/cg/scheduler/standard.py index 844800c6..20556ae1 100644 --- a/cmsisdsp/cg/scheduler/standard.py +++ b/cmsisdsp/cg/scheduler/standard.py @@ -3,13 +3,11 @@ # Title: standard.py # Description: Standard nodes to describe a network # -# $Date: 02 August 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 # diff --git a/cmsisdsp/cg/types.py b/cmsisdsp/cg/types.py index d18fe052..a5041639 100644 --- a/cmsisdsp/cg/types.py +++ b/cmsisdsp/cg/types.py @@ -3,13 +3,11 @@ # Title: types.py # Description: Description of the basic CMSIS-DSP types # -# $Date: 29 July 2021 -# $Revision: V1.10.0 # # Target Processor: Cortex-M and Cortex-A cores # -------------------------------------------------------------------- */ # -# Copyright (C) 2010-2021 ARM Limited or its affiliates. All rights reserved. +# Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved. # # SPDX-License-Identifier: Apache-2.0 #