7 #include <common/include/ProfilingGuid.hpp> 40 const std::string& name,
41 std::vector<InstrumentPtr>&& instruments,
44 template<
typename DescriptorType>
46 const DescriptorType& desc,
48 const profiling::ProfilingGuid guid)
73 void Print(std::ostream& outStream)
const;
79 using DescPtr = std::unique_ptr<ProfilingDetails>;
94 template<
typename EventIterType>
98 void PopulateInferences(std::vector<const Event*>& outInferences,
int& outBaseLevel)
const;
114 void RegisterProfiler(
IProfiler* profiler);
134 template<
typename... Args>
137 const std::string& name,
142 if (m_Profiler && m_Profiler->IsProfilingEnabled())
144 std::vector<InstrumentPtr> instruments(0);
145 instruments.reserve(
sizeof...(args));
146 ConstructNextInVector(instruments, std::forward<Args>(args)...);
147 m_Event = m_Profiler->BeginEvent(backendId, name, std::move(instruments), guid);
153 if (m_Profiler && m_Event)
155 m_Profiler->pProfilerImpl->EndEvent(m_Event);
161 void ConstructNextInVector(std::vector<InstrumentPtr>& instruments)
166 template<
typename Arg,
typename... Args>
167 void ConstructNextInVector(std::vector<InstrumentPtr>& instruments, Arg&& arg, Args&&... args)
169 instruments.emplace_back(std::make_unique<Arg>(std::forward<Arg>(arg)));
170 ConstructNextInVector(instruments, std::forward<Args>(args)...);
178 template<
typename DescriptorType>
180 const DescriptorType& desc,
182 const profiling::ProfilingGuid guid)
187 profiler->AddLayerDetails(name, desc, infos, guid);
191 template<
typename DescriptorType>
192 void IProfiler::AddLayerDetails(
const std::string& name,
193 const DescriptorType& desc,
195 const profiling::ProfilingGuid guid)
197 return pProfilerImpl->AddLayerDetails(name, desc, infos, guid);
203 #define ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS_UNIQUE_LOC_INNER(lineNumber, backendId, guid, ...) \ 204 armnn::ScopedProfilingEvent e_ ## lineNumber(backendId, guid, __VA_ARGS__); 206 #define ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS_UNIQUE_LOC(lineNumber, backendId, guid, ...) \ 207 ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS_UNIQUE_LOC_INNER(lineNumber, backendId, guid, __VA_ARGS__) 216 #define ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(backendId, guid, ...) \ 217 ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS_UNIQUE_LOC(__LINE__,backendId, guid, __VA_ARGS__) 219 #define ARMNN_SCOPED_PROFILING_EVENT(backendId, name) \ 220 ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(backendId, armnn::EmptyOptional(), name, armnn::WallClockTimer()) 222 #define ARMNN_SCOPED_PROFILING_EVENT_GUID(backendId, name, guid) \ 223 ARMNN_SCOPED_PROFILING_EVENT_WITH_INSTRUMENTS(backendId, guid, name, armnn::WallClockTimer()) 226 #define ARMNN_REPORT_PROFILING_WORKLOAD_DESC(name, desc, infos, guid) \ 227 armnn::ProfilingUpdateDescriptions(name, desc, infos, guid);
Event class records measurements reported by BeginEvent()/EndEvent() and returns measurements when Ev...
std::unique_ptr< Instrument > InstrumentPtr
bool IsProfilingEnabled()
static ProfilerManager & GetInstance()
uint32_t GetEventColor(const BackendId &backendId) const
std::map< std::string, ProfilingEventStats > CalculateProfilingEventStats() const
Copyright (c) 2021 ARM Limited and Contributors.
void IgnoreUnused(Ts &&...)
void AnalyzeEventSequenceAndWriteResults(EventIterType first, EventIterType last, std::ostream &outStream) const
void AnalyzeEventsAndWriteResults(std::ostream &outStream) const
void EnableNetworkDetailsToStdOut()
ScopedProfilingEvent(const BackendId &backendId, const Optional< profiling::ProfilingGuid > &guid, const std::string &name, Args &&... args)
bool IsProfilingEnabled()
Checks whether profiling is enabled.
std::unique_ptr< Event > EventPtr
bool m_EnableDetailsToStdOut
void EndEvent(Event *event)
void Print(std::ostream &outStream) const
DescPtr m_ProfilingDetails
void PopulateInferences(std::vector< const Event *> &outInferences, int &outBaseLevel) const
std::stack< Event * > m_Parents
Contains information about TensorInfos of a layer.
void AddLayerDetails(const std::string &label, const DescriptorType &desc, const WorkloadInfo &infos, const profiling::ProfilingGuid guid)
void PopulateDescendants(std::map< const Event *, std::vector< const Event *>> &outDescendantsMap) const
void ProfilingUpdateDescriptions(const std::string &name, const DescriptorType &desc, const WorkloadInfo &infos, const profiling::ProfilingGuid guid)
Event * BeginEvent(armnn::IProfiler *profiler, const BackendId &backendId, const std::string &name, std::vector< InstrumentPtr > &&instruments, const Optional< profiling::ProfilingGuid > &guid)
std::unique_ptr< Instrument > InstrumentPtr
std::vector< EventPtr > m_EventSequence
std::unique_ptr< ProfilingDetails > DescPtr
void EnableProfiling(bool enableProfiling)