aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDerek Lamberti <derek.lamberti@arm.com>2021-10-13 18:02:25 +0100
committerJim Flynn <jim.flynn@arm.com>2021-10-15 13:38:20 +0000
commitf1e0ad38f1bc064e78e795f57db23901cf13f4ce (patch)
tree0effd64bb342fce10cc50ecd6bd5f27c64188ddc
parentac00253514bcb9d60d881f190eba8af83786327e (diff)
downloadarmnn-f1e0ad38f1bc064e78e795f57db23901cf13f4ce.tar.gz
Profiling instrumentation throughout the Optimizer
Signed-off-by: Derek Lamberti <derek.lamberti@arm.com> Change-Id: Ifcdafc12ca09455af2389bf84e34b6b87bbb0b15
-rw-r--r--include/armnn/INetwork.hpp6
-rw-r--r--src/armnn/Network.cpp26
-rw-r--r--src/armnn/Optimizer.cpp1
3 files changed, 28 insertions, 5 deletions
diff --git a/include/armnn/INetwork.hpp b/include/armnn/INetwork.hpp
index a8e6cfc0e3..5027818623 100644
--- a/include/armnn/INetwork.hpp
+++ b/include/armnn/INetwork.hpp
@@ -124,6 +124,7 @@ struct OptimizerOptions
, m_shapeInferenceMethod(armnn::ShapeInferenceMethod::ValidateOnly)
, m_ImportEnabled(false)
, m_ModelOptions()
+ , m_ProfilingEnabled(false)
{}
OptimizerOptions(bool reduceFp32ToFp16, bool debug, bool reduceFp32ToBf16, bool importEnabled,
@@ -134,6 +135,7 @@ struct OptimizerOptions
, m_shapeInferenceMethod(armnn::ShapeInferenceMethod::ValidateOnly)
, m_ImportEnabled(importEnabled)
, m_ModelOptions(modelOptions)
+ , m_ProfilingEnabled(false)
{
if (m_ReduceFp32ToFp16 && m_ReduceFp32ToBf16)
{
@@ -150,6 +152,7 @@ struct OptimizerOptions
, m_shapeInferenceMethod(shapeInferenceMethod)
, m_ImportEnabled(importEnabled)
, m_ModelOptions(modelOptions)
+ , m_ProfilingEnabled(false)
{
if (m_ReduceFp32ToFp16 && m_ReduceFp32ToBf16)
{
@@ -174,6 +177,9 @@ struct OptimizerOptions
// Enable Model Options
ModelOptions m_ModelOptions;
+
+ // Enable profiling dump of the optimizer phase
+ bool m_ProfilingEnabled;
};
class IWorkloadFactory;
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 39af10f2ac..4298b05528 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -886,6 +886,7 @@ OptimizationResult AssignBackends(OptimizedNetworkImpl* optNetObjPtr,
Graph::Iterator& lastLayer,
Optional<std::vector<std::string>&> errMessages)
{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_AssignBackends");
OptimizationResult result;
// Helper lambda to compose meaningful error message before returning with error
@@ -1046,7 +1047,7 @@ OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl* optNetObjPtr,
Optional<std::vector<std::string>&> errMessages)
{
ARMNN_ASSERT(optNetObjPtr);
-
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ApplyBackendOptimizations")
OptimizationResult result;
// Get the optimized graph
@@ -1078,6 +1079,7 @@ OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl* optNetObjPtr,
for (auto& subgraph : subgraphs)
{
// Try to optimize the current sub-graph
+ ARMNN_SCOPED_PROFILING_EVENT(backendObjPtr->GetId(), "Optimizer_OptimizeSubgraph");
OptimizationViews optimizationViews = backendObjPtr->OptimizeSubgraphView(*subgraph, modelOptions);
ARMNN_ASSERT(optimizationViews.Validate(*subgraph));
@@ -1498,6 +1500,7 @@ OptimizationResult SelectTensorHandleStrategy(Graph& optGraph,
bool importEnabled,
Optional<std::vector<std::string>&> errMessages)
{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_SelectTensorHandleStrategy");
OptimizationResult result;
optGraph.ForEachLayer([&backends, &registry, &result, &errMessages, importEnabled](Layer* layer)
@@ -1566,6 +1569,12 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork,
const OptimizerOptions& options,
Optional<std::vector<std::string>&> messages)
{
+ // Enable profiling
+ auto profiler = inNetwork.pNetworkImpl->GetGraph().GetProfiler();
+ ProfilerManager::GetInstance().RegisterProfiler(profiler.get());
+ profiler->EnableProfiling(options.m_ProfilingEnabled);
+
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer");
if (backendPreferences.empty())
{
throw InvalidArgumentException("Invoked Optimize with no backends specified");
@@ -1630,6 +1639,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork,
// If Fp32 to Fp16 optimization is set convert Fp32 network to Fp16
if (options.m_ReduceFp32ToFp16)
{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ReduceFp32ToFp16");
Optimizer::Pass(optGraph, MakeOptimizations(Fp32NetworkToFp16Converter()));
Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf()));
}
@@ -1639,6 +1649,7 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork,
// Only Constant weight of Convolution2d and FullyConnected are converted from Fp32 to Bf16
if (options.m_ReduceFp32ToBf16)
{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ReduceFp32ToBf16");
Optimizer::Pass(optGraph, MakeOptimizations(Fp32NetworkToBf16Converter()));
}
@@ -1706,12 +1717,17 @@ IOptimizedNetworkPtr Optimize(const INetwork& inNetwork,
}
// Based on the tensor handle strategy determined above, insert copy layers where required.
- optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);
+ {
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_AddCompatibilityLayers");
+ optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);
+ }
// Convert constants
- Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf()));
- Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsHalfToFloat()));
-
+ {
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ConvertConstants");
+ Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf()));
+ Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsHalfToFloat()));
+ }
return optNet;
}
bool NetworkImpl::GetShapeInferenceMethod()
diff --git a/src/armnn/Optimizer.cpp b/src/armnn/Optimizer.cpp
index 9c7e51614e..1d6a52efed 100644
--- a/src/armnn/Optimizer.cpp
+++ b/src/armnn/Optimizer.cpp
@@ -15,6 +15,7 @@ Optimizer::Optimizer()
void Optimizer::Pass(Graph& graph, const Optimizations& optimizations)
{
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_Pass");
// Create observables to observe changes to the graph
AddedLayerObservable addedLayerObservable(graph);
ErasedLayerNamesObservable erasedLayerNamesObservable(graph);