ArmNN
 21.11
PeriodicCounterSelectionCommandHandler.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2019 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "CounterIdMap.hpp"
9 #include "Holder.hpp"
11 #include "SendCounterPacket.hpp"
13 #include "ICounterValues.hpp"
14 
16 #include "armnn/Logging.hpp"
18 
19 #include <common/include/CommandHandlerFunctor.hpp>
20 #include <common/include/Packet.hpp>
21 
22 #include <set>
23 
24 namespace armnn
25 {
26 
27 namespace profiling
28 {
29 
30 
31 class PeriodicCounterSelectionCommandHandler : public arm::pipe::CommandHandlerFunctor
32 {
33 
34 public:
36  uint32_t packetId,
37  uint32_t version,
38  const std::unordered_map<BackendId,
39  std::shared_ptr<armnn::profiling::IBackendProfilingContext>>&
40  backendProfilingContexts,
41  const ICounterMappings& counterIdMap,
42  Holder& captureDataHolder,
43  const uint16_t maxArmnnCounterId,
44  IPeriodicCounterCapture& periodicCounterCapture,
45  const IReadCounterValues& readCounterValue,
46  ISendCounterPacket& sendCounterPacket,
47  const ProfilingStateMachine& profilingStateMachine)
48  : CommandHandlerFunctor(familyId, packetId, version)
49  , m_BackendProfilingContexts(backendProfilingContexts)
50  , m_CounterIdMap(counterIdMap)
51  , m_CaptureDataHolder(captureDataHolder)
52  , m_MaxArmCounterId(maxArmnnCounterId)
53  , m_PeriodicCounterCapture(periodicCounterCapture)
54  , m_PrevCapturePeriod(0)
55  , m_ReadCounterValues(readCounterValue)
56  , m_SendCounterPacket(sendCounterPacket)
57  , m_StateMachine(profilingStateMachine)
58 
59  {
60 
61  }
62 
63  void operator()(const arm::pipe::Packet& packet) override;
64 
65 private:
66 
67  std::unordered_map<armnn::BackendId, std::vector<uint16_t>> m_BackendCounterMap;
68  const std::unordered_map<BackendId,
69  std::shared_ptr<armnn::profiling::IBackendProfilingContext>>& m_BackendProfilingContexts;
70  const ICounterMappings& m_CounterIdMap;
71  Holder& m_CaptureDataHolder;
72  const uint16_t m_MaxArmCounterId;
73  IPeriodicCounterCapture& m_PeriodicCounterCapture;
74  uint32_t m_PrevCapturePeriod;
75  std::set<uint16_t> m_PrevBackendCounterIds;
76  const IReadCounterValues& m_ReadCounterValues;
77  ISendCounterPacket& m_SendCounterPacket;
78  const ProfilingStateMachine& m_StateMachine;
79 
80  void ActivateBackedCounters(const armnn::BackendId backendId,
81  const uint32_t capturePeriod,
82  const std::vector<uint16_t> counterIds)
83  {
84  Optional<std::string> errorMsg =
85  m_BackendProfilingContexts.at(backendId)->ActivateCounters(capturePeriod, counterIds);
86 
87  if(errorMsg.has_value())
88  {
89  ARMNN_LOG(warning) << "An error has occurred when activating counters of " << backendId << ": "
90  << errorMsg.value();
91  }
92  }
93  void ParseData(const arm::pipe::Packet& packet, CaptureData& captureData);
94  std::set<armnn::BackendId> ProcessBackendCounterIds(const uint32_t capturePeriod,
95  const std::set<uint16_t> newCounterIds,
96  const std::set<uint16_t> unusedCounterIds);
97 
98 };
99 
100 } // namespace profiling
101 
102 } // namespace armnn
103 
#define ARMNN_LOG(severity)
Definition: Logging.hpp:202
Copyright (c) 2021 ARM Limited and Contributors.
bool has_value() const noexcept
Definition: Optional.hpp:53
PeriodicCounterSelectionCommandHandler(uint32_t familyId, uint32_t packetId, uint32_t version, const std::unordered_map< BackendId, std::shared_ptr< armnn::profiling::IBackendProfilingContext >> &backendProfilingContexts, const ICounterMappings &counterIdMap, Holder &captureDataHolder, const uint16_t maxArmnnCounterId, IPeriodicCounterCapture &periodicCounterCapture, const IReadCounterValues &readCounterValue, ISendCounterPacket &sendCounterPacket, const ProfilingStateMachine &profilingStateMachine)