blob: 53a884ca3e71f0989773c4145b332aaccffaa9a1 [file] [log] [blame]
arovir01b0717b52018-09-05 17:03:25 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#include "HalPolicy.hpp"
7
Aron Virginas-Tar573a8fa2019-07-23 14:01:37 +01008#include "Utils.hpp"
Aron Virginas-Tar366e0a62019-07-10 13:01:41 +01009
arovir01b0717b52018-09-05 17:03:25 +010010#include "../1.0/HalPolicy.hpp"
11
Éanna Ó Catháin2fc21f72019-05-13 11:01:33 +010012namespace
13{
14static std::vector<V1_0::OperationType> opsEquivalentInV10({
15 V1_0::OperationType::ADD,
16 V1_0::OperationType::AVERAGE_POOL_2D,
17 V1_0::OperationType::CONCATENATION,
18 V1_0::OperationType::CONV_2D,
Aron Virginas-Tar8edb16d2019-10-01 13:34:59 +010019 V1_0::OperationType::DEPTH_TO_SPACE,
Éanna Ó Catháin2fc21f72019-05-13 11:01:33 +010020 V1_0::OperationType::DEPTHWISE_CONV_2D,
David Monahand5bfae12019-05-30 12:07:44 +010021 V1_0::OperationType::DEQUANTIZE,
Éanna Ó Catháin2fc21f72019-05-13 11:01:33 +010022 V1_0::OperationType::FLOOR,
23 V1_0::OperationType::FULLY_CONNECTED,
24 V1_0::OperationType::LOCAL_RESPONSE_NORMALIZATION,
25 V1_0::OperationType::LOGISTIC,
26 V1_0::OperationType::LSTM,
27 V1_0::OperationType::L2_NORMALIZATION,
28 V1_0::OperationType::L2_POOL_2D,
29 V1_0::OperationType::MAX_POOL_2D,
30 V1_0::OperationType::MUL,
31 V1_0::OperationType::RELU,
32 V1_0::OperationType::RELU1,
33 V1_0::OperationType::RELU6,
34 V1_0::OperationType::SOFTMAX,
Keith Davisa6bc52f2019-06-26 09:39:49 +010035 V1_0::OperationType::SPACE_TO_DEPTH,
Éanna Ó Catháin2fc21f72019-05-13 11:01:33 +010036 V1_0::OperationType::TANH,
37 V1_0::OperationType::RESHAPE,
38 V1_0::OperationType::RESIZE_BILINEAR,
39});
40
41bool CompliantWithVersion10(const V1_1::Operation & operation)
42{
43 std::vector<V1_0::OperationType>::iterator it;
44 it = std::find(opsEquivalentInV10.begin(), opsEquivalentInV10.end(),
45 static_cast<V1_0::OperationType>(operation.type));
46
47 if(it != opsEquivalentInV10.end())
48 {
49 return true;
50 }
51 return false;
52}
53
54V1_0::Operation ConvertOperationToVersion10(const V1_1::Operation & operation)
55{
56 V1_0::Operation v10Operation;
57 v10Operation.type = static_cast<V1_0::OperationType>(operation.type);
58 v10Operation.inputs = operation.inputs;
59 v10Operation.outputs = operation.outputs;
60 return v10Operation;
61}
62}
63
arovir01b0717b52018-09-05 17:03:25 +010064namespace armnn_driver
65{
66namespace hal_1_1
67{
68
69bool HalPolicy::ConvertOperation(const Operation& operation, const Model& model, ConversionData& data)
70{
Éanna Ó Catháin2fc21f72019-05-13 11:01:33 +010071 if (CompliantWithVersion10(operation))
arovir01b0717b52018-09-05 17:03:25 +010072 {
Éanna Ó Catháin2fc21f72019-05-13 11:01:33 +010073 hal_1_0::HalPolicy::Operation v10Operation = ConvertOperationToVersion10(operation);
arovir01b0717b52018-09-05 17:03:25 +010074 hal_1_0::HalPolicy::Model v10Model = convertToV1_0(model);
75
76 return hal_1_0::HalPolicy::ConvertOperation(v10Operation, v10Model, data);
77 }
78 else
79 {
80 switch (operation.type)
81 {
82 case V1_1::OperationType::DIV:
83 return ConvertDiv(operation, model, data);
David Beck38e12942018-09-12 16:02:24 +010084 case V1_1::OperationType::SUB:
85 return ConvertSub(operation, model, data);
narpra013c052562018-09-17 14:25:04 +010086 case V1_1::OperationType::MEAN:
87 return ConvertMean(operation, model, data);
Nina Drozd62a4a9f2018-10-01 14:20:25 +010088 case V1_1::OperationType::PAD:
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +010089 return ConvertPad(operation, model, data);
Nattapat Chaimanowong81a68342018-11-05 14:04:47 +000090 case V1_1::OperationType::SPACE_TO_BATCH_ND:
91 return ConvertSpaceToBatchNd(operation, model, data);
saoste01b8471482018-10-10 09:44:51 +010092 case V1_1::OperationType::SQUEEZE:
93 return ConvertSqueeze(operation, model, data);
Sadik Armagan758eee82018-11-15 15:34:49 +000094 case V1_1::OperationType::STRIDED_SLICE:
95 return ConvertStridedSlice(operation, model, data);
saoste01fe463152018-10-18 17:49:56 +010096 case V1_1::OperationType::TRANSPOSE:
97 return ConvertTranspose(operation, model, data);
Éanna Ó Catháin2cd99b92018-11-14 14:33:52 +000098 case V1_1::OperationType::BATCH_TO_SPACE_ND:
99 return ConvertBatchToSpaceNd(operation, model, data);
arovir01b0717b52018-09-05 17:03:25 +0100100 default:
101 return Fail("%s: Operation type %s not supported in ArmnnDriver",
102 __func__, toString(operation.type).c_str());
103 }
104 }
105}
106
107bool HalPolicy::ConvertDiv(const Operation& operation, const Model& model, ConversionData& data)
108{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100109 ALOGV("hal_1_1::HalPolicy::ConvertDiv()");
Mike Kelly46272802019-08-14 17:00:48 +0100110 return ::ConvertDiv<hal_1_1::HalPolicy>(operation, model, data);
arovir01b0717b52018-09-05 17:03:25 +0100111}
112
David Beck38e12942018-09-12 16:02:24 +0100113bool HalPolicy::ConvertSub(const Operation& operation, const Model& model, ConversionData& data)
114{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100115 ALOGV("hal_1_1::HalPolicy::ConvertSub()");
Mike Kelly0a879362019-07-29 16:56:31 +0100116 return ::ConvertSub<hal_1_1::HalPolicy>(operation, model, data);
David Beck38e12942018-09-12 16:02:24 +0100117}
118
narpra013c052562018-09-17 14:25:04 +0100119bool HalPolicy::ConvertMean(const Operation& operation, const Model& model, ConversionData& data)
120{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100121 ALOGV("hal_1_1::HalPolicy::ConvertMean()");
Mike Kelly46272802019-08-14 17:00:48 +0100122 return ::ConvertMean<hal_1_1::HalPolicy>(operation, model, data);
narpra013c052562018-09-17 14:25:04 +0100123}
124
Aron Virginas-Tarc921f6b2019-07-25 10:14:33 +0100125bool HalPolicy::ConvertPad(const Operation& operation, const Model& model, ConversionData& data)
126{
127 ALOGV("hal_1_1::HalPolicy::ConvertPad()");
128 return ::ConvertPad<hal_1_1::HalPolicy>(operation, model, data);
129}
130
Nattapat Chaimanowong81a68342018-11-05 14:04:47 +0000131bool HalPolicy::ConvertSpaceToBatchNd(const Operation& operation, const Model& model, ConversionData& data)
132{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100133 ALOGV("hal_1_1::HalPolicy::ConvertSpaceToBatchNd()");
Finn Williamsd74c5052019-07-30 17:06:00 +0100134 return ::ConvertSpaceToBatchNd<hal_1_1::HalPolicy>(operation, model, data);
Nattapat Chaimanowong81a68342018-11-05 14:04:47 +0000135}
136
saoste01b8471482018-10-10 09:44:51 +0100137bool HalPolicy::ConvertSqueeze(const Operation& operation, const Model& model, ConversionData& data)
138{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100139 ALOGV("hal_1_1::HalPolicy::ConvertSqueeze()");
Mike Kelly46272802019-08-14 17:00:48 +0100140 return ::ConvertSqueeze<hal_1_1::HalPolicy>(operation, model, data);
saoste01fe463152018-10-18 17:49:56 +0100141}
142
Sadik Armagan758eee82018-11-15 15:34:49 +0000143bool HalPolicy::ConvertStridedSlice(const Operation& operation, const Model& model, ConversionData& data)
144{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100145 ALOGV("hal_1_1::HalPolicy::ConvertStridedSlice()");
Mike Kelly46272802019-08-14 17:00:48 +0100146 return ::ConvertStridedSlice<hal_1_1::HalPolicy>(operation, model, data);
Sadik Armagan758eee82018-11-15 15:34:49 +0000147}
148
saoste01fe463152018-10-18 17:49:56 +0100149bool HalPolicy::ConvertTranspose(const Operation& operation, const Model& model, ConversionData& data)
150{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100151 ALOGV("hal_1_1::HalPolicy::ConvertTranspose()");
Mike Kelly46272802019-08-14 17:00:48 +0100152 return ::ConvertTranspose<hal_1_1::HalPolicy>(operation, model, data);
saoste01b8471482018-10-10 09:44:51 +0100153}
154
Éanna Ó Catháin2cd99b92018-11-14 14:33:52 +0000155bool HalPolicy::ConvertBatchToSpaceNd(const Operation& operation, const Model& model, ConversionData& data)
156{
Aron Virginas-Tar29404fb2019-07-24 13:55:31 +0100157 ALOGV("hal_1_1::HalPolicy::ConvertBatchToSpaceNd()");
Finn Williams23b87b32019-07-30 11:44:05 +0100158 return ::ConvertBatchToSpaceNd<hal_1_1::HalPolicy>(operation, model, data);
Éanna Ó Catháin2cd99b92018-11-14 14:33:52 +0000159}
160
arovir01b0717b52018-09-05 17:03:25 +0100161} // namespace hal_1_1
Ferran Balaguerd30093c2019-07-09 17:04:47 +0100162} // namespace armnn_driver