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