IVGCVSW-4067 Change LayerGuid to use ProfilingGuid
* Refactoring to enable ProfilingGuid
* Add profiling includes to Android.mk
Signed-off-by: Jan Eilers <jan.eilers@arm.com>
Change-Id: Ieb25e15e3dc302eb42817d824ad8411ac76dcfe8
diff --git a/include/armnn/Types.hpp b/include/armnn/Types.hpp
index b2aa52e..3d3ab65 100644
--- a/include/armnn/Types.hpp
+++ b/include/armnn/Types.hpp
@@ -209,8 +209,10 @@
SizeType m_NumDimMappings;
};
+namespace profiling { class ProfilingGuid; }
+
/// Define LayerGuid type.
-using LayerGuid = unsigned int;
+using LayerGuid = profiling::ProfilingGuid;
class ITensorHandle;
@@ -312,4 +314,4 @@
return hash<uint64_t>()(uint64_t(guid));
}
};
-}
+} // namespace std
diff --git a/src/armnn/Layer.cpp b/src/armnn/Layer.cpp
index dbeda22..1efe7e4 100644
--- a/src/armnn/Layer.cpp
+++ b/src/armnn/Layer.cpp
@@ -5,6 +5,7 @@
#include "Layer.hpp"
#include "Graph.hpp"
+#include <ProfilingService.hpp>
#include <backendsCommon/WorkloadData.hpp>
#include <backendsCommon/CpuTensorHandle.hpp>
@@ -184,15 +185,6 @@
return m_EdgeStrategies[connectionIdx];
}
-namespace {
-LayerGuid GenerateLayerGuid()
-{
- // Note: Not thread safe.
- static LayerGuid newGuid=0;
- return newGuid++;
-}
-} // namespace
-
Layer::Layer(unsigned int numInputSlots,
unsigned int numOutputSlots,
LayerType type,
@@ -202,7 +194,7 @@
, m_LayerName(name ? name : "")
, m_Type(type)
, m_BackendId()
-, m_Guid(GenerateLayerGuid())
+, m_Guid(profiling::ProfilingService::Instance().NextGuid())
{
m_InputSlots.reserve(numInputSlots);
for (unsigned int i = 0; i < numInputSlots; ++i)
diff --git a/src/armnn/QuantizerVisitor.cpp b/src/armnn/QuantizerVisitor.cpp
index 8a3d4f2..4b80b02 100644
--- a/src/armnn/QuantizerVisitor.cpp
+++ b/src/armnn/QuantizerVisitor.cpp
@@ -109,8 +109,8 @@
void QuantizerVisitor::RecordLayer(const IConnectableLayer* srcLayer, IConnectableLayer* quantizedLayer)
{
- m_OriginalToQuantizedGuidMap[srcLayer->GetGuid()] = quantizedLayer->GetGuid();
- m_QuantizedGuidToLayerMap[quantizedLayer->GetGuid()] = quantizedLayer;
+ m_OriginalToQuantizedGuidMap.insert(std::make_pair(srcLayer->GetGuid(), quantizedLayer->GetGuid()));
+ m_QuantizedGuidToLayerMap.insert(std::make_pair(quantizedLayer->GetGuid(), quantizedLayer));
}
void QuantizerVisitor::VisitAbsLayer(const IConnectableLayer* layer, const char* name)
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 81091bc..5d06958 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -61,18 +61,17 @@
}
}
-uint32_t SerializerVisitor::GetSerializedId(unsigned int guid)
+uint32_t SerializerVisitor::GetSerializedId(armnn::LayerGuid guid)
{
- std::pair<unsigned int, uint32_t> guidPair(guid, m_layerId);
-
if (m_guidMap.empty())
{
- m_guidMap.insert(guidPair);
+ m_guidMap.insert(std::make_pair(guid, m_layerId));
}
else if (m_guidMap.find(guid) == m_guidMap.end())
{
- guidPair.second = ++m_layerId;
- m_guidMap.insert(guidPair);
+ ++m_layerId;
+ m_guidMap.insert(std::make_pair(guid, m_layerId));
+
return m_layerId;
}
return m_guidMap[guid];
@@ -88,7 +87,7 @@
auto flatBufferInputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
flatBufferInputBaseLayer,
id);
- // Push layer Guid to outputIds.
+ // Push layer index to outputIds.
m_inputIds.push_back(GetSerializedId(layer->GetGuid()));
// Create the FlatBuffer InputLayer
@@ -108,7 +107,7 @@
auto flatBufferOutputBindableBaseLayer = serializer::CreateBindableLayerBase(m_flatBufferBuilder,
flatBufferOutputBaseLayer,
id);
- // Push layer Guid to outputIds.
+ // Push layer index to outputIds.
m_outputIds.push_back(GetSerializedId(layer->GetGuid()));
// Create the FlatBuffer OutputLayer
diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp
index 1fd507a..7dfd534 100644
--- a/src/armnnSerializer/Serializer.hpp
+++ b/src/armnnSerializer/Serializer.hpp
@@ -13,6 +13,8 @@
#include <ArmnnSchema_generated.h>
+#include <armnn/Types.hpp>
+
namespace armnnSerializer
{
@@ -27,12 +29,12 @@
return m_flatBufferBuilder;
}
- std::vector<unsigned int>& GetInputIds()
+ std::vector<uint32_t>& GetInputIds()
{
return m_inputIds;
}
- std::vector<unsigned int>& GetOutputIds()
+ std::vector<uint32_t>& GetOutputIds()
{
return m_outputIds;
}
@@ -277,7 +279,7 @@
flatbuffers::Offset<flatbuffers::Vector<T>> CreateDataVector(const void* memory, unsigned int size);
///Function which maps Guid to an index
- uint32_t GetSerializedId(unsigned int guid);
+ uint32_t GetSerializedId(armnn::LayerGuid guid);
/// Creates the serializer InputSlots for the layer.
std::vector<flatbuffers::Offset<armnnSerializer::InputSlot>> CreateInputSlots(
@@ -293,14 +295,14 @@
/// AnyLayers required by the SerializedGraph.
std::vector<flatbuffers::Offset<armnnSerializer::AnyLayer>> m_serializedLayers;
- /// Guids of all Input Layers required by the SerializedGraph.
- std::vector<unsigned int> m_inputIds;
+ /// Vector of indexes of all Input Layers required by the SerializedGraph.
+ std::vector<uint32_t> m_inputIds;
- /// Guids of all Output Layers required by the SerializedGraph.
- std::vector<unsigned int> m_outputIds;
+ /// Vector of indexes of all Output Layers required by the SerializedGraph.
+ std::vector<uint32_t> m_outputIds;
/// Mapped Guids of all Layers to match our index.
- std::unordered_map<unsigned int, uint32_t > m_guidMap;
+ std::unordered_map<armnn::LayerGuid, uint32_t > m_guidMap;
/// layer within our FlatBuffer index.
uint32_t m_layerId;
diff --git a/src/armnnUtils/DotSerializer.cpp b/src/armnnUtils/DotSerializer.cpp
index 1f36cf7..7416ff6 100644
--- a/src/armnnUtils/DotSerializer.cpp
+++ b/src/armnnUtils/DotSerializer.cpp
@@ -116,7 +116,7 @@
return *this;
}
-DotEdge::DotEdge(std::ostream& stream, unsigned int fromNodeId, unsigned int toNodeId)
+DotEdge::DotEdge(std::ostream& stream, LayerGuid fromNodeId, LayerGuid toNodeId)
: DotBase(stream)
{
std::stringstream ss;
@@ -176,7 +176,7 @@
GetStream() << s;
}
-DotNode::DotNode(std::ostream& stream, unsigned int nodeId, const char* label)
+DotNode::DotNode(std::ostream& stream, LayerGuid nodeId, const char* label)
: DotBase(stream)
{
std::stringstream ss;
diff --git a/src/armnnUtils/DotSerializer.hpp b/src/armnnUtils/DotSerializer.hpp
index dfb8c7f..253fb76 100644
--- a/src/armnnUtils/DotSerializer.hpp
+++ b/src/armnnUtils/DotSerializer.hpp
@@ -5,6 +5,8 @@
#pragma once
+#include <armnn/Types.hpp>
+
#include <ostream>
#include <vector>
#include <memory>
@@ -75,7 +77,7 @@
class DotEdge : public DotBase
{
public:
- explicit DotEdge(std::ostream& stream, unsigned int fromNodeId, unsigned int toNodeId);
+ explicit DotEdge(std::ostream& stream, LayerGuid fromNodeId, LayerGuid toNodeId);
~DotEdge();
DotAttributeSet& GetAttributeSet() { return *m_Attributes.get(); }
@@ -99,7 +101,7 @@
class DotNode : public DotBase
{
public:
- explicit DotNode(std::ostream& stream, unsigned int nodeId, const char* label);
+ explicit DotNode(std::ostream& stream, LayerGuid nodeId, const char* label);
~DotNode();
NodeContent& GetContents() { return *m_Contents.get(); }
diff --git a/src/backends/backendsCommon/WorkloadData.hpp b/src/backends/backendsCommon/WorkloadData.hpp
index b45a171..6a96a4a 100644
--- a/src/backends/backendsCommon/WorkloadData.hpp
+++ b/src/backends/backendsCommon/WorkloadData.hpp
@@ -439,6 +439,8 @@
struct DebugQueueDescriptor : QueueDescriptor
{
+ DebugQueueDescriptor() : m_Guid(0) {}
+
void Validate(const WorkloadInfo& workloadInfo) const;
LayerGuid m_Guid;
diff --git a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp
index 594fd45..67c3e2c 100644
--- a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp
+++ b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp
@@ -25,11 +25,11 @@
{
case LayerType::Input:
++m_inputLayerCount;
- if (layer->GetGuid() == 0)
+ if (layer->GetGuid() == profiling::ProfilingGuid(0))
{
BOOST_TEST(layer->GetName() == "inLayer0");
}
- else if (layer->GetGuid() == 1)
+ else if (layer->GetGuid() == profiling::ProfilingGuid(1))
{
BOOST_TEST(layer->GetName() == "inLayer1");
}