diff options
author | Narumol Prangnawarat <narumol.prangnawarat@arm.com> | 2019-11-22 11:26:06 +0000 |
---|---|---|
committer | Jim Flynn Arm <jim.flynn@arm.com> | 2019-11-29 17:01:45 +0000 |
commit | df31cfe29f9dccc4c2055a1d2a97de644b07d522 (patch) | |
tree | 15e848d398c35e669ecb0cff574907c4bd1662b9 /src/armnn/LoadedNetwork.cpp | |
parent | a68d8530d3dcfc7c54b9c2bfa00b407f45145253 (diff) | |
download | armnn-df31cfe29f9dccc4c2055a1d2a97de644b07d522.tar.gz |
IVGCVSW-4070 Implement "send post-optimized network structure"
* Send post-optimisation network structure if profiling service is enabled
* Refactor TimelineUtilityMethods
* Fix RecordEvent to link eventGuid with eventClassGuid
* Add common types and guid to LabelsAndEventClasses
* Add CreateRelationship to TimelineUtilityMethods
* Add CreateTypedEntity to TimelineUtilityMethods
* Add MarkEntityWithType to TimelineUtilityMethods
* Move VerifyTimeline functions to ProfilingTestUtils
* Post-optimisation network structure unit tests to Ref, Cl, Neon
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I0194f2037c236450c912f4c3cb11e46b80c0f512
Diffstat (limited to 'src/armnn/LoadedNetwork.cpp')
-rw-r--r-- | src/armnn/LoadedNetwork.cpp | 69 |
1 files changed, 68 insertions, 1 deletions
diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index e9a3545e35..36a56b044e 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -17,6 +17,9 @@ #include <backendsCommon/IMemoryManager.hpp> #include <backendsCommon/MemCopyWorkload.hpp> #include <backendsCommon/MemSyncWorkload.hpp> +#include <LabelsAndEventClasses.hpp> +#include <ProfilingService.hpp> +#include <TimelineUtilityMethods.hpp> #include <boost/polymorphic_cast.hpp> #include <boost/assert.hpp> @@ -27,6 +30,7 @@ namespace armnn { using namespace std; +using namespace armnn::profiling; namespace { @@ -39,6 +43,43 @@ std::string ToErrorMessage(const char * prefix, const ExceptionType & error) return ss.str(); } +void AddLayerStructure(std::unique_ptr<TimelineUtilityMethods>& timelineUtils, + const Layer& layer, + ProfilingGuid networkGuid) +{ + // Add layer to the post-optimisation network structure + std::string layerName = layer.GetNameStr().empty() ? "<Unnamed>" : layer.GetNameStr(); + timelineUtils->CreateNamedTypedChildEntity(layer.GetGuid(), + networkGuid, + layerName, + LabelsAndEventClasses::LAYER_GUID); + for (auto&& input : layer.GetInputSlots()) + { + const IOutputSlot* source = input.GetConnectedOutputSlot(); + BOOST_ASSERT(source != NULL); + timelineUtils->CreateConnectionRelationship(ProfilingRelationshipType::RetentionLink, + source->GetOwningLayerGuid(), + layer.GetGuid()); + } +} + +void AddWorkloadStructure(std::unique_ptr<TimelineUtilityMethods>& timelineUtils, + std::unique_ptr<IWorkload>& workload, + const Layer& layer) +{ + // Add workload to the post-optimisation network structure + timelineUtils->CreateTypedEntity(workload->GetGuid(), LabelsAndEventClasses::WORKLOAD_GUID); + timelineUtils->MarkEntityWithLabel(workload->GetGuid(), + layer.GetBackendId().Get(), + LabelsAndEventClasses::BACKENDID_GUID); + + // Link the workload to the layer + timelineUtils->CreateRelationship(ProfilingRelationshipType::RetentionLink, + layer.GetGuid(), + workload->GetGuid()); + +} + } // anonymous std::unique_ptr<LoadedNetwork> LoadedNetwork::MakeLoadedNetwork(std::unique_ptr<OptimizedNetwork> net, @@ -149,9 +190,22 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net, } } + ProfilingGuid networkGuid = m_OptimizedNetwork->GetGuid(); + std::unique_ptr<TimelineUtilityMethods> timelineUtils = TimelineUtilityMethods::GetTimelineUtils(); + if (timelineUtils) + { + timelineUtils->CreateTypedEntity(networkGuid, LabelsAndEventClasses::NETWORK_GUID); + } + //Then create workloads. for (auto&& layer : order) { + if (timelineUtils) + { + // Add layer to the post-optimisation network structure + AddLayerStructure(timelineUtils, *layer, networkGuid); + } + const IWorkloadFactory& workloadFactory = GetWorkloadFactory(*layer); switch (layer->GetType()) @@ -168,13 +222,20 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net, if (!workload) { - const char* const layerName = layer->GetNameStr().length() != 0 ? layer->GetName() : "<Unnamed>"; + const char* const layerName = + layer->GetNameStr().length() != 0 ? layer->GetName() : "<Unnamed>"; throw InvalidArgumentException(boost::str( boost::format("No workload created for layer (name: '%1%' type: '%2%') (compute '%3%')") % layerName % static_cast<int>(layer->GetType()) % layer->GetBackendId().Get() )); } + if (timelineUtils) + { + // Add workload to the post-optimisation network structure + AddWorkloadStructure(timelineUtils, workload, *layer); + } + m_WorkloadQueue.push_back(move(workload)); // release the constant data in the layer.. layer->ReleaseConstantData(); @@ -183,6 +244,12 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr<OptimizedNetwork> net, } } + if (timelineUtils) + { + // Commit to send the post-optimisation network structure + timelineUtils->Commit(); + } + // Set up memory. m_OptimizedNetwork->GetGraph().AllocateDynamicBuffers(); |