diff options
Diffstat (limited to 'delegate/opaque/src/ElementwiseBinary.hpp')
-rw-r--r-- | delegate/opaque/src/ElementwiseBinary.hpp | 60 |
1 files changed, 38 insertions, 22 deletions
diff --git a/delegate/opaque/src/ElementwiseBinary.hpp b/delegate/opaque/src/ElementwiseBinary.hpp index 8448609695..2a67802028 100644 --- a/delegate/opaque/src/ElementwiseBinary.hpp +++ b/delegate/opaque/src/ElementwiseBinary.hpp @@ -244,10 +244,14 @@ TfLiteStatus ValidateSubOperator(DelegateData& delegateData, std::pair<armnn::IConnectableLayer*, armnn::IConnectableLayer*> AddFloorDivLayer( DelegateData& delegateData, - const armnn::TensorInfo& outputTensorInfo) + const armnn::TensorInfo& outputTensorInfo, + int nodeIndex) { + auto layerName = GetName(armnn::BinaryOperation::Div, nodeIndex); armnn::IConnectableLayer* divisionLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Div); + armnn::BinaryOperation::Div, + layerName.c_str()); + // if the output of the div is Signed32 the Floor layer is not required if (armnn::DataType::Signed32 == outputTensorInfo.GetDataType()) { @@ -255,7 +259,8 @@ std::pair<armnn::IConnectableLayer*, armnn::IConnectableLayer*> AddFloorDivLayer } armnn::IOutputSlot& outputSlot = divisionLayer->GetOutputSlot(0); outputSlot.SetTensorInfo(outputTensorInfo); - armnn::IConnectableLayer* floorLayer = delegateData.m_Network->AddFloorLayer(); + auto floorName = GetName(armnn::LayerType::Floor, nodeIndex); + armnn::IConnectableLayer* floorLayer = delegateData.m_Network->AddFloorLayer(floorName.c_str()); outputSlot.Connect(floorLayer->GetInputSlot(0)); return std::make_pair(divisionLayer, floorLayer); } @@ -411,46 +416,55 @@ TfLiteStatus VisitElementwiseBinaryOperator(DelegateData& delegateData, armnn::IConnectableLayer* elementwiseBinaryLayer = nullptr; armnnDelegate::MultiLayerFacade multiLayer; + std::string layerName; switch(elementwiseBinaryOperatorCode) { case kTfLiteBuiltinAdd: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Add); + layerName = GetName(armnn::BinaryOperation::Add, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Add, + layerName.c_str()); break; case kTfLiteBuiltinDiv: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Div); + layerName = GetName(armnn::BinaryOperation::Div, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Div, + layerName.c_str()); break; case kTfLiteBuiltinFloorDiv: { - auto layers = AddFloorDivLayer(delegateData, outputTensorInfo); + auto layers = AddFloorDivLayer(delegateData, outputTensorInfo, nodeIndex); multiLayer.AssignValues(layers.first, layers.second); elementwiseBinaryLayer = &multiLayer; } break; case kTfLiteBuiltinMaximum: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Maximum); + layerName = GetName(armnn::BinaryOperation::Maximum, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Maximum, + layerName.c_str()); break; case kTfLiteBuiltinMinimum: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Minimum); + layerName = GetName(armnn::BinaryOperation::Minimum, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Minimum, + layerName.c_str()); break; case kTfLiteBuiltinMul: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Mul); + layerName = GetName(armnn::BinaryOperation::Mul, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Mul, + layerName.c_str()); break; case kTfLiteBuiltinPow: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Power); + layerName = GetName(armnn::BinaryOperation::Power, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Power, + layerName.c_str()); break; case kTfLiteBuiltinSquaredDifference: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::SqDiff); + layerName = GetName(armnn::BinaryOperation::SqDiff, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::SqDiff, + layerName.c_str()); break; case kTfLiteBuiltinSub: - elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer( - armnn::BinaryOperation::Sub); + layerName = GetName(armnn::BinaryOperation::Sub, nodeIndex); + elementwiseBinaryLayer = delegateData.m_Network->AddElementwiseBinaryLayer(armnn::BinaryOperation::Sub, + layerName.c_str()); break; default: return kTfLiteError; @@ -462,7 +476,8 @@ TfLiteStatus VisitElementwiseBinaryOperator(DelegateData& delegateData, auto inputsTensorsProcess = ProcessInputs(elementwiseBinaryLayer, delegateData, tfLiteContext, - tfLiteNode); + tfLiteNode, + nodeIndex); if (inputsTensorsProcess == kTfLiteError) { return inputsTensorsProcess; @@ -479,7 +494,8 @@ TfLiteStatus VisitElementwiseBinaryOperator(DelegateData& delegateData, return kTfLiteOk; } // Check and Create Activation - return FusedActivation(tfLiteContext, tfLiteNode, activationType, elementwiseBinaryLayer, 0, delegateData); + return FusedActivation(tfLiteContext, tfLiteNode, activationType, elementwiseBinaryLayer, 0, delegateData, + nodeIndex); } } // namespace armnnOpaqueDelegate |