blob: 7dae6a1c2c57731ca43ab8998ac79e5488966a27 [file] [log] [blame]
Mike Kellyb5fdf382019-06-11 16:35:25 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "HalPolicy.hpp"
Pablo Tello6bf3f432021-09-01 15:30:10 +01007#include "DriverOptions.hpp"
8
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +01009
Mike Kellyb5fdf382019-06-11 16:35:25 +010010namespace armnn_driver
11{
12namespace hal_1_2
13{
14
Teresa Charlin8f6429d2019-10-01 13:10:15 +010015using namespace armnn;
16
Aron Virginas-Tar65a1b1d2019-11-15 15:59:51 +000017namespace
18{
19
Aron Virginas-Tar65a1b1d2019-11-15 15:59:51 +000020} // anonymous namespace
21
Pablo Tello6bf3f432021-09-01 15:30:10 +010022HalPolicy::DeviceType HalPolicy::GetDeviceTypeFromOptions(const DriverOptions& options)
23{
24 // Query backends list from the options
25 auto backends = options.GetBackends();
26 // Return first backend
27 if(backends.size()>0)
28 {
29 const auto &first_backend = backends[0];
30 if(first_backend.IsCpuAcc()||first_backend.IsCpuRef())
31 {
32 return V1_2::DeviceType::CPU;
33 }
34 else if(first_backend.IsGpuAcc())
35 {
36 return V1_2::DeviceType::GPU;
37 }
38 else
39 {
40 return V1_2::DeviceType::ACCELERATOR;
41 }
42 }
43 else
44 {
45 return V1_2::DeviceType::CPU;
46 }
47}
48
Mike Kellyb5fdf382019-06-11 16:35:25 +010049bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, ConversionData& data)
50{
Mike Kellyb5fdf382019-06-11 16:35:25 +010051 switch (operation.type)
52 {
Kevin May407718f2019-09-09 14:46:41 +010053 case V1_2::OperationType::ABS:
josh minor00a963b2020-01-08 11:55:35 -060054 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Abs);
Mike Kelly46272802019-08-14 17:00:48 +010055 case V1_2::OperationType::ADD:
56 return ConvertAdd(operation, model, data);
Francis Murtagh19fa0cc2019-11-19 12:06:47 +000057 case V1_2::OperationType::ARGMAX:
58 return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Max);
59 case V1_2::OperationType::ARGMIN:
60 return ConvertArgMinMax(operation, model, data, ArgMinMaxFunction::Min);
Sadik Armagan15d63e22019-07-26 16:59:35 +010061 case V1_2::OperationType::AVERAGE_POOL_2D:
62 return ConvertAveragePool2d(operation, model, data);
Finn Williams23b87b32019-07-30 11:44:05 +010063 case V1_2::OperationType::BATCH_TO_SPACE_ND:
64 return ConvertBatchToSpaceNd(operation, model, data);
Sadik Armagan92b5fd12021-04-26 09:52:06 +010065 case V1_2::OperationType::CAST:
66 return ConvertCast(operation, model, data);
Teresa Charlin7f5b51e2021-09-01 14:19:38 +010067 case V1_2::OperationType::CHANNEL_SHUFFLE:
68 return ConvertChannelShuffle(operation, model, data);
Mike Kellyb8805202019-07-31 17:25:43 +010069 case V1_2::OperationType::CONCATENATION:
70 return ConvertConcatenation(operation, model, data);
Mike Kellyb5fdf382019-06-11 16:35:25 +010071 case V1_2::OperationType::CONV_2D:
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010072 return ConvertConv2d(operation, model, data);
Aron Virginas-Tar8edb16d2019-10-01 13:34:59 +010073 case V1_2::OperationType::DEPTH_TO_SPACE:
74 return ConvertDepthToSpace(operation, model, data);
Mike Kellyb5fdf382019-06-11 16:35:25 +010075 case V1_2::OperationType::DEPTHWISE_CONV_2D:
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010076 return ConvertDepthwiseConv2d(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +010077 case V1_2::OperationType::DEQUANTIZE:
78 return ConvertDequantize(operation, model, data);
79 case V1_2::OperationType::DIV:
80 return ConvertDiv(operation, model, data);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +000081 case V1_2::OperationType::EQUAL:
82 return ConvertComparison(operation, model, data, ComparisonOperation::Equal);
Teresa Charlincb31b3b2020-09-30 18:28:18 +010083 case V1_2::OperationType::EXP:
84 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Exp);
Narumol Prangnawarat85f96542019-09-12 16:26:29 +010085 case V1_2::OperationType::EXPAND_DIMS:
86 return ConvertExpandDims(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +010087 case V1_2::OperationType::FLOOR:
88 return ConvertFloor(operation, model, data);
89 case V1_2::OperationType::FULLY_CONNECTED:
90 return ConvertFullyConnected(operation, model, data);
Teresa Charlinf931af92020-04-10 16:46:53 +010091 case V1_2::OperationType::GATHER:
92 return ConvertGather(operation, model, data);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +000093 case V1_2::OperationType::GREATER:
94 return ConvertComparison(operation, model, data, ComparisonOperation::Greater);
95 case V1_2::OperationType::GREATER_EQUAL:
96 return ConvertComparison(operation, model, data, ComparisonOperation::GreaterOrEqual);
Teresa Charlin8f6429d2019-10-01 13:10:15 +010097 case V1_2::OperationType::GROUPED_CONV_2D:
98 return ConvertGroupedConv2d(operation, model, data);
Aron Virginas-Tara2a73802019-10-09 15:30:40 +010099 case V1_2::OperationType::INSTANCE_NORMALIZATION:
100 return ConvertInstanceNormalization(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100101 case V1_2::OperationType::L2_NORMALIZATION:
102 return ConvertL2Normalization(operation, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100103 case V1_2::OperationType::L2_POOL_2D:
104 return ConvertL2Pool2d(operation, model, data);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000105 case V1_2::OperationType::LESS:
106 return ConvertComparison(operation, model, data, ComparisonOperation::Less);
107 case V1_2::OperationType::LESS_EQUAL:
108 return ConvertComparison(operation, model, data, ComparisonOperation::LessOrEqual);
Mike Kelly46272802019-08-14 17:00:48 +0100109 case V1_2::OperationType::LOCAL_RESPONSE_NORMALIZATION:
110 return ConvertLocalResponseNormalization(operation, model, data);
Teresa Charlin2d710022021-05-31 19:35:58 +0100111 case V1_2::OperationType::LOG:
112 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Log);
Mike Kelly46272802019-08-14 17:00:48 +0100113 case V1_2::OperationType::LOGISTIC:
114 return ConvertLogistic(operation, model, data);
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100115 case V1_2::OperationType::LOG_SOFTMAX:
116 return ConvertLogSoftmax(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100117 case V1_2::OperationType::LSTM:
118 return ConvertLstm(operation, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100119 case V1_2::OperationType::MAX_POOL_2D:
120 return ConvertMaxPool2d(operation, model, data);
Narumol Prangnawarat95b1ef62019-07-15 12:02:20 +0100121 case V1_2::OperationType::MAXIMUM:
122 return ConvertMaximum(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100123 case V1_2::OperationType::MEAN:
Sadik Armagan6a284532021-03-12 09:12:29 +0000124 return ConvertMean(operation, model, data);
Ellen Norris-Thompson1cb29aa2019-07-11 17:27:37 +0100125 case V1_2::OperationType::MINIMUM:
126 return ConvertMinimum(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100127 case V1_2::OperationType::MUL:
128 return ConvertMul(operation, model, data);
Sadik Armagancae7e922020-03-23 14:35:05 +0000129 case V1_2::OperationType::NEG:
130 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Neg);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000131 case V1_2::OperationType::NOT_EQUAL:
132 return ConvertComparison(operation, model, data, ComparisonOperation::NotEqual);
Mike Kelly3c673942019-07-25 09:26:06 +0100133 case V1_2::OperationType::PAD:
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +0100134 return ConvertPad(operation, model, data);
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100135 case V1_2::OperationType::PAD_V2:
136 return ConvertPadV2(operation, model, data);
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100137 case V1_2::OperationType::PRELU:
138 return ConvertPrelu(operation, model, data);
Sadik Armagan5a476a82019-07-30 09:43:18 +0100139 case V1_2::OperationType::QUANTIZE:
140 return ConvertQuantize(operation, model, data);
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100141 case V1_2::OperationType::QUANTIZED_16BIT_LSTM:
Sadik Armagan813f2302020-05-19 14:10:30 +0100142 return ConvertQuantized16BitLstm(operation, model, data);
Teresa Charlin89cbb3a2021-02-11 21:00:47 +0000143 case V1_2::OperationType::REDUCE_MAX:
144 return ConvertReduce(operation, model, data, ReduceOperation::Max);
145 case V1_2::OperationType::REDUCE_MIN:
146 return ConvertReduce(operation, model, data, ReduceOperation::Min);
Teresa Charlin69e38612021-08-05 12:39:37 +0100147 case V1_2::OperationType::REDUCE_PROD:
148 return ConvertReduce(operation, model, data, ReduceOperation::Prod);
Teresa Charlin89cbb3a2021-02-11 21:00:47 +0000149 case V1_2::OperationType::REDUCE_SUM:
150 return ConvertReduce(operation, model, data, ReduceOperation::Sum);
Sadik Armagan61113162019-07-25 09:09:40 +0100151 case V1_2::OperationType::RELU:
152 return ConvertReLu(operation, model, data);
153 case V1_2::OperationType::RELU1:
154 return ConvertReLu1(operation, model, data);
155 case V1_2::OperationType::RELU6:
156 return ConvertReLu6(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100157 case V1_2::OperationType::RESHAPE:
158 return ConvertReshape(operation, model, data);
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +0100159 case V1_2::OperationType::RESIZE_BILINEAR:
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100160 return ConvertResize(operation, model, data, ResizeMethod::Bilinear);
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +0100161 case V1_2::OperationType::RESIZE_NEAREST_NEIGHBOR:
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100162 return ConvertResize(operation, model, data, ResizeMethod::NearestNeighbor);
Aron Virginas-Tarfa6544e2019-09-10 14:42:22 +0100163 case V1_2::OperationType::RSQRT:
josh minor00a963b2020-01-08 11:55:35 -0600164 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Rsqrt);
Teresa Charlin2d710022021-05-31 19:35:58 +0100165 case V1_2::OperationType::SIN:
166 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Sin);
Francis Murtagh074c25a2019-07-22 16:40:57 +0100167 case V1_2::OperationType::SOFTMAX:
168 return ConvertSoftmax(operation, model, data);
Finn Williamsd74c5052019-07-30 17:06:00 +0100169 case V1_2::OperationType::SPACE_TO_BATCH_ND :
170 return ConvertSpaceToBatchNd(operation, model, data);
Aron Virginas-Tarad1ab532019-07-25 11:24:42 +0100171 case V1_2::OperationType::SPACE_TO_DEPTH:
172 return ConvertSpaceToDepth(operation, model, data);
Teresa Charlin2d710022021-05-31 19:35:58 +0100173 case V1_2::OperationType::SQRT:
174 return ConvertSqrt(operation, model, data);
175 case V1_2::OperationType::SQUEEZE:
176 return ConvertSqueeze(operation, model, data);
177 case V1_2::OperationType::STRIDED_SLICE:
178 return ConvertStridedSlice(operation, model, data);
Mike Kelly0a879362019-07-29 16:56:31 +0100179 case V1_2::OperationType::SUB:
180 return ConvertSub(operation, model, data);
Teresa Charlin2d710022021-05-31 19:35:58 +0100181 case V1_2::OperationType::TRANSPOSE:
182 return ConvertTranspose(operation, model, data);
183 case V1_2::OperationType::TRANSPOSE_CONV_2D:
184 return ConvertTransposeConv2d(operation, model, data);
Sadik Armagan61113162019-07-25 09:09:40 +0100185 case V1_2::OperationType::TANH:
186 return ConvertTanH(operation, model, data);
Cathal Corbett0fa5e6d2022-01-21 16:55:13 +0000187 case V1_2::OperationType::UNIDIRECTIONAL_SEQUENCE_LSTM:
188 return ConvertUnidirectionalSequenceLstm(operation, model, data);
Mike Kellyb5fdf382019-06-11 16:35:25 +0100189 default:
190 return Fail("%s: Operation type %s not supported in ArmnnDriver",
191 __func__, toString(operation.type).c_str());
192 }
193}
194
Mike Kelly46272802019-08-14 17:00:48 +0100195bool HalPolicy::ConvertAdd(const Operation& operation, const Model& model, ConversionData& data)
196{
197 ALOGV("hal_1_2::HalPolicy::ConvertAdd()");
198 return ::ConvertAdd<hal_1_2::HalPolicy>(operation, model, data);
199}
200
Francis Murtagh19fa0cc2019-11-19 12:06:47 +0000201bool HalPolicy::ConvertArgMinMax(const V1_2::Operation& operation,
202 const V1_2::Model& model,
203 ConversionData& data,
204 armnn::ArgMinMaxFunction argMinMaxFunction)
205{
206 ALOGV("hal_1_2::HalPolicy::ConvertArgMinMax()");
207 return ::ConvertArgMinMax<hal_1_2::HalPolicy>(operation, model, data, argMinMaxFunction);
208}
209
Sadik Armagan15d63e22019-07-26 16:59:35 +0100210bool HalPolicy::ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data)
211{
212 ALOGV("hal_1_2::HalPolicy::ConvertAveragePool2d()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100213 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Average, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100214}
215
Finn Williams23b87b32019-07-30 11:44:05 +0100216bool HalPolicy::ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data)
217{
218 ALOGV("hal_1_2::HalPolicy::ConvertBatchToSpaceNd()");
219 return ::ConvertBatchToSpaceNd<hal_1_2::HalPolicy>(operation, model, data);
220}
221
Sadik Armagan92b5fd12021-04-26 09:52:06 +0100222bool HalPolicy::ConvertCast(const Operation& operation, const Model& model, ConversionData& data)
223{
224 ALOGV("hal_1_2::HalPolicy::ConvertCast()");
225 return ::ConvertCast<hal_1_2::HalPolicy>(operation, model, data);
226}
227
Teresa Charlin7f5b51e2021-09-01 14:19:38 +0100228bool HalPolicy::ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data)
229{
230 ALOGV("hal_1_2::HalPolicy::ConvertChannelShuffle()");
231 return ::ConvertChannelShuffle<hal_1_2::HalPolicy>(operation, model, data);
232}
233
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000234bool HalPolicy::ConvertComparison(const Operation& operation,
235 const Model& model,
236 ConversionData& data,
237 ComparisonOperation comparisonOperation)
238{
239 ALOGV("hal_1_2::HalPolicy::ConvertComparison()");
Kevin May42477c12020-03-26 13:34:14 +0000240 return ::ConvertComparison_1_2<hal_1_2::HalPolicy>(operation, model, data, comparisonOperation);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000241}
242
Mike Kellyb8805202019-07-31 17:25:43 +0100243bool HalPolicy::ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data)
244{
245 ALOGV("hal_1_2::HalPolicy::ConvertConcatenation()");
246 return ::ConvertConcatenation<hal_1_2::HalPolicy>(operation, model, data);
247}
248
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100249bool HalPolicy::ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data)
250{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100251 ALOGV("hal_1_2::HalPolicy::ConvertConv2d()");
Kevin May42477c12020-03-26 13:34:14 +0000252 return ::ConvertConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100253}
254
Aron Virginas-Tar8edb16d2019-10-01 13:34:59 +0100255bool HalPolicy::ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data)
256{
257 ALOGV("hal_1_2::HalPolicy::ConvertDepthToSpace()");
258 return ::ConvertDepthToSpace<hal_1_2::HalPolicy>(operation, model, data);
259}
260
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100261bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data)
262{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100263 ALOGV("hal_1_2::HalPolicy::ConvertDepthwiseConv2d()");
Kevin May42477c12020-03-26 13:34:14 +0000264 return ::ConvertDepthwiseConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100265}
266
Mike Kelly46272802019-08-14 17:00:48 +0100267bool HalPolicy::ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data)
268{
269 ALOGV("hal_1_2::HalPolicy::ConvertDequantize()");
Kevin May42477c12020-03-26 13:34:14 +0000270 return ::ConvertDequantize_1_2<hal_1_2::HalPolicy>(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100271}
272
273bool HalPolicy::ConvertDiv(const Operation& operation, const Model& model, ConversionData& data)
274{
275 ALOGV("hal_1_2::HalPolicy::ConvertDiv()");
276 return ::ConvertDiv<hal_1_2::HalPolicy>(operation, model, data);
277}
278
josh minor00a963b2020-01-08 11:55:35 -0600279bool HalPolicy::ConvertElementwiseUnary(const Operation& operation,
280 const Model& model,
281 ConversionData& data,
282 UnaryOperation unaryOperation)
283{
284 ALOGV("hal_1_2::HalPolicy::ConvertElementwiseUnary()");
Kevin May42477c12020-03-26 13:34:14 +0000285 return ::ConvertElementwiseUnary<hal_1_2::HalPolicy>(operation, model, data, unaryOperation);
josh minor00a963b2020-01-08 11:55:35 -0600286}
287
Narumol Prangnawarat85f96542019-09-12 16:26:29 +0100288bool HalPolicy::ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data)
289{
290 ALOGV("hal_1_2::HalPolicy::ConvertExpandDims()");
Kevin May42477c12020-03-26 13:34:14 +0000291 return ::ConvertExpandDims<hal_1_2::HalPolicy>(operation, model, data);
Narumol Prangnawarat85f96542019-09-12 16:26:29 +0100292}
293
Mike Kelly46272802019-08-14 17:00:48 +0100294bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data)
295{
296 ALOGV("hal_1_2::HalPolicy::ConvertFloor()");
297 return ::ConvertFloor<hal_1_2::HalPolicy>(operation, model, data);
298}
299
300bool HalPolicy::ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data)
301{
302 ALOGV("hal_1_2::HalPolicy::ConvertFullyConnected()");
303 return ::ConvertFullyConnected<hal_1_2::HalPolicy>(operation, model, data);
304}
305
Teresa Charlinf931af92020-04-10 16:46:53 +0100306bool HalPolicy::ConvertGather (const Operation& operation, const Model& model, ConversionData& data)
307{
308 ALOGV("hal_1_2::HalPolicy::ConvertGather()");
309 return ::ConvertGather<hal_1_2::HalPolicy>(operation, model, data);
310}
311
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100312bool HalPolicy::ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data)
313{
314 ALOGV("hal_1_2::HalPolicy::ConvertGroupedConv2d()");
Kevin May42477c12020-03-26 13:34:14 +0000315 return ::ConvertGroupedConv2d<hal_1_2::HalPolicy>(operation, model, data);
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100316}
317
Aron Virginas-Tara2a73802019-10-09 15:30:40 +0100318bool HalPolicy::ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data)
319{
320 ALOGV("hal_1_2::HalPolicy::ConvertInstanceNormalization()");
Kevin May42477c12020-03-26 13:34:14 +0000321 return ::ConvertInstanceNormalization<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tara2a73802019-10-09 15:30:40 +0100322}
323
Mike Kelly46272802019-08-14 17:00:48 +0100324bool HalPolicy::ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data)
325{
326 ALOGV("hal_1_2::HalPolicy::ConvertL2Normalization()");
327 return ::ConvertL2Normalization<hal_1_2::HalPolicy>(operation, model, data);
328}
329
Sadik Armagan15d63e22019-07-26 16:59:35 +0100330bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
331{
332 ALOGV("hal_1_2::HalPolicy::ConvertL2Pool2d()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100333 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::L2, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100334}
335
Mike Kelly46272802019-08-14 17:00:48 +0100336bool HalPolicy::ConvertLocalResponseNormalization(const Operation& operation,
337 const Model& model,
338 ConversionData& data)
339{
340 ALOGV("hal_1_2::HalPolicy::ConvertLocalResponseNormalization()");
341 return ::ConvertLocalResponseNormalization<hal_1_2::HalPolicy>(operation, model, data);
342}
343
344bool HalPolicy::ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data)
345{
346 ALOGV("hal_1_2::HalPolicy::ConvertLogistic()");
347 return ::ConvertLogistic<hal_1_2::HalPolicy>(operation, model, data);
348}
349
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100350bool HalPolicy::ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data)
351{
352 ALOGV("hal_1_2::HalPolicy::ConvertLogSoftmax()");
Kevin May42477c12020-03-26 13:34:14 +0000353 return ::ConvertLogSoftmax<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100354}
355
Sadik Armagan15d63e22019-07-26 16:59:35 +0100356bool HalPolicy::ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data)
357{
358 ALOGV("hal_1_2::HalPolicy::ConvertMaxPool2d()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100359 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Max, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100360}
361
Narumol Prangnawarat95b1ef62019-07-15 12:02:20 +0100362bool HalPolicy::ConvertMaximum(const Operation& operation, const Model& model, ConversionData& data)
363{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100364 ALOGV("hal_1_2::HalPolicy::ConvertMaximum()");
Kevin May42477c12020-03-26 13:34:14 +0000365 return ::ConvertMaximum<hal_1_2::HalPolicy>(operation, model, data);
Narumol Prangnawarat95b1ef62019-07-15 12:02:20 +0100366}
367
Sadik Armagan6a284532021-03-12 09:12:29 +0000368bool HalPolicy::ConvertMean(const Operation& operation, const Model& model, ConversionData& data)
Mike Kelly46272802019-08-14 17:00:48 +0100369{
Sadik Armagan6a284532021-03-12 09:12:29 +0000370 ALOGV("hal_1_2::HalPolicy::ConvertMean()");
371 return ::ConvertMean<hal_1_2::HalPolicy>(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100372}
373
Ellen Norris-Thompson1cb29aa2019-07-11 17:27:37 +0100374bool HalPolicy::ConvertMinimum(const Operation& operation, const Model& model, ConversionData& data)
375{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100376 ALOGV("hal_1_2::HalPolicy::ConvertMinimum()");
Kevin May42477c12020-03-26 13:34:14 +0000377 return ::ConvertMinimum<hal_1_2::HalPolicy>(operation, model, data);
Ellen Norris-Thompson1cb29aa2019-07-11 17:27:37 +0100378}
379
Mike Kelly46272802019-08-14 17:00:48 +0100380bool HalPolicy::ConvertMul(const Operation& operation, const Model& model, ConversionData& data)
381{
382 ALOGV("hal_1_2::HalPolicy::ConvertMul()");
383 return ::ConvertMul<hal_1_2::HalPolicy>(operation, model, data);
384}
385
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +0100386bool HalPolicy::ConvertPad(const Operation& operation, const Model& model, ConversionData& data)
387{
388 ALOGV("hal_1_2::HalPolicy::ConvertPad()");
389 return ::ConvertPad<hal_1_2::HalPolicy>(operation, model, data);
390}
391
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100392bool HalPolicy::ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data)
393{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100394 ALOGV("hal_1_2::HalPolicy::ConvertPadV2()");
Kevin May42477c12020-03-26 13:34:14 +0000395 return ::ConvertPadV2<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100396}
397
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100398bool HalPolicy::ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data)
399{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100400 ALOGV("hal_1_2::HalPolicy::ConvertPrelu()");
Kevin May42477c12020-03-26 13:34:14 +0000401 return ::ConvertPrelu<hal_1_2::HalPolicy>(operation, model, data);
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100402}
403
Sadik Armagan5a476a82019-07-30 09:43:18 +0100404bool HalPolicy::ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data)
405{
406 ALOGV("hal_1_2::HalPolicy::ConvertQuantize()");
Kevin May42477c12020-03-26 13:34:14 +0000407 return ::ConvertQuantize<hal_1_2::HalPolicy>(operation, model, data);
Sadik Armagan5a476a82019-07-30 09:43:18 +0100408}
409
Sadik Armagan813f2302020-05-19 14:10:30 +0100410bool HalPolicy::ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data)
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100411{
Sadik Armagan813f2302020-05-19 14:10:30 +0100412 ALOGV("hal_1_2::HalPolicy::ConvertQuantized16BitLstm()");
413 return ::ConvertQuantized16BitLstm<hal_1_2::HalPolicy>(operation, model, data);
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100414}
415
Sadik Armagan6a284532021-03-12 09:12:29 +0000416bool HalPolicy::ConvertReduce(const Operation& operation,
417 const Model& model,
418 ConversionData& data,
419 ReduceOperation reduceOperation)
420{
421 ALOGV("hal_1_2::HalPolicy::ConvertReduce()");
422 return ::ConvertReduce<hal_1_2::HalPolicy>(operation, model, data, reduceOperation);
423}
424
Sadik Armagan61113162019-07-25 09:09:40 +0100425bool HalPolicy::ConvertReLu(const Operation& operation, const Model& model, ConversionData& data)
426{
427 ALOGV("hal_1_2::HalPolicy::ConvertReLu()");
428 return ::ConvertReLu<hal_1_2::HalPolicy>(operation, model, data);
429}
430
431bool HalPolicy::ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data)
432{
433 ALOGV("hal_1_2::HalPolicy::ConvertReLu1()");
434 return ::ConvertReLu1<hal_1_2::HalPolicy>(operation, model, data);
435}
436
437bool HalPolicy::ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data)
438{
439 ALOGV("hal_1_2::HalPolicy::ConvertReLu6()");
440 return ::ConvertReLu6<hal_1_2::HalPolicy>(operation, model, data);
441}
442
Mike Kelly46272802019-08-14 17:00:48 +0100443bool HalPolicy::ConvertReshape(const Operation& operation, const Model& model, ConversionData& data)
444{
445 ALOGV("hal_1_2::HalPolicy::ConvertReshape()");
446 return ::ConvertReshape<hal_1_2::HalPolicy>(operation, model, data);
447}
448
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +0100449bool HalPolicy::ConvertResize(const Operation& operation,
450 const Model& model,
451 ConversionData& data,
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100452 ResizeMethod resizeMethod)
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +0100453{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100454 ALOGV("hal_1_2::HalPolicy::ConvertResize()");
Kevin May42477c12020-03-26 13:34:14 +0000455 return ::ConvertResize<hal_1_2::HalPolicy>(operation, model, data, resizeMethod);
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +0100456}
457
Finn Williamsd74c5052019-07-30 17:06:00 +0100458bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data)
459{
460 ALOGV("hal_1_2::HalPolicy::ConvertSpaceToBatchNd()");
461 return ::ConvertSpaceToBatchNd<hal_1_2::HalPolicy>(operation, model, data);
462}
463
Keith Davisa6bc52f2019-06-26 09:39:49 +0100464bool HalPolicy::ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data)
465{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100466 ALOGV("hal_1_2::HalPolicy::ConvertSpaceToDepth()");
Kevin May42477c12020-03-26 13:34:14 +0000467 return ::ConvertSpaceToDepth<hal_1_2::HalPolicy>(operation, model, data);
Keith Davisa6bc52f2019-06-26 09:39:49 +0100468}
469
Francis Murtagh074c25a2019-07-22 16:40:57 +0100470bool HalPolicy::ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data)
471{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100472 ALOGV("hal_1_2::HalPolicy::ConvertSoftmax()");
Kevin May42477c12020-03-26 13:34:14 +0000473 return ::ConvertSoftmax<hal_1_2::HalPolicy>(operation, model, data);
Francis Murtagh074c25a2019-07-22 16:40:57 +0100474}
475
Mike Kelly0a879362019-07-29 16:56:31 +0100476bool HalPolicy::ConvertSub(const Operation& operation, const Model& model, ConversionData& data)
477{
478 ALOGV("hal_1_2::HalPolicy::ConvertSub()");
479 return ::ConvertSub<hal_1_2::HalPolicy>(operation, model, data);
480}
481
Sadik Armagan61113162019-07-25 09:09:40 +0100482bool HalPolicy::ConvertTanH(const Operation& operation, const Model& model, ConversionData& data)
483{
484 ALOGV("hal_1_2::HalPolicy::ConvertTanH()");
485 return ::ConvertTanH<hal_1_2::HalPolicy>(operation, model, data);
486}
487
Ferran Balaguerb2397fd2019-07-25 12:12:39 +0100488bool HalPolicy::ConvertLstm(const Operation& operation, const Model& model, ConversionData& data)
489{
Pablo Tellofb45e2f2019-10-18 16:51:57 +0100490 ALOGV("hal_1_2::HalPolicy::ConvertLstm()");
Kevin May42477c12020-03-26 13:34:14 +0000491 return ::ConvertLstm<hal_1_2::HalPolicy>(operation, model, data);
Ferran Balaguerb2397fd2019-07-25 12:12:39 +0100492}
493
Sadik Armagan701d9a02019-09-04 15:16:18 +0100494bool HalPolicy::ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data)
495{
496 ALOGV("hal_1_2::HalPolicy::ConvertSqrt()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100497 ActivationDescriptor desc;
498 desc.m_Function = ActivationFunction::Sqrt;
Sadik Armagan701d9a02019-09-04 15:16:18 +0100499
500 return ::ConvertToActivation<hal_1_2::HalPolicy>(operation, __func__, desc, model, data);
501}
502
Mike Kelly46272802019-08-14 17:00:48 +0100503bool HalPolicy::ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data)
504{
Sadik Armagan701d9a02019-09-04 15:16:18 +0100505 ALOGV("hal_1_2::HalPolicy::ConvertSqueeze()");
Mike Kelly46272802019-08-14 17:00:48 +0100506 return ::ConvertSqueeze<hal_1_2::HalPolicy>(operation, model, data);
507}
508
509bool HalPolicy::ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data)
510{
Sadik Armagan701d9a02019-09-04 15:16:18 +0100511 ALOGV("hal_1_2::HalPolicy::ConvertStridedSlice()");
Mike Kelly46272802019-08-14 17:00:48 +0100512 return ::ConvertStridedSlice<hal_1_2::HalPolicy>(operation, model, data);
513}
514
515bool HalPolicy::ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data)
516{
Sadik Armagan701d9a02019-09-04 15:16:18 +0100517 ALOGV("hal_1_2::HalPolicy::ConvertTranspose()");
Mike Kelly46272802019-08-14 17:00:48 +0100518 return ::ConvertTranspose<hal_1_2::HalPolicy>(operation, model, data);
519}
520
Aron Virginas-Tar8b991682019-07-31 12:54:59 +0100521bool HalPolicy::ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data)
David Monahan613b49c2019-06-27 11:37:47 +0100522{
Kevin May42477c12020-03-26 13:34:14 +0000523 ALOGV("hal_1_2::HalPolicy::ConvertTransposeConv2d()");
524 return ::ConvertTransposeConv2d<hal_1_2::HalPolicy>(operation, model, data);
David Monahan613b49c2019-06-27 11:37:47 +0100525}
526
Cathal Corbett0fa5e6d2022-01-21 16:55:13 +0000527bool HalPolicy::ConvertUnidirectionalSequenceLstm(const Operation& operation, const Model& model, ConversionData& data)
528{
529 ALOGV("hal_1_2::HalPolicy::ConvertUnidirectionalSequenceLstm()");
530 return ::ConvertUnidirectionalSequenceLstm<hal_1_2::HalPolicy>(operation, model, data);
531}
532
Mike Kellyb5fdf382019-06-11 16:35:25 +0100533} // namespace hal_1_2
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100534} // namespace armnn_driver