diff options
Diffstat (limited to 'src/armnn/Profiling.cpp')
-rw-r--r-- | src/armnn/Profiling.cpp | 46 |
1 files changed, 37 insertions, 9 deletions
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<const Event*>& outInferences, int& outBaseLevel) const +void ProfilerImpl::PopulateParent(std::vector<const Event*>& 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<const Event*> optimizations; + PopulateParent(optimizations, baseLevel, "Optimizer"); + + std::vector<const Event*> loadedNetworks; + PopulateParent(loadedNetworks, baseLevel, "LoadedNetwork"); + std::vector<const Event*> inferences; - PopulateInferences(inferences, baseLevel); + PopulateParent(inferences, baseLevel, "EnqueueWorkload"); // Second map out descendants hierarchy std::map<const Event*, std::vector<const Event*>> 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<JsonChildObject> workloadObjects; - std::map<unsigned int, std::vector<JsonChildObject>> 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<const Event*> inferences; - PopulateInferences(inferences, baseLevel); + PopulateParent(inferences, baseLevel, "EnqueueWorkload"); // Second map out descendants hierarchy std::map<const Event*, std::vector<const Event*>> descendantsMap; |