1 //
2 // Copyright © 2019-2023 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include "HalPolicy.hpp"
7 #include "DriverOptions.hpp"
8
9 namespace armnn_driver
10 {
11 namespace hal_1_2
12 {
13
14 using namespace armnn;
15
16 namespace
17 {
18
19 } // anonymous namespace
20
GetDeviceTypeFromOptions(const DriverOptions & options)21 HalPolicy::DeviceType HalPolicy::GetDeviceTypeFromOptions(const DriverOptions& options)
22 {
23 // Query backends list from the options
24 auto backends = options.GetBackends();
25 // Return first backend
26 if(backends.size()>0)
27 {
28 const auto &first_backend = backends[0];
29 if(first_backend.IsCpuAcc()||first_backend.IsCpuRef())
30 {
31 return V1_2::DeviceType::CPU;
32 }
33 else if(first_backend.IsGpuAcc())
34 {
35 return V1_2::DeviceType::GPU;
36 }
37 else
38 {
39 return V1_2::DeviceType::ACCELERATOR;
40 }
41 }
42 else
43 {
44 return V1_2::DeviceType::CPU;
45 }
46 }
47
ConvertOperation(const Operation & operation,const Model & model,ConversionData & data)48 bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, ConversionData& data)
49 {
50 switch (operation.type)
51 {
52 case V1_2::OperationType::ABS:
53 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Abs);
54 case V1_2::OperationType::ADD:
55 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Add);
56 case V1_2::OperationType::ARGMAX:
57 return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Max);
58 case V1_2::OperationType::ARGMIN:
59 return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Min);
60 case V1_2::OperationType::AVERAGE_POOL_2D:
61 return ConvertAveragePool2d(operation, model, data);
62 case V1_2::OperationType::BATCH_TO_SPACE_ND:
63 return ConvertBatchToSpaceNd(operation, model, data);
64 case V1_2::OperationType::CAST:
65 return ConvertCast(operation, model, data);
66 case V1_2::OperationType::CHANNEL_SHUFFLE:
67 return ConvertChannelShuffle(operation, model, data);
68 case V1_2::OperationType::CONCATENATION:
69 return ConvertConcatenation(operation, model, data);
70 case V1_2::OperationType::CONV_2D:
71 return ConvertConv2d(operation, model, data);
72 case V1_2::OperationType::DEPTH_TO_SPACE:
73 return ConvertDepthToSpace(operation, model, data);
74 case V1_2::OperationType::DEPTHWISE_CONV_2D:
75 return ConvertDepthwiseConv2d(operation, model, data);
76 case V1_2::OperationType::DEQUANTIZE:
77 return ConvertDequantize(operation, model, data);
78 case V1_2::OperationType::DIV:
79 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Div);
80 case V1_2::OperationType::EQUAL:
81 return ConvertComparison(operation, model, data, ComparisonOperation::Equal);
82 case V1_2::OperationType::EXP:
83 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Exp);
84 case V1_2::OperationType::EXPAND_DIMS:
85 return ConvertExpandDims(operation, model, data);
86 case V1_2::OperationType::FLOOR:
87 return ConvertFloor(operation, model, data);
88 case V1_2::OperationType::FULLY_CONNECTED:
89 return ConvertFullyConnected(operation, model, data);
90 case V1_2::OperationType::GATHER:
91 return ConvertGather(operation, model, data);
92 case V1_2::OperationType::GREATER:
93 return ConvertComparison(operation, model, data, ComparisonOperation::Greater);
94 case V1_2::OperationType::GREATER_EQUAL:
95 return ConvertComparison(operation, model, data, ComparisonOperation::GreaterOrEqual);
96 case V1_2::OperationType::GROUPED_CONV_2D:
97 return ConvertGroupedConv2d(operation, model, data);
98 case V1_2::OperationType::INSTANCE_NORMALIZATION:
99 return ConvertInstanceNormalization(operation, model, data);
100 case V1_2::OperationType::L2_NORMALIZATION:
101 return ConvertL2Normalization(operation, model, data);
102 case V1_2::OperationType::L2_POOL_2D:
103 return ConvertL2Pool2d(operation, model, data);
104 case V1_2::OperationType::LESS:
105 return ConvertComparison(operation, model, data, ComparisonOperation::Less);
106 case V1_2::OperationType::LESS_EQUAL:
107 return ConvertComparison(operation, model, data, ComparisonOperation::LessOrEqual);
108 case V1_2::OperationType::LOCAL_RESPONSE_NORMALIZATION:
109 return ConvertLocalResponseNormalization(operation, model, data);
110 case V1_2::OperationType::LOG:
111 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Log);
112 case V1_2::OperationType::LOGISTIC:
113 return ConvertLogistic(operation, model, data);
114 case V1_2::OperationType::LOG_SOFTMAX:
115 return ConvertLogSoftmax(operation, model, data);
116 case V1_2::OperationType::LSTM:
117 return ConvertLstm(operation, model, data);
118 case V1_2::OperationType::MAX_POOL_2D:
119 return ConvertMaxPool2d(operation, model, data);
120 case V1_2::OperationType::MAXIMUM:
121 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Maximum);
122 case V1_2::OperationType::MEAN:
123 return ConvertMean(operation, model, data);
124 case V1_2::OperationType::MINIMUM:
125 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Minimum);
126 case V1_2::OperationType::MUL:
127 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Mul);
128 case V1_2::OperationType::NEG:
129 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Neg);
130 case V1_2::OperationType::NOT_EQUAL:
131 return ConvertComparison(operation, model, data, ComparisonOperation::NotEqual);
132 case V1_2::OperationType::PAD:
133 return ConvertPad(operation, model, data);
134 case V1_2::OperationType::PAD_V2:
135 return ConvertPadV2(operation, model, data);
136 case V1_2::OperationType::PRELU:
137 return ConvertPrelu(operation, model, data);
138 case V1_2::OperationType::QUANTIZE:
139 return ConvertQuantize(operation, model, data);
140 case V1_2::OperationType::QUANTIZED_16BIT_LSTM:
141 return ConvertQuantized16BitLstm(operation, model, data);
142 case V1_2::OperationType::REDUCE_MAX:
143 return ConvertReduce(operation, model, data, ReduceOperation::Max);
144 case V1_2::OperationType::REDUCE_MIN:
145 return ConvertReduce(operation, model, data, ReduceOperation::Min);
146 case V1_2::OperationType::REDUCE_PROD:
147 return ConvertReduce(operation, model, data, ReduceOperation::Prod);
148 case V1_2::OperationType::REDUCE_SUM:
149 return ConvertReduce(operation, model, data, ReduceOperation::Sum);
150 case V1_2::OperationType::RELU:
151 return ConvertReLu(operation, model, data);
152 case V1_2::OperationType::RELU1:
153 return ConvertReLu1(operation, model, data);
154 case V1_2::OperationType::RELU6:
155 return ConvertReLu6(operation, model, data);
156 case V1_2::OperationType::RESHAPE:
157 return ConvertReshape(operation, model, data);
158 case V1_2::OperationType::RESIZE_BILINEAR:
159 return ConvertResize(operation, model, data, ResizeMethod::Bilinear);
160 case V1_2::OperationType::RESIZE_NEAREST_NEIGHBOR:
161 return ConvertResize(operation, model, data, ResizeMethod::NearestNeighbor);
162 case V1_2::OperationType::RSQRT:
163 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Rsqrt);
164 case V1_2::OperationType::SIN:
165 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Sin);
166 case V1_2::OperationType::SOFTMAX:
167 return ConvertSoftmax(operation, model, data);
168 case V1_2::OperationType::SPACE_TO_BATCH_ND :
169 return ConvertSpaceToBatchNd(operation, model, data);
170 case V1_2::OperationType::SPACE_TO_DEPTH:
171 return ConvertSpaceToDepth(operation, model, data);
172 case V1_2::OperationType::SQRT:
173 return ConvertSqrt(operation, model, data);
174 case V1_2::OperationType::SQUEEZE:
175 return ConvertSqueeze(operation, model, data);
176 case V1_2::OperationType::STRIDED_SLICE:
177 return ConvertStridedSlice(operation, model, data);
178 case V1_2::OperationType::SUB:
179 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Sub);
180 case V1_2::OperationType::TRANSPOSE:
181 return ConvertTranspose(operation, model, data);
182 case V1_2::OperationType::TRANSPOSE_CONV_2D:
183 return ConvertTransposeConv2d(operation, model, data);
184 case V1_2::OperationType::TANH:
185 return ConvertTanH(operation, model, data);
186 case V1_2::OperationType::UNIDIRECTIONAL_SEQUENCE_LSTM:
187 return ConvertUnidirectionalSequenceLstm(operation, model, data);
188 default:
189 return Fail("%s: Operation type %s not supported in ArmnnDriver",
190 __func__, toString(operation.type).c_str());
191 }
192 }
193
ConvertArgMinMax(const V1_2::Operation & operation,const V1_2::Model & model,ConversionData & data,armnn::ArgMinMaxFunction argMinMaxFunction)194 bool HalPolicy::ConvertArgMinMax(const V1_2::Operation& operation,
195 const V1_2::Model& model,
196 ConversionData& data,
197 armnn::ArgMinMaxFunction argMinMaxFunction)
198 {
199 ALOGV("hal_1_2::HalPolicy::ConvertArgMinMax()");
200 return ::ConvertArgMinMax<hal_1_2::HalPolicy>(operation, model, data, argMinMaxFunction);
201 }
202
ConvertAveragePool2d(const Operation & operation,const Model & model,ConversionData & data)203 bool HalPolicy::ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data)
204 {
205 ALOGV("hal_1_2::HalPolicy::ConvertAveragePool2d()");
206 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Average, model, data);
207 }
208
ConvertBatchToSpaceNd(const Operation & operation,const Model & model,ConversionData & data)209 bool HalPolicy::ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data)
210 {
211 ALOGV("hal_1_2::HalPolicy::ConvertBatchToSpaceNd()");
212 return ::ConvertBatchToSpaceNd<hal_1_2::HalPolicy>(operation, model, data);
213 }
214
ConvertCast(const Operation & operation,const Model & model,ConversionData & data)215 bool HalPolicy::ConvertCast(const Operation& operation, const Model& model, ConversionData& data)
216 {
217 ALOGV("hal_1_2::HalPolicy::ConvertCast()");
218 return ::ConvertCast<hal_1_2::HalPolicy>(operation, model, data);
219 }
220
ConvertChannelShuffle(const Operation & operation,const Model & model,ConversionData & data)221 bool HalPolicy::ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data)
222 {
223 ALOGV("hal_1_2::HalPolicy::ConvertChannelShuffle()");
224 return ::ConvertChannelShuffle<hal_1_2::HalPolicy>(operation, model, data);
225 }
226
ConvertComparison(const Operation & operation,const Model & model,ConversionData & data,ComparisonOperation comparisonOperation)227 bool HalPolicy::ConvertComparison(const Operation& operation,
228 const Model& model,
229 ConversionData& data,
230 ComparisonOperation comparisonOperation)
231 {
232 ALOGV("hal_1_2::HalPolicy::ConvertComparison()");
233 return ::ConvertComparison_1_2<hal_1_2::HalPolicy>(operation, model, data, comparisonOperation);
234 }
235
ConvertConcatenation(const Operation & operation,const Model & model,ConversionData & data)236 bool HalPolicy::ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data)
237 {
238 ALOGV("hal_1_2::HalPolicy::ConvertConcatenation()");
239 return ::ConvertConcatenation<hal_1_2::HalPolicy>(operation, model, data);
240 }
241
ConvertConv2d(const Operation & operation,const Model & model,ConversionData & data)242 bool HalPolicy::ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data)
243 {
244 ALOGV("hal_1_2::HalPolicy::ConvertConv2d()");
245 return ::ConvertConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
246 }
247
ConvertDepthToSpace(const Operation & operation,const Model & model,ConversionData & data)248 bool HalPolicy::ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data)
249 {
250 ALOGV("hal_1_2::HalPolicy::ConvertDepthToSpace()");
251 return ::ConvertDepthToSpace<hal_1_2::HalPolicy>(operation, model, data);
252 }
253
ConvertDepthwiseConv2d(const Operation & operation,const Model & model,ConversionData & data)254 bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data)
255 {
256 ALOGV("hal_1_2::HalPolicy::ConvertDepthwiseConv2d()");
257 return ::ConvertDepthwiseConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
258 }
259
ConvertDequantize(const Operation & operation,const Model & model,ConversionData & data)260 bool HalPolicy::ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data)
261 {
262 ALOGV("hal_1_2::HalPolicy::ConvertDequantize()");
263 return ::ConvertDequantize_1_2<hal_1_2::HalPolicy>(operation, model, data);
264 }
265
ConvertElementwiseBinary(const Operation & operation,const Model & model,ConversionData & data,BinaryOperation binaryOperation)266 bool HalPolicy::ConvertElementwiseBinary(const Operation& operation,
267 const Model& model,
268 ConversionData& data,
269 BinaryOperation binaryOperation)
270 {
271 ALOGV("hal_1_2::HalPolicy::ConvertElementwiseBinary()");
272 return ::ConvertElementwiseBinary<hal_1_2::HalPolicy>(operation, model, data, binaryOperation);
273 }
274
ConvertElementwiseUnary(const Operation & operation,const Model & model,ConversionData & data,UnaryOperation unaryOperation)275 bool HalPolicy::ConvertElementwiseUnary(const Operation& operation,
276 const Model& model,
277 ConversionData& data,
278 UnaryOperation unaryOperation)
279 {
280 ALOGV("hal_1_2::HalPolicy::ConvertElementwiseUnary()");
281 return ::ConvertElementwiseUnary<hal_1_2::HalPolicy>(operation, model, data, unaryOperation);
282 }
283
ConvertExpandDims(const Operation & operation,const Model & model,ConversionData & data)284 bool HalPolicy::ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data)
285 {
286 ALOGV("hal_1_2::HalPolicy::ConvertExpandDims()");
287 return ::ConvertExpandDims<hal_1_2::HalPolicy>(operation, model, data);
288 }
289
ConvertFloor(const Operation & operation,const Model & model,ConversionData & data)290 bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data)
291 {
292 ALOGV("hal_1_2::HalPolicy::ConvertFloor()");
293 return ::ConvertFloor<hal_1_2::HalPolicy>(operation, model, data);
294 }
295
ConvertFullyConnected(const Operation & operation,const Model & model,ConversionData & data)296 bool HalPolicy::ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data)
297 {
298 ALOGV("hal_1_2::HalPolicy::ConvertFullyConnected()");
299 return ::ConvertFullyConnected<hal_1_2::HalPolicy>(operation, model, data);
300 }
301
ConvertGather(const Operation & operation,const Model & model,ConversionData & data)302 bool HalPolicy::ConvertGather (const Operation& operation, const Model& model, ConversionData& data)
303 {
304 ALOGV("hal_1_2::HalPolicy::ConvertGather()");
305 return ::ConvertGather<hal_1_2::HalPolicy>(operation, model, data);
306 }
307
ConvertGroupedConv2d(const Operation & operation,const Model & model,ConversionData & data)308 bool HalPolicy::ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data)
309 {
310 ALOGV("hal_1_2::HalPolicy::ConvertGroupedConv2d()");
311 return ::ConvertGroupedConv2d<hal_1_2::HalPolicy>(operation, model, data);
312 }
313
ConvertInstanceNormalization(const Operation & operation,const Model & model,ConversionData & data)314 bool HalPolicy::ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data)
315 {
316 ALOGV("hal_1_2::HalPolicy::ConvertInstanceNormalization()");
317 return ::ConvertInstanceNormalization<hal_1_2::HalPolicy>(operation, model, data);
318 }
319
ConvertL2Normalization(const Operation & operation,const Model & model,ConversionData & data)320 bool HalPolicy::ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data)
321 {
322 ALOGV("hal_1_2::HalPolicy::ConvertL2Normalization()");
323 return ::ConvertL2Normalization<hal_1_2::HalPolicy>(operation, model, data);
324 }
325
ConvertL2Pool2d(const Operation & operation,const Model & model,ConversionData & data)326 bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
327 {
328 ALOGV("hal_1_2::HalPolicy::ConvertL2Pool2d()");
329 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::L2, model, data);
330 }
331
ConvertLocalResponseNormalization(const Operation & operation,const Model & model,ConversionData & data)332 bool HalPolicy::ConvertLocalResponseNormalization(const Operation& operation,
333 const Model& model,
334 ConversionData& data)
335 {
336 ALOGV("hal_1_2::HalPolicy::ConvertLocalResponseNormalization()");
337 return ::ConvertLocalResponseNormalization<hal_1_2::HalPolicy>(operation, model, data);
338 }
339
ConvertLogistic(const Operation & operation,const Model & model,ConversionData & data)340 bool HalPolicy::ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data)
341 {
342 ALOGV("hal_1_2::HalPolicy::ConvertLogistic()");
343 return ::ConvertLogistic<hal_1_2::HalPolicy>(operation, model, data);
344 }
345
ConvertLogSoftmax(const Operation & operation,const Model & model,ConversionData & data)346 bool HalPolicy::ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data)
347 {
348 ALOGV("hal_1_2::HalPolicy::ConvertLogSoftmax()");
349 return ::ConvertLogSoftmax<hal_1_2::HalPolicy>(operation, model, data);
350 }
351
ConvertMaxPool2d(const Operation & operation,const Model & model,ConversionData & data)352 bool HalPolicy::ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data)
353 {
354 ALOGV("hal_1_2::HalPolicy::ConvertMaxPool2d()");
355 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Max, model, data);
356 }
357
ConvertMean(const Operation & operation,const Model & model,ConversionData & data)358 bool HalPolicy::ConvertMean(const Operation& operation, const Model& model, ConversionData& data)
359 {
360 ALOGV("hal_1_2::HalPolicy::ConvertMean()");
361 return ::ConvertMean<hal_1_2::HalPolicy>(operation, model, data);
362 }
363
ConvertPad(const Operation & operation,const Model & model,ConversionData & data)364 bool HalPolicy::ConvertPad(const Operation& operation, const Model& model, ConversionData& data)
365 {
366 ALOGV("hal_1_2::HalPolicy::ConvertPad()");
367 return ::ConvertPad<hal_1_2::HalPolicy>(operation, model, data);
368 }
369
ConvertPadV2(const Operation & operation,const Model & model,ConversionData & data)370 bool HalPolicy::ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data)
371 {
372 ALOGV("hal_1_2::HalPolicy::ConvertPadV2()");
373 return ::ConvertPadV2<hal_1_2::HalPolicy>(operation, model, data);
374 }
375
ConvertPrelu(const Operation & operation,const Model & model,ConversionData & data)376 bool HalPolicy::ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data)
377 {
378 ALOGV("hal_1_2::HalPolicy::ConvertPrelu()");
379 return ::ConvertPrelu<hal_1_2::HalPolicy>(operation, model, data);
380 }
381
ConvertQuantize(const Operation & operation,const Model & model,ConversionData & data)382 bool HalPolicy::ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data)
383 {
384 ALOGV("hal_1_2::HalPolicy::ConvertQuantize()");
385 return ::ConvertQuantize<hal_1_2::HalPolicy>(operation, model, data);
386 }
387
ConvertQuantized16BitLstm(const Operation & operation,const Model & model,ConversionData & data)388 bool HalPolicy::ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data)
389 {
390 ALOGV("hal_1_2::HalPolicy::ConvertQuantized16BitLstm()");
391 return ::ConvertQuantized16BitLstm<hal_1_2::HalPolicy>(operation, model, data);
392 }
393
ConvertReduce(const Operation & operation,const Model & model,ConversionData & data,ReduceOperation reduceOperation)394 bool HalPolicy::ConvertReduce(const Operation& operation,
395 const Model& model,
396 ConversionData& data,
397 ReduceOperation reduceOperation)
398 {
399 ALOGV("hal_1_2::HalPolicy::ConvertReduce()");
400 return ::ConvertReduce<hal_1_2::HalPolicy>(operation, model, data, reduceOperation);
401 }
402
ConvertReLu(const Operation & operation,const Model & model,ConversionData & data)403 bool HalPolicy::ConvertReLu(const Operation& operation, const Model& model, ConversionData& data)
404 {
405 ALOGV("hal_1_2::HalPolicy::ConvertReLu()");
406 return ::ConvertReLu<hal_1_2::HalPolicy>(operation, model, data);
407 }
408
ConvertReLu1(const Operation & operation,const Model & model,ConversionData & data)409 bool HalPolicy::ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data)
410 {
411 ALOGV("hal_1_2::HalPolicy::ConvertReLu1()");
412 return ::ConvertReLu1<hal_1_2::HalPolicy>(operation, model, data);
413 }
414
ConvertReLu6(const Operation & operation,const Model & model,ConversionData & data)415 bool HalPolicy::ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data)
416 {
417 ALOGV("hal_1_2::HalPolicy::ConvertReLu6()");
418 return ::ConvertReLu6<hal_1_2::HalPolicy>(operation, model, data);
419 }
420
ConvertReshape(const Operation & operation,const Model & model,ConversionData & data)421 bool HalPolicy::ConvertReshape(const Operation& operation, const Model& model, ConversionData& data)
422 {
423 ALOGV("hal_1_2::HalPolicy::ConvertReshape()");
424 return ::ConvertReshape<hal_1_2::HalPolicy>(operation, model, data);
425 }
426
ConvertResize(const Operation & operation,const Model & model,ConversionData & data,ResizeMethod resizeMethod)427 bool HalPolicy::ConvertResize(const Operation& operation,
428 const Model& model,
429 ConversionData& data,
430 ResizeMethod resizeMethod)
431 {
432 ALOGV("hal_1_2::HalPolicy::ConvertResize()");
433 return ::ConvertResize<hal_1_2::HalPolicy>(operation, model, data, resizeMethod);
434 }
435
ConvertSpaceToBatchNd(const Operation & operation,const Model & model,ConversionData & data)436 bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data)
437 {
438 ALOGV("hal_1_2::HalPolicy::ConvertSpaceToBatchNd()");
439 return ::ConvertSpaceToBatchNd<hal_1_2::HalPolicy>(operation, model, data);
440 }
441
ConvertSpaceToDepth(const Operation & operation,const Model & model,ConversionData & data)442 bool HalPolicy::ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data)
443 {
444 ALOGV("hal_1_2::HalPolicy::ConvertSpaceToDepth()");
445 return ::ConvertSpaceToDepth<hal_1_2::HalPolicy>(operation, model, data);
446 }
447
ConvertSoftmax(const Operation & operation,const Model & model,ConversionData & data)448 bool HalPolicy::ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data)
449 {
450 ALOGV("hal_1_2::HalPolicy::ConvertSoftmax()");
451 return ::ConvertSoftmax<hal_1_2::HalPolicy>(operation, model, data);
452 }
453
ConvertTanH(const Operation & operation,const Model & model,ConversionData & data)454 bool HalPolicy::ConvertTanH(const Operation& operation, const Model& model, ConversionData& data)
455 {
456 ALOGV("hal_1_2::HalPolicy::ConvertTanH()");
457 return ::ConvertTanH<hal_1_2::HalPolicy>(operation, model, data);
458 }
459
ConvertLstm(const Operation & operation,const Model & model,ConversionData & data)460 bool HalPolicy::ConvertLstm(const Operation& operation, const Model& model, ConversionData& data)
461 {
462 ALOGV("hal_1_2::HalPolicy::ConvertLstm()");
463 return ::ConvertLstm<hal_1_2::HalPolicy>(operation, model, data);
464 }
465
ConvertSqrt(const Operation & operation,const Model & model,ConversionData & data)466 bool HalPolicy::ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data)
467 {
468 ALOGV("hal_1_2::HalPolicy::ConvertSqrt()");
469 ActivationDescriptor desc;
470 desc.m_Function = ActivationFunction::Sqrt;
471
472 return ::ConvertToActivation<hal_1_2::HalPolicy>(operation, __func__, desc, model, data);
473 }
474
ConvertSqueeze(const Operation & operation,const Model & model,ConversionData & data)475 bool HalPolicy::ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data)
476 {
477 ALOGV("hal_1_2::HalPolicy::ConvertSqueeze()");
478 return ::ConvertSqueeze<hal_1_2::HalPolicy>(operation, model, data);
479 }
480
ConvertStridedSlice(const Operation & operation,const Model & model,ConversionData & data)481 bool HalPolicy::ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data)
482 {
483 ALOGV("hal_1_2::HalPolicy::ConvertStridedSlice()");
484 return ::ConvertStridedSlice<hal_1_2::HalPolicy>(operation, model, data);
485 }
486
ConvertTranspose(const Operation & operation,const Model & model,ConversionData & data)487 bool HalPolicy::ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data)
488 {
489 ALOGV("hal_1_2::HalPolicy::ConvertTranspose()");
490 return ::ConvertTranspose<hal_1_2::HalPolicy>(operation, model, data);
491 }
492
ConvertTransposeConv2d(const Operation & operation,const Model & model,ConversionData & data)493 bool HalPolicy::ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data)
494 {
495 ALOGV("hal_1_2::HalPolicy::ConvertTransposeConv2d()");
496 return ::ConvertTransposeConv2d<hal_1_2::HalPolicy>(operation, model, data);
497 }
498
ConvertUnidirectionalSequenceLstm(const Operation & operation,const Model & model,ConversionData & data)499 bool HalPolicy::ConvertUnidirectionalSequenceLstm(const Operation& operation, const Model& model, ConversionData& data)
500 {
501 ALOGV("hal_1_2::HalPolicy::ConvertUnidirectionalSequenceLstm()");
502 return ::ConvertUnidirectionalSequenceLstm<hal_1_2::HalPolicy>(operation, model, data);
503 }
504
505 } // namespace hal_1_2
506 } // namespace armnn_driver
507