blob: bbed43ae4cfec37b0ccca1cd3da1254181ac973f [file] [log] [blame]
//
// Copyright © 2022 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#include "ArmNNProfilingServiceInitialiser.hpp"
#include <armnn/BackendRegistry.hpp>
#include <armnn/profiling/ArmNNProfiling.hpp>
#include <armnn/utility/Assert.hpp>
#include <common/include/Counter.hpp>
namespace armnn
{
void ArmNNProfilingServiceInitialiser::InitialiseProfilingService(arm::pipe::IProfilingService& profilingService)
{
uint16_t ZERO = 0;
double ONE = 1.0;
std::string ArmNN_Runtime("ArmNN_Runtime");
// Register a category for the basic runtime counters
if (!profilingService.IsCategoryRegistered(ArmNN_Runtime))
{
profilingService.GetCounterRegistry().RegisterCategory(ArmNN_Runtime);
}
std::string networks("networks");
std::string networkLoads("Network loads");
// Register a counter for the number of Network loads
if (!profilingService.IsCounterRegistered(networkLoads))
{
const arm::pipe::Counter* loadedNetworksCounter =
profilingService.GetCounterRegistry().RegisterCounter(armnn::profiling::BACKEND_ID.Get(),
arm::pipe::NETWORK_LOADS,
ArmNN_Runtime,
ZERO,
ZERO,
ONE,
networkLoads,
"The number of networks loaded at runtime",
networks);
ARMNN_ASSERT(loadedNetworksCounter);
profilingService.InitializeCounterValue(loadedNetworksCounter->m_Uid);
}
// Register a counter for the number of unloaded networks
std::string networkUnloads("Network unloads");
if (!profilingService.IsCounterRegistered(networkUnloads))
{
const arm::pipe::Counter* unloadedNetworksCounter =
profilingService.GetCounterRegistry().RegisterCounter(armnn::profiling::BACKEND_ID.Get(),
arm::pipe::NETWORK_UNLOADS,
ArmNN_Runtime,
ZERO,
ZERO,
ONE,
networkUnloads,
"The number of networks unloaded at runtime",
networks);
ARMNN_ASSERT(unloadedNetworksCounter);
profilingService.InitializeCounterValue(unloadedNetworksCounter->m_Uid);
}
std::string backends("backends");
// Register a counter for the number of registered backends
std::string backendsRegistered("Backends registered");
if (!profilingService.IsCounterRegistered(backendsRegistered))
{
const arm::pipe::Counter* registeredBackendsCounter =
profilingService.GetCounterRegistry().RegisterCounter(armnn::profiling::BACKEND_ID.Get(),
arm::pipe::REGISTERED_BACKENDS,
ArmNN_Runtime,
ZERO,
ZERO,
ONE,
backendsRegistered,
"The number of registered backends",
backends);
ARMNN_ASSERT(registeredBackendsCounter);
profilingService.InitializeCounterValue(registeredBackendsCounter->m_Uid);
// Due to backends being registered before the profiling service becomes active,
// we need to set the counter to the correct value here
profilingService.SetCounterValue(arm::pipe::REGISTERED_BACKENDS, static_cast<uint32_t>(
armnn::BackendRegistryInstance().Size()));
}
// Register a counter for the number of registered backends
std::string backendsUnregistered("Backends unregistered");
if (!profilingService.IsCounterRegistered(backendsUnregistered))
{
const arm::pipe::Counter* unregisteredBackendsCounter =
profilingService.GetCounterRegistry().RegisterCounter(armnn::profiling::BACKEND_ID.Get(),
arm::pipe::UNREGISTERED_BACKENDS,
ArmNN_Runtime,
ZERO,
ZERO,
ONE,
backendsUnregistered,
"The number of unregistered backends",
backends);
ARMNN_ASSERT(unregisteredBackendsCounter);
profilingService.InitializeCounterValue(unregisteredBackendsCounter->m_Uid);
}
// Register a counter for the number of inferences run
std::string inferences("inferences");
std::string inferencesRun("Inferences run");
if (!profilingService.IsCounterRegistered(inferencesRun))
{
const arm::pipe::Counter* inferencesRunCounter =
profilingService.GetCounterRegistry().RegisterCounter(armnn::profiling::BACKEND_ID.Get(),
arm::pipe::INFERENCES_RUN,
ArmNN_Runtime,
ZERO,
ZERO,
ONE,
inferencesRun,
"The number of inferences run",
inferences);
ARMNN_ASSERT(inferencesRunCounter);
profilingService.InitializeCounterValue(inferencesRunCounter->m_Uid);
}
}
} // namespace armnn