From 4692e11e5af29b97748a1585a092df6800a0a831 Mon Sep 17 00:00:00 2001 From: Kevin May Date: Mon, 18 Oct 2021 14:41:50 +0100 Subject: IVGCVSW-6440 Print new Optimize and LoadedNetwork profiling points * Add parent LoadedNetwork profiling point * Make generic populateParent function to print new descendents in json Signed-off-by: Kevin May Change-Id: I41dc876bffae88e61a16d07fb13b062c321e78a6 --- src/armnn/Profiling.cpp | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) (limited to 'src/armnn/Profiling.cpp') diff --git a/src/armnn/Profiling.cpp b/src/armnn/Profiling.cpp index 7de602fc40..6a3522ba29 100644 --- a/src/armnn/Profiling.cpp +++ b/src/armnn/Profiling.cpp @@ -254,16 +254,16 @@ int CalcLevel(const Event* eventPtr) return level; } -void ProfilerImpl::PopulateInferences(std::vector& outInferences, int& outBaseLevel) const +void ProfilerImpl::PopulateParent(std::vector& outEvents, int& outBaseLevel, std::string parentName) const { - outInferences.reserve(m_EventSequence.size()); + outEvents.reserve(m_EventSequence.size()); for (const auto& event : m_EventSequence) { const Event* eventPtrRaw = event.get(); - if (eventPtrRaw->GetName() == "EnqueueWorkload") + if (eventPtrRaw->GetName() == parentName) { outBaseLevel = (outBaseLevel == -1) ? CalcLevel(eventPtrRaw) : outBaseLevel; - outInferences.push_back(eventPtrRaw); + outEvents.push_back(eventPtrRaw); } } } @@ -362,18 +362,40 @@ void ProfilerImpl::Print(std::ostream& outStream) const outStream.setf(std::ios::fixed); JsonPrinter printer(outStream); - // First find all the "inference" Events and print out duration measurements. + // First find all the parent Events and print out duration measurements. int baseLevel = -1; + + std::vector optimizations; + PopulateParent(optimizations, baseLevel, "Optimizer"); + + std::vector loadedNetworks; + PopulateParent(loadedNetworks, baseLevel, "LoadedNetwork"); + std::vector inferences; - PopulateInferences(inferences, baseLevel); + PopulateParent(inferences, baseLevel, "EnqueueWorkload"); // Second map out descendants hierarchy std::map> descendantsMap; PopulateDescendants(descendantsMap); + // Extract json objects for each parent event type + JsonChildObject optimizeObject{ "optimize_measurements" }; + + for (unsigned int optimizeIndex = 0; optimizeIndex < optimizations.size(); ++optimizeIndex) + { + auto optimization = optimizations[optimizeIndex]; + ExtractJsonObjects(optimizeIndex, optimization, optimizeObject, descendantsMap); + } + + JsonChildObject loadedNetworkObject{ "loaded_network_measurements" }; + + for (unsigned int loadedNetworkIndex = 0; loadedNetworkIndex < loadedNetworks.size(); ++loadedNetworkIndex) + { + auto loadedNetwork = loadedNetworks[loadedNetworkIndex]; + ExtractJsonObjects(loadedNetworkIndex, loadedNetwork, loadedNetworkObject, descendantsMap); + } + JsonChildObject inferenceObject{ "inference_measurements" }; - std::vector workloadObjects; - std::map> workloadToKernelObjects; for (unsigned int inferenceIndex = 0; inferenceIndex < inferences.size(); ++inferenceIndex) { @@ -399,6 +421,12 @@ void ProfilerImpl::Print(std::ostream& outStream) const size_t id = 0; if (m_DetailsToStdOutMethod != ProfilingDetailsMethod::DetailsOnly) { + printer.PrintJsonChildObject(optimizeObject, id); + printer.PrintSeparator(); + printer.PrintNewLine(); + printer.PrintJsonChildObject(loadedNetworkObject, id); + printer.PrintSeparator(); + printer.PrintNewLine(); printer.PrintJsonChildObject(inferenceObject, id); } // end of ArmNN @@ -452,7 +480,7 @@ void ProfilerImpl::AnalyzeEventsAndWriteResults(std::ostream& outStream) const int baseLevel = -1; std::vector inferences; - PopulateInferences(inferences, baseLevel); + PopulateParent(inferences, baseLevel, "EnqueueWorkload"); // Second map out descendants hierarchy std::map> descendantsMap; -- cgit v1.2.1