33 #include <common/include/ProfilingGuidGenerator.hpp> 43 static const uint16_t NETWORK_LOADS = 0;
44 static const uint16_t NETWORK_UNLOADS = 1;
45 static const uint16_t REGISTERED_BACKENDS = 2;
46 static const uint16_t UNREGISTERED_BACKENDS = 3;
47 static const uint16_t INFERENCES_RUN = 4;
48 static const uint16_t MAX_ARMNN_COUNTER = INFERENCES_RUN;
59 std::shared_ptr<armnn::profiling::IBackendProfilingContext>>;
63 , m_TimelineReporting(false)
64 , m_CounterDirectory()
66 , m_ProfilingConnection()
70 , m_CommandHandlerRegistry()
71 , m_PacketVersionResolver()
72 , m_CommandHandler(1000,
74 m_CommandHandlerRegistry,
75 m_PacketVersionResolver)
77 , m_SendCounterPacket(m_BufferManager)
78 , m_SendThread(m_StateMachine, m_BufferManager, m_SendCounterPacket)
79 , m_SendTimelinePacket(m_BufferManager)
80 , m_PeriodicCounterCapture(m_Holder, m_SendCounterPacket, *this, m_CounterIdMap, m_BackendProfilingContexts)
81 , m_ConnectionAcknowledgedCommandHandler(0,
83 m_PacketVersionResolver.ResolvePacketVersion(0, 1).GetEncodedValue(),
89 m_BackendProfilingContexts)
90 , m_RequestCounterDirectoryCommandHandler(0,
92 m_PacketVersionResolver.ResolvePacketVersion(0, 3).GetEncodedValue(),
97 , m_PeriodicCounterSelectionCommandHandler(0,
99 m_PacketVersionResolver.ResolvePacketVersion(0, 4).GetEncodedValue(),
100 m_BackendProfilingContexts,
104 m_PeriodicCounterCapture,
108 , m_PerJobCounterSelectionCommandHandler(0,
110 m_PacketVersionResolver.ResolvePacketVersion(0, 5).GetEncodedValue(),
112 , m_ActivateTimelineReportingCommandHandler(0,
114 m_PacketVersionResolver.ResolvePacketVersion(0, 6)
116 m_SendTimelinePacket,
121 , m_DeactivateTimelineReportingCommandHandler(0,
123 m_PacketVersionResolver.ResolvePacketVersion(0, 7)
128 , m_TimelinePacketWriterFactory(m_BufferManager)
129 , m_MaxGlobalCounterId(
armnn::profiling::INFERENCES_RUN)
130 , m_ServiceActive(false)
133 m_CommandHandlerRegistry.RegisterFunctor(&m_ConnectionAcknowledgedCommandHandler);
136 m_CommandHandlerRegistry.RegisterFunctor(&m_RequestCounterDirectoryCommandHandler);
139 m_CommandHandlerRegistry.RegisterFunctor(&m_PeriodicCounterSelectionCommandHandler);
142 m_CommandHandlerRegistry.RegisterFunctor(&m_PerJobCounterSelectionCommandHandler);
144 m_CommandHandlerRegistry.RegisterFunctor(&m_ActivateTimelineReportingCommandHandler);
146 m_CommandHandlerRegistry.RegisterFunctor(&m_DeactivateTimelineReportingCommandHandler);
154 bool resetProfilingService =
false);
165 std::shared_ptr<armnn::profiling::IBackendProfilingContext> profilingContext);
186 const std::vector<uint16_t>& counterIds,
187 const std::set<BackendId>& activeBackends);
191 uint32_t
AddCounterValue(uint16_t counterUid, uint32_t value)
override;
197 ProfilingDynamicGuid
NextGuid()
override;
206 return m_SendCounterPacket;
211 static ProfilingStaticGuid
GetStaticId(
const std::string& str);
217 return m_TimelineReporting;
234 void InitializeCounterValue(uint16_t counterUid);
239 void CheckCounterUid(uint16_t counterUid)
const;
243 std::atomic<bool> m_TimelineReporting;
251 arm::pipe::CommandHandlerRegistry m_CommandHandlerRegistry;
252 arm::pipe::PacketVersionResolver m_PacketVersionResolver;
272 uint16_t m_MaxGlobalCounterId;
274 static ProfilingGuidGenerator m_GuidGenerator;
277 std::mutex m_ServiceActiveMutex;
278 std::condition_variable m_ServiceActiveConditionVariable;
279 bool m_ServiceActive;
291 backup = instance.m_ProfilingConnectionFactory.release();
292 instance.m_ProfilingConnectionFactory.reset(other);
296 return instance.m_ProfilingConnection.get();
309 return instance.m_BufferManager;
bool IsCounterRegistered(uint16_t counterUid) const override
void WaitForProfilingServiceActivation(unsigned int timeout) override
std::shared_ptr< ILocalPacketHandler > ILocalPacketHandlerSharedPtr
uint32_t GetAbsoluteCounterValue(uint16_t counterUid) const override
std::list< std::atomic< uint32_t > > CounterValues
std::unordered_map< BackendId, std::shared_ptr< armnn::profiling::IBackendProfilingContext > > BackendProfilingContext
ProfilingState GetCurrentState() const
ICounterRegistry & GetCounterRegistry()
void NotifyBackendsForTimelineReporting() override
void NotifyProfilingServiceActive() override
Copyright (c) 2021 ARM Limited and Contributors.
ProfilingDynamicGuid NextGuid() override
Return the next random Guid in the sequence.
uint32_t IncrementCounterValue(uint16_t counterUid) override
std::unique_ptr< IProfilingConnection > IProfilingConnectionPtr
void AddLocalPacketHandler(ILocalPacketHandlerSharedPtr localPacketHandler)
void ResetGuidGenerator()
bool WaitForPacketSent(ProfilingService &instance, uint32_t timeout=1000)
bool WaitForPacketSent(uint32_t timeout)
uint32_t GetDeltaCounterValue(uint16_t counterUid) override
uint32_t SubtractCounterValue(uint16_t counterUid, uint32_t value) override
std::vector< std::atomic< uint32_t > * > CounterIndices
void SwapProfilingConnectionFactory(ProfilingService &instance, IProfilingConnectionFactory *other, IProfilingConnectionFactory *&backup)
static ProfilingStaticGuid GetStaticId(const std::string &str)
void SetCaptureData(uint32_t capturePeriod, const std::vector< uint16_t > &counterIds, const std::set< BackendId > &activeBackends)
std::unique_ptr< ISendTimelinePacket > GetSendTimelinePacket() const override
const ICounterMappings & GetCounterMappings() const override
void ResetExternalProfilingOptions(const ExternalProfilingOptions &options, bool resetProfilingService=false)
#define ARMNN_ASSERT(COND)
uint32_t AddCounterValue(uint16_t counterUid, uint32_t value) override
IRegisterCounterMapping & GetCounterMappingRegistry()
bool IsTimelineReportingEnabled()
BufferManager & GetBufferManager(ProfilingService &instance)
ProfilingService(Optional< IReportStructure &> reportStructure=EmptyOptional())
void SetCounterValue(uint16_t counterUid, uint32_t value) override
CaptureData GetCaptureData() override
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
bool IsProfilingEnabled() const override
IProfilingConnection * GetProfilingConnection(ProfilingService &instance)
static ProfilingDynamicGuid GetNextGuid()
void TransitionToState(ProfilingState newState)
std::unique_ptr< IProfilingConnectionFactory > IProfilingConnectionFactoryPtr
void TransitionToState(ProfilingService &instance, ProfilingState newState)
ISendCounterPacket & GetSendCounterPacket() override
void AddBackendProfilingContext(const BackendId backendId, std::shared_ptr< armnn::profiling::IBackendProfilingContext > profilingContext)
const ICounterDirectory & GetCounterDirectory() const
ProfilingState ConfigureProfilingService(const ExternalProfilingOptions &options, bool resetProfilingService=false)
uint16_t GetCounterCount() const override
ProfilingStaticGuid GenerateStaticId(const std::string &str) override
Create a ProfilingStaticGuid based on a hash of the string.