Skip to content

Commit d760b35

Browse files
Added some tests for the ComputeGraph.
1 parent 5ca0d34 commit d760b35

File tree

110 files changed

+11393
-7
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+11393
-7
lines changed

ComputeGraph/FAQ.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
# FAQ
22

3+
## Table of contents
4+
5+
* [Alignment](#alignment)
6+
* [Memory sharing](#memory-sharing-example)
7+
* [Latencies](#latencies)
8+
* [Performances](#performances)
9+
310
## Alignment
411

512
When the `memoryOptimization` mode is enabled, the memory can be shared between different FIFOs (when the FIFOs are in fact used as simple arrays).

ComputeGraph/cg/nodes/cpp/CFFT.h

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class CFFT<float32_t,inputSize,float32_t,inputSize>: public GenericNode<float32_
3939
{
4040
public:
4141
CFFT(FIFOBase<float32_t> &src,FIFOBase<float32_t> &dst):GenericNode<float32_t,inputSize,float32_t,inputSize>(src,dst){
42-
arm_status status;
4342
status=arm_cfft_init_f32(&sfft,inputSize>>1);
4443
};
4544

@@ -57,6 +56,10 @@ class CFFT<float32_t,inputSize,float32_t,inputSize>: public GenericNode<float32_
5756

5857
int run() final
5958
{
59+
if (status!=ARM_MATH_SUCCESS)
60+
{
61+
return(CG_INIT_FAILURE);
62+
}
6063
float32_t *a=this->getReadBuffer();
6164
float32_t *b=this->getWriteBuffer();
6265
memcpy((void*)b,(void*)a,inputSize*sizeof(float32_t));
@@ -65,6 +68,7 @@ class CFFT<float32_t,inputSize,float32_t,inputSize>: public GenericNode<float32_
6568
};
6669

6770
arm_cfft_instance_f32 sfft;
71+
arm_status status;
6872

6973
};
7074

@@ -79,7 +83,6 @@ class CFFT<float16_t,inputSize,float16_t,inputSize>: public GenericNode<float16_
7983
{
8084
public:
8185
CFFT(FIFOBase<float16_t> &src,FIFOBase<float16_t> &dst):GenericNode<float16_t,inputSize,float16_t,inputSize>(src,dst){
82-
arm_status status;
8386
status=arm_cfft_init_f16(&sfft,inputSize>>1);
8487
};
8588

@@ -97,6 +100,10 @@ class CFFT<float16_t,inputSize,float16_t,inputSize>: public GenericNode<float16_
97100

98101
int run() final
99102
{
103+
if (status!=ARM_MATH_SUCCESS)
104+
{
105+
return(CG_INIT_FAILURE);
106+
}
100107
float16_t *a=this->getReadBuffer();
101108
float16_t *b=this->getWriteBuffer();
102109
memcpy((void*)b,(void*)a,inputSize*sizeof(float16_t));
@@ -105,6 +112,7 @@ class CFFT<float16_t,inputSize,float16_t,inputSize>: public GenericNode<float16_
105112
};
106113

107114
arm_cfft_instance_f16 sfft;
115+
arm_status status;
108116

109117
};
110118
#endif
@@ -118,7 +126,6 @@ class CFFT<q15_t,inputSize,q15_t,inputSize>: public GenericNode<q15_t,inputSize,
118126
{
119127
public:
120128
CFFT(FIFOBase<q15_t> &src,FIFOBase<q15_t> &dst):GenericNode<q15_t,inputSize,q15_t,inputSize>(src,dst){
121-
arm_status status;
122129
status=arm_cfft_init_q15(&sfft,inputSize>>1);
123130
};
124131

@@ -136,6 +143,10 @@ class CFFT<q15_t,inputSize,q15_t,inputSize>: public GenericNode<q15_t,inputSize,
136143

137144
int run() final
138145
{
146+
if (status!=ARM_MATH_SUCCESS)
147+
{
148+
return(CG_INIT_FAILURE);
149+
}
139150
q15_t *a=this->getReadBuffer();
140151
q15_t *b=this->getWriteBuffer();
141152
memcpy((void*)b,(void*)a,inputSize*sizeof(q15_t));
@@ -144,6 +155,7 @@ class CFFT<q15_t,inputSize,q15_t,inputSize>: public GenericNode<q15_t,inputSize,
144155
};
145156

146157
arm_cfft_instance_q15 sfft;
158+
arm_status status;
147159

148160
};
149161

ComputeGraph/cg/nodes/cpp/ICFFT.h

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ class ICFFT<float32_t,inputSize,float32_t,inputSize>: public GenericNode<float32
3939
{
4040
public:
4141
ICFFT(FIFOBase<float32_t> &src,FIFOBase<float32_t> &dst):GenericNode<float32_t,inputSize,float32_t,inputSize>(src,dst){
42-
arm_status status;
4342
status=arm_cfft_init_f32(&sifft,inputSize>>1);
4443
};
4544

@@ -57,6 +56,10 @@ class ICFFT<float32_t,inputSize,float32_t,inputSize>: public GenericNode<float32
5756

5857
int run() final
5958
{
59+
if (status!=ARM_MATH_SUCCESS)
60+
{
61+
return(CG_INIT_FAILURE);
62+
}
6063
float32_t *a=this->getReadBuffer();
6164
float32_t *b=this->getWriteBuffer();
6265
memcpy((void*)b,(void*)a,inputSize*sizeof(float32_t));
@@ -65,6 +68,7 @@ class ICFFT<float32_t,inputSize,float32_t,inputSize>: public GenericNode<float32
6568
};
6669

6770
arm_cfft_instance_f32 sifft;
71+
arm_status status;
6872

6973
};
7074

@@ -79,7 +83,6 @@ class ICFFT<float16_t,inputSize,float16_t,inputSize>: public GenericNode<float16
7983
{
8084
public:
8185
ICFFT(FIFOBase<float16_t> &src,FIFOBase<float16_t> &dst):GenericNode<float16_t,inputSize,float16_t,inputSize>(src,dst){
82-
arm_status status;
8386
status=arm_cfft_init_f16(&sifft,inputSize>>1);
8487
};
8588

@@ -97,6 +100,10 @@ class ICFFT<float16_t,inputSize,float16_t,inputSize>: public GenericNode<float16
97100

98101
int run() final
99102
{
103+
if (status!=ARM_MATH_SUCCESS)
104+
{
105+
return(CG_INIT_FAILURE);
106+
}
100107
float16_t *a=this->getReadBuffer();
101108
float16_t *b=this->getWriteBuffer();
102109
memcpy((void*)b,(void*)a,inputSize*sizeof(float16_t));
@@ -105,6 +112,7 @@ class ICFFT<float16_t,inputSize,float16_t,inputSize>: public GenericNode<float16
105112
};
106113

107114
arm_cfft_instance_f16 sifft;
115+
arm_status status;
108116

109117
};
110118
#endif
@@ -119,7 +127,6 @@ class ICFFT<q15_t,inputSize,q15_t,inputSize>: public GenericNode<q15_t,inputSize
119127
{
120128
public:
121129
ICFFT(FIFOBase<q15_t> &src,FIFOBase<q15_t> &dst):GenericNode<q15_t,inputSize,q15_t,inputSize>(src,dst){
122-
arm_status status;
123130
status=arm_cfft_init_q15(&sifft,inputSize>>1);
124131
};
125132

@@ -137,14 +144,19 @@ class ICFFT<q15_t,inputSize,q15_t,inputSize>: public GenericNode<q15_t,inputSize
137144

138145
int run() final
139146
{
147+
if (status!=ARM_MATH_SUCCESS)
148+
{
149+
return(CG_INIT_FAILURE);
150+
}
140151
q15_t *a=this->getReadBuffer();
141152
q15_t *b=this->getWriteBuffer();
142153
memcpy((void*)b,(void*)a,inputSize*sizeof(q15_t));
143154
arm_cfft_q15(&sifft,b,1,1);
144155
return(0);
145156
};
146157

147-
arm_cfft_instance_f32 sifft;
158+
arm_cfft_instance_q15 sifft;
159+
arm_status status;
148160

149161
};
150162
#endif

ComputeGraph/tests/.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cprj/out
2+
cprj/tmp
3+
__pycache__
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
core_clk.mul=50000000
2+
mps3_board.visualisation.disable-visualisation=1
3+
cpu0.semihosting-enable=0
4+
cpu0.FPU=1
5+
cpu0.MVE=2
6+
cpu0.SAU=0
7+
cpu0.SECEXT=1
8+
cpu0.INITSVTOR=0
9+
cpu0.INITNSVTOR=0

ComputeGraph/tests/AppNodes.h

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
/* ----------------------------------------------------------------------
2+
* Project: CMSIS DSP Library
3+
* Title: AppNodes.h
4+
* Description: Application nodes for Example simple
5+
*
6+
* Target Processor: Cortex-M and Cortex-A cores
7+
* --------------------------------------------------------------------
8+
*
9+
* Copyright (C) 2021-2023 ARM Limited or its affiliates. All rights reserved.
10+
*
11+
* SPDX-License-Identifier: Apache-2.0
12+
*
13+
* Licensed under the Apache License, Version 2.0 (the License); you may
14+
* not use this file except in compliance with the License.
15+
* You may obtain a copy of the License at
16+
*
17+
* www.apache.org/licenses/LICENSE-2.0
18+
*
19+
* Unless required by applicable law or agreed to in writing, software
20+
* distributed under the License is distributed on an AS IS BASIS, WITHOUT
21+
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
22+
* See the License for the specific language governing permissions and
23+
* limitations under the License.
24+
*/
25+
#ifndef _APPNODES_H_
26+
#define _APPNODES_H_
27+
28+
#include <iostream>
29+
30+
template<typename IN, int inputSize>
31+
class Sink: public GenericSink<IN, inputSize>
32+
{
33+
public:
34+
Sink(FIFOBase<IN> &src):GenericSink<IN,inputSize>(src){};
35+
36+
int prepareForRunning() final
37+
{
38+
if (this->willUnderflow())
39+
{
40+
return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution
41+
}
42+
43+
return(0);
44+
};
45+
46+
int run() final
47+
{
48+
IN *b=this->getReadBuffer();
49+
printf("Sink\n");
50+
for(int i=0;i<inputSize;i++)
51+
{
52+
std::cout << (int)b[i] << std::endl;
53+
}
54+
return(0);
55+
};
56+
57+
};
58+
59+
template<typename OUT,int outputSize>
60+
class Source: public GenericSource<OUT,outputSize>
61+
{
62+
public:
63+
Source(FIFOBase<OUT> &dst):GenericSource<OUT,outputSize>(dst){};
64+
65+
int prepareForRunning() final
66+
{
67+
if (this->willOverflow())
68+
{
69+
return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution
70+
}
71+
72+
return(0);
73+
};
74+
75+
int run() final{
76+
OUT *b=this->getWriteBuffer();
77+
78+
printf("Source\n");
79+
for(int i=0;i<outputSize;i++)
80+
{
81+
b[i] = (OUT)i;
82+
}
83+
return(0);
84+
};
85+
86+
};
87+
88+
89+
template<typename IN, int inputSize,
90+
typename OUT, int outputSize>
91+
class ProcessingNode;
92+
93+
94+
template<typename IN, int inputOutputSize>
95+
class ProcessingNode<IN,inputOutputSize,IN,inputOutputSize>: public GenericNode<IN,inputOutputSize,IN,inputOutputSize>
96+
{
97+
public:
98+
ProcessingNode(FIFOBase<IN> &src,
99+
FIFOBase<IN> &dst):GenericNode<IN,inputOutputSize,
100+
IN,inputOutputSize>(src,dst){};
101+
102+
int prepareForRunning() final
103+
{
104+
if (this->willOverflow() ||
105+
this->willUnderflow())
106+
{
107+
return(CG_SKIP_EXECUTION_ID_CODE); // Skip execution
108+
}
109+
110+
return(0);
111+
};
112+
113+
int run() final{
114+
printf("ProcessingNode\n");
115+
IN *a=this->getReadBuffer();
116+
IN *b=this->getWriteBuffer();
117+
for(int i=0;i<inputOutputSize;i++)
118+
{
119+
b[i] = a[i]+1;
120+
}
121+
return(0);
122+
};
123+
124+
};
125+
126+
127+
128+
129+
#endif

0 commit comments

Comments
 (0)