1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "ReshapeTestImpl.hpp"
7 #include "ElementwiseUnaryTestImpl.hpp"
8
9
10 template<armnn::DataType ArmnnType, typename T>
Rsqrt2dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)11 LayerTestResult<T, 2> Rsqrt2dTest(
12 armnn::IWorkloadFactory& workloadFactory,
13 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
14 const armnn::ITensorHandleFactory& tensorHandleFactory)
15 {
16 const unsigned int inputShape[] = { 2, 2 };
17
18 std::vector<float> inputValues
19 {
20 1.f, 4.f,
21 16.f, 25.f
22 };
23
24 std::vector<float> expectedOutputValues
25 {
26 1.f, 0.5f,
27 0.25f, 0.2f
28 };
29
30 return ElementwiseUnaryTestHelper<2, ArmnnType>(
31 workloadFactory,
32 memoryManager,
33 armnn::UnaryOperation::Rsqrt,
34 inputShape,
35 inputValues,
36 inputShape,
37 expectedOutputValues,
38 tensorHandleFactory);
39 }
40
41 template<armnn::DataType ArmnnType, typename T>
Rsqrt3dTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)42 LayerTestResult<T, 3> Rsqrt3dTest(
43 armnn::IWorkloadFactory& workloadFactory,
44 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
45 const armnn::ITensorHandleFactory& tensorHandleFactory)
46 {
47 const unsigned int inputShape[] = { 3, 1, 2 };
48
49 std::vector<float> inputValues
50 {
51 1.f, 4.f, 16.f,
52 25.f, 64.f, 100.f
53 };
54
55 std::vector<float> expectedOutputValues
56 {
57 1.f, 0.5f, 0.25f,
58 0.2f, 0.125f, 0.1f
59 };
60
61 return ElementwiseUnaryTestHelper<3, ArmnnType>(
62 workloadFactory,
63 memoryManager,
64 armnn::UnaryOperation::Rsqrt,
65 inputShape,
66 inputValues,
67 inputShape,
68 expectedOutputValues,
69 tensorHandleFactory);
70 }
71
72 template<armnn::DataType ArmnnType, typename T>
RsqrtZeroTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)73 LayerTestResult<T, 2> RsqrtZeroTest(
74 armnn::IWorkloadFactory& workloadFactory,
75 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
76 const armnn::ITensorHandleFactory& tensorHandleFactory)
77 {
78 const unsigned int inputShape[] = { 1, 2 };
79
80 std::vector<float> inputValues
81 {
82 0.f, -0.f
83 };
84
85 std::vector<float> expectedOutputValues
86 {
87 INFINITY, -INFINITY
88 };
89
90 return ElementwiseUnaryTestHelper<2, ArmnnType>(
91 workloadFactory,
92 memoryManager,
93 armnn::UnaryOperation::Rsqrt,
94 inputShape,
95 inputValues,
96 inputShape,
97 expectedOutputValues,
98 tensorHandleFactory);
99 }
100
101 template<armnn::DataType ArmnnType, typename T>
RsqrtNegativeTest(armnn::IWorkloadFactory & workloadFactory,const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager,const armnn::ITensorHandleFactory & tensorHandleFactory)102 LayerTestResult<T, 2> RsqrtNegativeTest(
103 armnn::IWorkloadFactory& workloadFactory,
104 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
105 const armnn::ITensorHandleFactory& tensorHandleFactory)
106 {
107 const unsigned int inputShape[] = { 1, 2 };
108
109 std::vector<float> inputValues
110 {
111 -25.f, -16.f
112 };
113
114 std::vector<float> expectedOutputValues
115 {
116 -NAN, -NAN
117 };
118
119 return ElementwiseUnaryTestHelper<2, ArmnnType>(
120 workloadFactory,
121 memoryManager,
122 armnn::UnaryOperation::Rsqrt,
123 inputShape,
124 inputValues,
125 inputShape,
126 expectedOutputValues,
127 tensorHandleFactory);
128 }
129
130 //
131 // Explicit template specializations
132 //
133
134 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
135 Rsqrt2dTest<armnn::DataType::Float32>(
136 armnn::IWorkloadFactory& workloadFactory,
137 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
138 const armnn::ITensorHandleFactory& tensorHandleFactory);
139
140 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 2>
141 Rsqrt2dTest<armnn::DataType::Float16>(
142 armnn::IWorkloadFactory& workloadFactory,
143 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
144 const armnn::ITensorHandleFactory& tensorHandleFactory);
145
146 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 2>
147 Rsqrt2dTest<armnn::DataType::QAsymmS8>(
148 armnn::IWorkloadFactory& workloadFactory,
149 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
150 const armnn::ITensorHandleFactory& tensorHandleFactory);
151
152 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 2>
153 Rsqrt2dTest<armnn::DataType::QAsymmU8>(
154 armnn::IWorkloadFactory& workloadFactory,
155 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
156 const armnn::ITensorHandleFactory& tensorHandleFactory);
157
158 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 2>
159 Rsqrt2dTest<armnn::DataType::QSymmS16>(
160 armnn::IWorkloadFactory& workloadFactory,
161 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
162 const armnn::ITensorHandleFactory& tensorHandleFactory);
163
164 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 3>
165 Rsqrt3dTest<armnn::DataType::Float32>(
166 armnn::IWorkloadFactory& workloadFactory,
167 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
168 const armnn::ITensorHandleFactory& tensorHandleFactory);
169
170 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float16>, 3>
171 Rsqrt3dTest<armnn::DataType::Float16>(
172 armnn::IWorkloadFactory& workloadFactory,
173 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
174 const armnn::ITensorHandleFactory& tensorHandleFactory);
175
176 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmS8>, 3>
177 Rsqrt3dTest<armnn::DataType::QAsymmS8>(
178 armnn::IWorkloadFactory& workloadFactory,
179 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
180 const armnn::ITensorHandleFactory& tensorHandleFactory);
181
182 template LayerTestResult<armnn::ResolveType<armnn::DataType::QAsymmU8>, 3>
183 Rsqrt3dTest<armnn::DataType::QAsymmU8>(
184 armnn::IWorkloadFactory& workloadFactory,
185 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
186 const armnn::ITensorHandleFactory& tensorHandleFactory);
187
188 template LayerTestResult<armnn::ResolveType<armnn::DataType::QSymmS16>, 3>
189 Rsqrt3dTest<armnn::DataType::QSymmS16>(
190 armnn::IWorkloadFactory& workloadFactory,
191 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
192 const armnn::ITensorHandleFactory& tensorHandleFactory);
193
194 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
195 RsqrtZeroTest<armnn::DataType::Float32>(
196 armnn::IWorkloadFactory& workloadFactory,
197 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
198 const armnn::ITensorHandleFactory& tensorHandleFactory);
199
200 template LayerTestResult<armnn::ResolveType<armnn::DataType::Float32>, 2>
201 RsqrtNegativeTest<armnn::DataType::Float32>(
202 armnn::IWorkloadFactory& workloadFactory,
203 const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager,
204 const armnn::ITensorHandleFactory& tensorHandleFactory);
205