diff options
author | Cathal Corbett <cathal.corbett@arm.com> | 2022-11-15 12:56:16 +0000 |
---|---|---|
committer | Cathal Corbett <cathal.corbett@arm.com> | 2022-11-16 11:12:24 +0000 |
commit | bd18eab07a8f30492de1e462b1815189014cb8d5 (patch) | |
tree | 7c26e2ecb94ffa1ea67204e02011a8166931eb09 /src/backends/tosaCommon/TosaMappings.cpp | |
parent | 194086f01bdd1af52ddd976eb5b4152255565127 (diff) | |
download | armnn-bd18eab07a8f30492de1e462b1815189014cb8d5.tar.gz |
IVGCVSW-7345 Add Pooling2d support to TOSA Reference Backend
Signed-off-by: Cathal Corbett <cathal.corbett@arm.com>
Change-Id: I73a47e513fe2d064ef233b121a68ef2edf0396dc
Diffstat (limited to 'src/backends/tosaCommon/TosaMappings.cpp')
-rw-r--r-- | src/backends/tosaCommon/TosaMappings.cpp | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/src/backends/tosaCommon/TosaMappings.cpp b/src/backends/tosaCommon/TosaMappings.cpp index 71d2012cbc..a37eaf29b3 100644 --- a/src/backends/tosaCommon/TosaMappings.cpp +++ b/src/backends/tosaCommon/TosaMappings.cpp @@ -23,10 +23,18 @@ void SetBasicBlockConstantTensorData(Layer* layer, TosaSerializationBasicBlock* } } +TosaSerializationBasicBlock* CreateEmptyTosaSerializationBasicBlock() +{ + // empty basic block when no tosa mapping implemented/exists + TosaSerializationOperator* op = + new TosaSerializationOperator(Op_UNKNOWN, Attribute_NONE, nullptr, {}, {}); + return new TosaSerializationBasicBlock("", {op}, {}, {}, {}); +} + TosaSerializationBasicBlock* GetTosaMapping(const LayerType type, const std::vector<const TensorInfo*>& inputs, const std::vector<const TensorInfo*>& outputs, - const BaseDescriptor& /*descriptor*/, + const BaseDescriptor& descriptor, bool isMain = false) { switch (type) @@ -35,11 +43,30 @@ TosaSerializationBasicBlock* GetTosaMapping(const LayerType type, { return ConvertAdditionToTosaOperator(inputs, outputs, isMain); } + case LayerType::Pooling2d: + { + auto poolDesc = PolymorphicDowncast<const Pooling2dDescriptor*>(&descriptor); + + bool avgPoolIgnoreValue = + (poolDesc->m_PoolType == PoolingAlgorithm::Average) && + (poolDesc->m_PaddingMethod == PaddingMethod::IgnoreValue); + + if (poolDesc->m_PoolType == PoolingAlgorithm::L2) + { + return CreateEmptyTosaSerializationBasicBlock(); + } + else if (avgPoolIgnoreValue) + { + return ConvertAvgPool2DIgnoreValueToTosaOperator(inputs, outputs, isMain, poolDesc); + } + else + { + return ConvertPooling2DToTosaOperator(inputs, outputs, isMain, poolDesc); + } + } default: { - // empty basic block when no tosa mapping implemented/exists - TosaSerializationOperator* op = new TosaSerializationOperator(Op_UNKNOWN, Attribute_NONE, nullptr, {}, {}); - return new TosaSerializationBasicBlock("", {op}, {}, {}, {}); + return CreateEmptyTosaSerializationBasicBlock(); } } } |