blob: 4e53c744ab61ab4667cea577ca4a905c612baf88 [file] [log] [blame]
Mike Kellyb5fdf382019-06-11 16:35:25 +01001//
Teresa Charlinee5872d2021-12-03 16:07:42 +00002// Copyright © 2019-2023 Arm Ltd and Contributors. All rights reserved.
Mike Kellyb5fdf382019-06-11 16:35:25 +01003// SPDX-License-Identifier: MIT
4//
5
6#include "HalPolicy.hpp"
Pablo Tello6bf3f432021-09-01 15:30:10 +01007#include "DriverOptions.hpp"
8
Mike Kellyb5fdf382019-06-11 16:35:25 +01009namespace armnn_driver
10{
11namespace hal_1_2
12{
13
Teresa Charlin8f6429d2019-10-01 13:10:15 +010014using namespace armnn;
15
Aron Virginas-Tar65a1b1d2019-11-15 15:59:51 +000016namespace
17{
18
Aron Virginas-Tar65a1b1d2019-11-15 15:59:51 +000019} // anonymous namespace
20
Pablo Tello6bf3f432021-09-01 15:30:10 +010021HalPolicy::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
Mike Kellyb5fdf382019-06-11 16:35:25 +010048bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, ConversionData& data)
49{
Mike Kellyb5fdf382019-06-11 16:35:25 +010050 switch (operation.type)
51 {
Kevin May407718f2019-09-09 14:46:41 +010052 case V1_2::OperationType::ABS:
josh minor00a963b2020-01-08 11:55:35 -060053 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Abs);
Mike Kelly46272802019-08-14 17:00:48 +010054 case V1_2::OperationType::ADD:
Teresa Charlinee5872d2021-12-03 16:07:42 +000055 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Add);
Francis Murtagh19fa0cc2019-11-19 12:06:47 +000056 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);
Sadik Armagan15d63e22019-07-26 16:59:35 +010060 case V1_2::OperationType::AVERAGE_POOL_2D:
61 return ConvertAveragePool2d(operation, model, data);
Finn Williams23b87b32019-07-30 11:44:05 +010062 case V1_2::OperationType::BATCH_TO_SPACE_ND:
63 return ConvertBatchToSpaceNd(operation, model, data);
Sadik Armagan92b5fd12021-04-26 09:52:06 +010064 case V1_2::OperationType::CAST:
65 return ConvertCast(operation, model, data);
Teresa Charlin7f5b51e2021-09-01 14:19:38 +010066 case V1_2::OperationType::CHANNEL_SHUFFLE:
67 return ConvertChannelShuffle(operation, model, data);
Mike Kellyb8805202019-07-31 17:25:43 +010068 case V1_2::OperationType::CONCATENATION:
69 return ConvertConcatenation(operation, model, data);
Mike Kellyb5fdf382019-06-11 16:35:25 +010070 case V1_2::OperationType::CONV_2D:
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010071 return ConvertConv2d(operation, model, data);
Aron Virginas-Tar8edb16d2019-10-01 13:34:59 +010072 case V1_2::OperationType::DEPTH_TO_SPACE:
73 return ConvertDepthToSpace(operation, model, data);
Mike Kellyb5fdf382019-06-11 16:35:25 +010074 case V1_2::OperationType::DEPTHWISE_CONV_2D:
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +010075 return ConvertDepthwiseConv2d(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +010076 case V1_2::OperationType::DEQUANTIZE:
77 return ConvertDequantize(operation, model, data);
78 case V1_2::OperationType::DIV:
Teresa Charlinee5872d2021-12-03 16:07:42 +000079 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Div);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +000080 case V1_2::OperationType::EQUAL:
81 return ConvertComparison(operation, model, data, ComparisonOperation::Equal);
Teresa Charlincb31b3b2020-09-30 18:28:18 +010082 case V1_2::OperationType::EXP:
83 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Exp);
Narumol Prangnawarat85f96542019-09-12 16:26:29 +010084 case V1_2::OperationType::EXPAND_DIMS:
85 return ConvertExpandDims(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +010086 case V1_2::OperationType::FLOOR:
87 return ConvertFloor(operation, model, data);
88 case V1_2::OperationType::FULLY_CONNECTED:
89 return ConvertFullyConnected(operation, model, data);
Teresa Charlinf931af92020-04-10 16:46:53 +010090 case V1_2::OperationType::GATHER:
91 return ConvertGather(operation, model, data);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +000092 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);
Teresa Charlin8f6429d2019-10-01 13:10:15 +010096 case V1_2::OperationType::GROUPED_CONV_2D:
97 return ConvertGroupedConv2d(operation, model, data);
Aron Virginas-Tara2a73802019-10-09 15:30:40 +010098 case V1_2::OperationType::INSTANCE_NORMALIZATION:
99 return ConvertInstanceNormalization(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100100 case V1_2::OperationType::L2_NORMALIZATION:
101 return ConvertL2Normalization(operation, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100102 case V1_2::OperationType::L2_POOL_2D:
103 return ConvertL2Pool2d(operation, model, data);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000104 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);
Mike Kelly46272802019-08-14 17:00:48 +0100108 case V1_2::OperationType::LOCAL_RESPONSE_NORMALIZATION:
109 return ConvertLocalResponseNormalization(operation, model, data);
Teresa Charlin2d710022021-05-31 19:35:58 +0100110 case V1_2::OperationType::LOG:
111 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Log);
Mike Kelly46272802019-08-14 17:00:48 +0100112 case V1_2::OperationType::LOGISTIC:
113 return ConvertLogistic(operation, model, data);
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100114 case V1_2::OperationType::LOG_SOFTMAX:
115 return ConvertLogSoftmax(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100116 case V1_2::OperationType::LSTM:
117 return ConvertLstm(operation, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100118 case V1_2::OperationType::MAX_POOL_2D:
119 return ConvertMaxPool2d(operation, model, data);
Narumol Prangnawarat95b1ef62019-07-15 12:02:20 +0100120 case V1_2::OperationType::MAXIMUM:
Teresa Charlinee5872d2021-12-03 16:07:42 +0000121 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Maximum);
Mike Kelly46272802019-08-14 17:00:48 +0100122 case V1_2::OperationType::MEAN:
Sadik Armagan6a284532021-03-12 09:12:29 +0000123 return ConvertMean(operation, model, data);
Ellen Norris-Thompson1cb29aa2019-07-11 17:27:37 +0100124 case V1_2::OperationType::MINIMUM:
Teresa Charlinee5872d2021-12-03 16:07:42 +0000125 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Minimum);
Mike Kelly46272802019-08-14 17:00:48 +0100126 case V1_2::OperationType::MUL:
Teresa Charlinee5872d2021-12-03 16:07:42 +0000127 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Mul);
Sadik Armagancae7e922020-03-23 14:35:05 +0000128 case V1_2::OperationType::NEG:
129 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Neg);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000130 case V1_2::OperationType::NOT_EQUAL:
131 return ConvertComparison(operation, model, data, ComparisonOperation::NotEqual);
Mike Kelly3c673942019-07-25 09:26:06 +0100132 case V1_2::OperationType::PAD:
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +0100133 return ConvertPad(operation, model, data);
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100134 case V1_2::OperationType::PAD_V2:
135 return ConvertPadV2(operation, model, data);
Teresa Charlin9a29dac2023-05-12 14:04:41 +0100136 case V1_2::OperationType::POW:
137 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Power);
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100138 case V1_2::OperationType::PRELU:
139 return ConvertPrelu(operation, model, data);
Sadik Armagan5a476a82019-07-30 09:43:18 +0100140 case V1_2::OperationType::QUANTIZE:
141 return ConvertQuantize(operation, model, data);
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100142 case V1_2::OperationType::QUANTIZED_16BIT_LSTM:
Sadik Armagan813f2302020-05-19 14:10:30 +0100143 return ConvertQuantized16BitLstm(operation, model, data);
Teresa Charlin89cbb3a2021-02-11 21:00:47 +0000144 case V1_2::OperationType::REDUCE_MAX:
145 return ConvertReduce(operation, model, data, ReduceOperation::Max);
146 case V1_2::OperationType::REDUCE_MIN:
147 return ConvertReduce(operation, model, data, ReduceOperation::Min);
Teresa Charlin69e38612021-08-05 12:39:37 +0100148 case V1_2::OperationType::REDUCE_PROD:
149 return ConvertReduce(operation, model, data, ReduceOperation::Prod);
Teresa Charlin89cbb3a2021-02-11 21:00:47 +0000150 case V1_2::OperationType::REDUCE_SUM:
151 return ConvertReduce(operation, model, data, ReduceOperation::Sum);
Sadik Armagan61113162019-07-25 09:09:40 +0100152 case V1_2::OperationType::RELU:
153 return ConvertReLu(operation, model, data);
154 case V1_2::OperationType::RELU1:
155 return ConvertReLu1(operation, model, data);
156 case V1_2::OperationType::RELU6:
157 return ConvertReLu6(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100158 case V1_2::OperationType::RESHAPE:
159 return ConvertReshape(operation, model, data);
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +0100160 case V1_2::OperationType::RESIZE_BILINEAR:
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100161 return ConvertResize(operation, model, data, ResizeMethod::Bilinear);
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +0100162 case V1_2::OperationType::RESIZE_NEAREST_NEIGHBOR:
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100163 return ConvertResize(operation, model, data, ResizeMethod::NearestNeighbor);
Aron Virginas-Tarfa6544e2019-09-10 14:42:22 +0100164 case V1_2::OperationType::RSQRT:
josh minor00a963b2020-01-08 11:55:35 -0600165 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Rsqrt);
Teresa Charlin2d710022021-05-31 19:35:58 +0100166 case V1_2::OperationType::SIN:
167 return ConvertElementwiseUnary(operation, model, data, UnaryOperation::Sin);
Francis Murtagh074c25a2019-07-22 16:40:57 +0100168 case V1_2::OperationType::SOFTMAX:
169 return ConvertSoftmax(operation, model, data);
Finn Williamsd74c5052019-07-30 17:06:00 +0100170 case V1_2::OperationType::SPACE_TO_BATCH_ND :
171 return ConvertSpaceToBatchNd(operation, model, data);
Aron Virginas-Tarad1ab532019-07-25 11:24:42 +0100172 case V1_2::OperationType::SPACE_TO_DEPTH:
173 return ConvertSpaceToDepth(operation, model, data);
Teresa Charlin2d710022021-05-31 19:35:58 +0100174 case V1_2::OperationType::SQRT:
175 return ConvertSqrt(operation, model, data);
176 case V1_2::OperationType::SQUEEZE:
177 return ConvertSqueeze(operation, model, data);
178 case V1_2::OperationType::STRIDED_SLICE:
179 return ConvertStridedSlice(operation, model, data);
Mike Kelly0a879362019-07-29 16:56:31 +0100180 case V1_2::OperationType::SUB:
Teresa Charlinee5872d2021-12-03 16:07:42 +0000181 return ConvertElementwiseBinary(operation, model, data, BinaryOperation::Sub);
Teresa Charlin2d710022021-05-31 19:35:58 +0100182 case V1_2::OperationType::TRANSPOSE:
183 return ConvertTranspose(operation, model, data);
184 case V1_2::OperationType::TRANSPOSE_CONV_2D:
185 return ConvertTransposeConv2d(operation, model, data);
Sadik Armagan61113162019-07-25 09:09:40 +0100186 case V1_2::OperationType::TANH:
187 return ConvertTanH(operation, model, data);
Cathal Corbett0fa5e6d2022-01-21 16:55:13 +0000188 case V1_2::OperationType::UNIDIRECTIONAL_SEQUENCE_LSTM:
189 return ConvertUnidirectionalSequenceLstm(operation, model, data);
Mike Kellyb5fdf382019-06-11 16:35:25 +0100190 default:
191 return Fail("%s: Operation type %s not supported in ArmnnDriver",
192 __func__, toString(operation.type).c_str());
193 }
194}
195
Francis Murtagh19fa0cc2019-11-19 12:06:47 +0000196bool HalPolicy::ConvertArgMinMax(const V1_2::Operation& operation,
197 const V1_2::Model& model,
198 ConversionData& data,
199 armnn::ArgMinMaxFunction argMinMaxFunction)
200{
201 ALOGV("hal_1_2::HalPolicy::ConvertArgMinMax()");
202 return ::ConvertArgMinMax<hal_1_2::HalPolicy>(operation, model, data, argMinMaxFunction);
203}
204
Sadik Armagan15d63e22019-07-26 16:59:35 +0100205bool HalPolicy::ConvertAveragePool2d(const Operation& operation, const Model& model, ConversionData& data)
206{
207 ALOGV("hal_1_2::HalPolicy::ConvertAveragePool2d()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100208 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Average, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100209}
210
Finn Williams23b87b32019-07-30 11:44:05 +0100211bool HalPolicy::ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data)
212{
213 ALOGV("hal_1_2::HalPolicy::ConvertBatchToSpaceNd()");
214 return ::ConvertBatchToSpaceNd<hal_1_2::HalPolicy>(operation, model, data);
215}
216
Sadik Armagan92b5fd12021-04-26 09:52:06 +0100217bool HalPolicy::ConvertCast(const Operation& operation, const Model& model, ConversionData& data)
218{
219 ALOGV("hal_1_2::HalPolicy::ConvertCast()");
220 return ::ConvertCast<hal_1_2::HalPolicy>(operation, model, data);
221}
222
Teresa Charlin7f5b51e2021-09-01 14:19:38 +0100223bool HalPolicy::ConvertChannelShuffle(const Operation& operation, const Model& model, ConversionData& data)
224{
225 ALOGV("hal_1_2::HalPolicy::ConvertChannelShuffle()");
226 return ::ConvertChannelShuffle<hal_1_2::HalPolicy>(operation, model, data);
227}
228
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000229bool HalPolicy::ConvertComparison(const Operation& operation,
230 const Model& model,
231 ConversionData& data,
232 ComparisonOperation comparisonOperation)
233{
234 ALOGV("hal_1_2::HalPolicy::ConvertComparison()");
Kevin May42477c12020-03-26 13:34:14 +0000235 return ::ConvertComparison_1_2<hal_1_2::HalPolicy>(operation, model, data, comparisonOperation);
Aron Virginas-Tar3e0982b2019-10-29 14:25:09 +0000236}
237
Mike Kellyb8805202019-07-31 17:25:43 +0100238bool HalPolicy::ConvertConcatenation(const Operation& operation, const Model& model, ConversionData& data)
239{
240 ALOGV("hal_1_2::HalPolicy::ConvertConcatenation()");
241 return ::ConvertConcatenation<hal_1_2::HalPolicy>(operation, model, data);
242}
243
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100244bool HalPolicy::ConvertConv2d(const Operation& operation, const Model& model, ConversionData& data)
245{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100246 ALOGV("hal_1_2::HalPolicy::ConvertConv2d()");
Kevin May42477c12020-03-26 13:34:14 +0000247 return ::ConvertConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100248}
249
Aron Virginas-Tar8edb16d2019-10-01 13:34:59 +0100250bool HalPolicy::ConvertDepthToSpace(const Operation& operation, const Model& model, ConversionData& data)
251{
252 ALOGV("hal_1_2::HalPolicy::ConvertDepthToSpace()");
253 return ::ConvertDepthToSpace<hal_1_2::HalPolicy>(operation, model, data);
254}
255
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100256bool HalPolicy::ConvertDepthwiseConv2d(const Operation& operation, const Model& model, ConversionData& data)
257{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100258 ALOGV("hal_1_2::HalPolicy::ConvertDepthwiseConv2d()");
Kevin May42477c12020-03-26 13:34:14 +0000259 return ::ConvertDepthwiseConv2d_1_2<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tar24e699d2019-06-17 14:47:46 +0100260}
261
Mike Kelly46272802019-08-14 17:00:48 +0100262bool HalPolicy::ConvertDequantize(const Operation& operation, const Model& model, ConversionData& data)
263{
264 ALOGV("hal_1_2::HalPolicy::ConvertDequantize()");
Kevin May42477c12020-03-26 13:34:14 +0000265 return ::ConvertDequantize_1_2<hal_1_2::HalPolicy>(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100266}
267
Teresa Charlinee5872d2021-12-03 16:07:42 +0000268bool HalPolicy::ConvertElementwiseBinary(const Operation& operation,
269 const Model& model,
270 ConversionData& data,
271 BinaryOperation binaryOperation)
Mike Kelly46272802019-08-14 17:00:48 +0100272{
Teresa Charlinee5872d2021-12-03 16:07:42 +0000273 ALOGV("hal_1_2::HalPolicy::ConvertElementwiseBinary()");
274 return ::ConvertElementwiseBinary<hal_1_2::HalPolicy>(operation, model, data, binaryOperation);
Mike Kelly46272802019-08-14 17:00:48 +0100275}
276
josh minor00a963b2020-01-08 11:55:35 -0600277bool HalPolicy::ConvertElementwiseUnary(const Operation& operation,
278 const Model& model,
279 ConversionData& data,
280 UnaryOperation unaryOperation)
281{
282 ALOGV("hal_1_2::HalPolicy::ConvertElementwiseUnary()");
Kevin May42477c12020-03-26 13:34:14 +0000283 return ::ConvertElementwiseUnary<hal_1_2::HalPolicy>(operation, model, data, unaryOperation);
josh minor00a963b2020-01-08 11:55:35 -0600284}
285
Narumol Prangnawarat85f96542019-09-12 16:26:29 +0100286bool HalPolicy::ConvertExpandDims(const Operation& operation, const Model& model, ConversionData& data)
287{
288 ALOGV("hal_1_2::HalPolicy::ConvertExpandDims()");
Kevin May42477c12020-03-26 13:34:14 +0000289 return ::ConvertExpandDims<hal_1_2::HalPolicy>(operation, model, data);
Narumol Prangnawarat85f96542019-09-12 16:26:29 +0100290}
291
Mike Kelly46272802019-08-14 17:00:48 +0100292bool HalPolicy::ConvertFloor(const Operation& operation, const Model& model, ConversionData& data)
293{
294 ALOGV("hal_1_2::HalPolicy::ConvertFloor()");
295 return ::ConvertFloor<hal_1_2::HalPolicy>(operation, model, data);
296}
297
298bool HalPolicy::ConvertFullyConnected(const Operation& operation, const Model& model, ConversionData& data)
299{
300 ALOGV("hal_1_2::HalPolicy::ConvertFullyConnected()");
301 return ::ConvertFullyConnected<hal_1_2::HalPolicy>(operation, model, data);
302}
303
Teresa Charlinf931af92020-04-10 16:46:53 +0100304bool HalPolicy::ConvertGather (const Operation& operation, const Model& model, ConversionData& data)
305{
306 ALOGV("hal_1_2::HalPolicy::ConvertGather()");
307 return ::ConvertGather<hal_1_2::HalPolicy>(operation, model, data);
308}
309
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100310bool HalPolicy::ConvertGroupedConv2d(const Operation& operation, const Model& model, ConversionData& data)
311{
312 ALOGV("hal_1_2::HalPolicy::ConvertGroupedConv2d()");
Kevin May42477c12020-03-26 13:34:14 +0000313 return ::ConvertGroupedConv2d<hal_1_2::HalPolicy>(operation, model, data);
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100314}
315
Aron Virginas-Tara2a73802019-10-09 15:30:40 +0100316bool HalPolicy::ConvertInstanceNormalization(const Operation& operation, const Model& model, ConversionData& data)
317{
318 ALOGV("hal_1_2::HalPolicy::ConvertInstanceNormalization()");
Kevin May42477c12020-03-26 13:34:14 +0000319 return ::ConvertInstanceNormalization<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tara2a73802019-10-09 15:30:40 +0100320}
321
Mike Kelly46272802019-08-14 17:00:48 +0100322bool HalPolicy::ConvertL2Normalization(const Operation& operation, const Model& model, ConversionData& data)
323{
324 ALOGV("hal_1_2::HalPolicy::ConvertL2Normalization()");
325 return ::ConvertL2Normalization<hal_1_2::HalPolicy>(operation, model, data);
326}
327
Sadik Armagan15d63e22019-07-26 16:59:35 +0100328bool HalPolicy::ConvertL2Pool2d(const Operation& operation, const Model& model, ConversionData& data)
329{
330 ALOGV("hal_1_2::HalPolicy::ConvertL2Pool2d()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100331 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::L2, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100332}
333
Mike Kelly46272802019-08-14 17:00:48 +0100334bool HalPolicy::ConvertLocalResponseNormalization(const Operation& operation,
335 const Model& model,
336 ConversionData& data)
337{
338 ALOGV("hal_1_2::HalPolicy::ConvertLocalResponseNormalization()");
339 return ::ConvertLocalResponseNormalization<hal_1_2::HalPolicy>(operation, model, data);
340}
341
342bool HalPolicy::ConvertLogistic(const Operation& operation, const Model& model, ConversionData& data)
343{
344 ALOGV("hal_1_2::HalPolicy::ConvertLogistic()");
345 return ::ConvertLogistic<hal_1_2::HalPolicy>(operation, model, data);
346}
347
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100348bool HalPolicy::ConvertLogSoftmax(const Operation& operation, const Model& model, ConversionData& data)
349{
350 ALOGV("hal_1_2::HalPolicy::ConvertLogSoftmax()");
Kevin May42477c12020-03-26 13:34:14 +0000351 return ::ConvertLogSoftmax<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tar75e67792019-10-15 13:33:03 +0100352}
353
Sadik Armagan15d63e22019-07-26 16:59:35 +0100354bool HalPolicy::ConvertMaxPool2d(const Operation& operation, const Model& model, ConversionData& data)
355{
356 ALOGV("hal_1_2::HalPolicy::ConvertMaxPool2d()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100357 return ConvertPooling2d<hal_1_2::HalPolicy>(operation, __func__, PoolingAlgorithm::Max, model, data);
Sadik Armagan15d63e22019-07-26 16:59:35 +0100358}
359
Sadik Armagan6a284532021-03-12 09:12:29 +0000360bool HalPolicy::ConvertMean(const Operation& operation, const Model& model, ConversionData& data)
Mike Kelly46272802019-08-14 17:00:48 +0100361{
Sadik Armagan6a284532021-03-12 09:12:29 +0000362 ALOGV("hal_1_2::HalPolicy::ConvertMean()");
363 return ::ConvertMean<hal_1_2::HalPolicy>(operation, model, data);
Mike Kelly46272802019-08-14 17:00:48 +0100364}
365
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +0100366bool HalPolicy::ConvertPad(const Operation& operation, const Model& model, ConversionData& data)
367{
368 ALOGV("hal_1_2::HalPolicy::ConvertPad()");
369 return ::ConvertPad<hal_1_2::HalPolicy>(operation, model, data);
370}
371
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100372bool HalPolicy::ConvertPadV2(const Operation& operation, const Model& model, ConversionData& data)
373{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100374 ALOGV("hal_1_2::HalPolicy::ConvertPadV2()");
Kevin May42477c12020-03-26 13:34:14 +0000375 return ::ConvertPadV2<hal_1_2::HalPolicy>(operation, model, data);
Aron Virginas-Tarcb8ac842019-07-05 15:47:07 +0100376}
377
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100378bool HalPolicy::ConvertPrelu(const Operation& operation, const Model& model, ConversionData& data)
379{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100380 ALOGV("hal_1_2::HalPolicy::ConvertPrelu()");
Kevin May42477c12020-03-26 13:34:14 +0000381 return ::ConvertPrelu<hal_1_2::HalPolicy>(operation, model, data);
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100382}
383
Sadik Armagan5a476a82019-07-30 09:43:18 +0100384bool HalPolicy::ConvertQuantize(const Operation& operation, const Model& model, ConversionData& data)
385{
386 ALOGV("hal_1_2::HalPolicy::ConvertQuantize()");
Kevin May42477c12020-03-26 13:34:14 +0000387 return ::ConvertQuantize<hal_1_2::HalPolicy>(operation, model, data);
Sadik Armagan5a476a82019-07-30 09:43:18 +0100388}
389
Sadik Armagan813f2302020-05-19 14:10:30 +0100390bool HalPolicy::ConvertQuantized16BitLstm(const Operation& operation, const Model& model, ConversionData& data)
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100391{
Sadik Armagan813f2302020-05-19 14:10:30 +0100392 ALOGV("hal_1_2::HalPolicy::ConvertQuantized16BitLstm()");
393 return ::ConvertQuantized16BitLstm<hal_1_2::HalPolicy>(operation, model, data);
Ellen Norris-Thompson7efb46d2019-07-24 17:39:19 +0100394}
395
Sadik Armagan6a284532021-03-12 09:12:29 +0000396bool HalPolicy::ConvertReduce(const Operation& operation,
397 const Model& model,
398 ConversionData& data,
399 ReduceOperation reduceOperation)
400{
401 ALOGV("hal_1_2::HalPolicy::ConvertReduce()");
402 return ::ConvertReduce<hal_1_2::HalPolicy>(operation, model, data, reduceOperation);
403}
404
Sadik Armagan61113162019-07-25 09:09:40 +0100405bool HalPolicy::ConvertReLu(const Operation& operation, const Model& model, ConversionData& data)
406{
407 ALOGV("hal_1_2::HalPolicy::ConvertReLu()");
408 return ::ConvertReLu<hal_1_2::HalPolicy>(operation, model, data);
409}
410
411bool HalPolicy::ConvertReLu1(const Operation& operation, const Model& model, ConversionData& data)
412{
413 ALOGV("hal_1_2::HalPolicy::ConvertReLu1()");
414 return ::ConvertReLu1<hal_1_2::HalPolicy>(operation, model, data);
415}
416
417bool HalPolicy::ConvertReLu6(const Operation& operation, const Model& model, ConversionData& data)
418{
419 ALOGV("hal_1_2::HalPolicy::ConvertReLu6()");
420 return ::ConvertReLu6<hal_1_2::HalPolicy>(operation, model, data);
421}
422
Mike Kelly46272802019-08-14 17:00:48 +0100423bool HalPolicy::ConvertReshape(const Operation& operation, const Model& model, ConversionData& data)
424{
425 ALOGV("hal_1_2::HalPolicy::ConvertReshape()");
426 return ::ConvertReshape<hal_1_2::HalPolicy>(operation, model, data);
427}
428
Aron Virginas-Tarfb2fa292019-07-04 11:59:48 +0100429bool HalPolicy::ConvertResize(const Operation& operation,
430 const Model& model,
431 ConversionData& data,
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100432 ResizeMethod resizeMethod)
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +0100433{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100434 ALOGV("hal_1_2::HalPolicy::ConvertResize()");
Kevin May42477c12020-03-26 13:34:14 +0000435 return ::ConvertResize<hal_1_2::HalPolicy>(operation, model, data, resizeMethod);
Aron Virginas-Tar7a6d11b2019-07-03 15:27:08 +0100436}
437
Finn Williamsd74c5052019-07-30 17:06:00 +0100438bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data)
439{
440 ALOGV("hal_1_2::HalPolicy::ConvertSpaceToBatchNd()");
441 return ::ConvertSpaceToBatchNd<hal_1_2::HalPolicy>(operation, model, data);
442}
443
Keith Davisa6bc52f2019-06-26 09:39:49 +0100444bool HalPolicy::ConvertSpaceToDepth(const Operation& operation, const Model& model, ConversionData& data)
445{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100446 ALOGV("hal_1_2::HalPolicy::ConvertSpaceToDepth()");
Kevin May42477c12020-03-26 13:34:14 +0000447 return ::ConvertSpaceToDepth<hal_1_2::HalPolicy>(operation, model, data);
Keith Davisa6bc52f2019-06-26 09:39:49 +0100448}
449
Francis Murtagh074c25a2019-07-22 16:40:57 +0100450bool HalPolicy::ConvertSoftmax(const Operation& operation, const Model& model, ConversionData& data)
451{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100452 ALOGV("hal_1_2::HalPolicy::ConvertSoftmax()");
Kevin May42477c12020-03-26 13:34:14 +0000453 return ::ConvertSoftmax<hal_1_2::HalPolicy>(operation, model, data);
Francis Murtagh074c25a2019-07-22 16:40:57 +0100454}
455
Sadik Armagan61113162019-07-25 09:09:40 +0100456bool HalPolicy::ConvertTanH(const Operation& operation, const Model& model, ConversionData& data)
457{
458 ALOGV("hal_1_2::HalPolicy::ConvertTanH()");
459 return ::ConvertTanH<hal_1_2::HalPolicy>(operation, model, data);
460}
461
Ferran Balaguerb2397fd2019-07-25 12:12:39 +0100462bool HalPolicy::ConvertLstm(const Operation& operation, const Model& model, ConversionData& data)
463{
Pablo Tellofb45e2f2019-10-18 16:51:57 +0100464 ALOGV("hal_1_2::HalPolicy::ConvertLstm()");
Kevin May42477c12020-03-26 13:34:14 +0000465 return ::ConvertLstm<hal_1_2::HalPolicy>(operation, model, data);
Ferran Balaguerb2397fd2019-07-25 12:12:39 +0100466}
467
Sadik Armagan701d9a02019-09-04 15:16:18 +0100468bool HalPolicy::ConvertSqrt(const Operation& operation, const Model& model, ConversionData& data)
469{
470 ALOGV("hal_1_2::HalPolicy::ConvertSqrt()");
Teresa Charlin8f6429d2019-10-01 13:10:15 +0100471 ActivationDescriptor desc;
472 desc.m_Function = ActivationFunction::Sqrt;
Sadik Armagan701d9a02019-09-04 15:16:18 +0100473
474 return ::ConvertToActivation<hal_1_2::HalPolicy>(operation, __func__, desc, model, data);
475}
476
Mike Kelly46272802019-08-14 17:00:48 +0100477bool HalPolicy::ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data)
478{
Sadik Armagan701d9a02019-09-04 15:16:18 +0100479 ALOGV("hal_1_2::HalPolicy::ConvertSqueeze()");
Mike Kelly46272802019-08-14 17:00:48 +0100480 return ::ConvertSqueeze<hal_1_2::HalPolicy>(operation, model, data);
481}
482
483bool HalPolicy::ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data)
484{
Sadik Armagan701d9a02019-09-04 15:16:18 +0100485 ALOGV("hal_1_2::HalPolicy::ConvertStridedSlice()");
Mike Kelly46272802019-08-14 17:00:48 +0100486 return ::ConvertStridedSlice<hal_1_2::HalPolicy>(operation, model, data);
487}
488
489bool HalPolicy::ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data)
490{
Sadik Armagan701d9a02019-09-04 15:16:18 +0100491 ALOGV("hal_1_2::HalPolicy::ConvertTranspose()");
Mike Kelly46272802019-08-14 17:00:48 +0100492 return ::ConvertTranspose<hal_1_2::HalPolicy>(operation, model, data);
493}
494
Aron Virginas-Tar8b991682019-07-31 12:54:59 +0100495bool HalPolicy::ConvertTransposeConv2d(const Operation& operation, const Model& model, ConversionData& data)
David Monahan613b49c2019-06-27 11:37:47 +0100496{
Kevin May42477c12020-03-26 13:34:14 +0000497 ALOGV("hal_1_2::HalPolicy::ConvertTransposeConv2d()");
498 return ::ConvertTransposeConv2d<hal_1_2::HalPolicy>(operation, model, data);
David Monahan613b49c2019-06-27 11:37:47 +0100499}
500
Cathal Corbett0fa5e6d2022-01-21 16:55:13 +0000501bool HalPolicy::ConvertUnidirectionalSequenceLstm(const Operation& operation, const Model& model, ConversionData& data)
502{
503 ALOGV("hal_1_2::HalPolicy::ConvertUnidirectionalSequenceLstm()");
504 return ::ConvertUnidirectionalSequenceLstm<hal_1_2::HalPolicy>(operation, model, data);
505}
506
Mike Kellyb5fdf382019-06-11 16:35:25 +0100507} // namespace hal_1_2
Matteo Martincigh17ffff32019-06-27 14:12:55 +0100508} // namespace armnn_driver