31 m_KeepRunning.store(
true);
34 m_PeriodCaptureThread = std::thread(&PeriodicCounterCapture::Capture,
this, std::ref(m_ReadCounterValues));
40 m_KeepRunning.store(
false);
43 if (m_PeriodCaptureThread.joinable())
46 m_PeriodCaptureThread.join();
53 CaptureData PeriodicCounterCapture::ReadCaptureData()
58 void PeriodicCounterCapture::DispatchPeriodicCounterCapturePacket(
59 const armnn::BackendId& backendId,
const std::vector<Timestamp>& timestampValues)
62 for (
const auto timestampInfo : timestampValues)
64 std::vector<CounterValue> backendCounterValues = timestampInfo.counterValues;
65 for_each(backendCounterValues.begin(), backendCounterValues.end(), [&](
CounterValue& backendCounterValue)
68 backendCounterValue.counterId = m_CounterIdMap.
GetGlobalId(backendCounterValue.counterId, backendId);
81 auto currentCaptureData = ReadCaptureData();
82 const std::vector<uint16_t>& counterIds = currentCaptureData.GetCounterIds();
83 const uint32_t capturePeriod = currentCaptureData.GetCapturePeriod();
85 if (capturePeriod == 0)
88 std::this_thread::sleep_for(std::chrono::milliseconds(50u));
92 if(counterIds.size() != 0)
94 std::vector<CounterValue> counterValues;
96 auto numCounters = counterIds.size();
97 counterValues.reserve(numCounters);
100 for (uint16_t index = 0; index < numCounters; ++index)
102 auto requestedId = counterIds[index];
103 uint32_t counterValue = 0;
111 ARMNN_LOG(
warning) <<
"An error has occurred when getting a counter value: " 116 counterValues.emplace_back(
CounterValue {requestedId, counterValue });
124 auto activeBackends = currentCaptureData.GetActiveBackends();
125 for_each(activeBackends.begin(), activeBackends.end(), [&](
const armnn::BackendId& backendId)
127 DispatchPeriodicCounterCapturePacket(
128 backendId, m_BackendProfilingContext.at(backendId)->ReportCounterValues());
132 std::this_thread::sleep_for(std::chrono::microseconds(capturePeriod));
134 while (m_KeepRunning.load());
CaptureData GetCaptureData() const
virtual void SendPeriodicCounterCapturePacket(uint64_t timestamp, const IndexValuePairsVector &values)=0
Create and write a PeriodicCounterCapturePacket from the parameters to the buffer.
#define ARMNN_LOG(severity)
virtual uint16_t GetGlobalId(uint16_t backendCounterId, const armnn::BackendId &backendId) const =0
virtual uint32_t GetCounterValue(uint16_t counterUid) const =0
virtual const char * what() const noexcept override
Base class for all ArmNN exceptions so that users can filter to just those.