aboutsummaryrefslogtreecommitdiff
path: root/src/backends/tosaCommon/TosaMappings.cpp
diff options
context:
space:
mode:
authorCathal Corbett <cathal.corbett@arm.com>2022-11-15 12:56:16 +0000
committerCathal Corbett <cathal.corbett@arm.com>2022-11-16 11:12:24 +0000
commitbd18eab07a8f30492de1e462b1815189014cb8d5 (patch)
tree7c26e2ecb94ffa1ea67204e02011a8166931eb09 /src/backends/tosaCommon/TosaMappings.cpp
parent194086f01bdd1af52ddd976eb5b4152255565127 (diff)
downloadarmnn-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.cpp35
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();
}
}
}