ArmNN
 20.02
CounterDirectory.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "ICounterDirectory.hpp"
9 #include "ICounterRegistry.hpp"
10 
11 #include <string>
12 #include <unordered_set>
13 #include <unordered_map>
14 
15 #include <boost/numeric/conversion/cast.hpp>
16 
17 namespace armnn
18 {
19 
20 namespace profiling
21 {
22 
24 {
25 public:
26  CounterDirectory() = default;
27  ~CounterDirectory() = default;
28 
29  // Register profiling objects
30  const Category* RegisterCategory (const std::string& categoryName) override;
31  const Device* RegisterDevice (const std::string& deviceName,
32  uint16_t cores = 0,
33  const Optional<std::string>& parentCategoryName = EmptyOptional()) override;
34  const CounterSet* RegisterCounterSet(const std::string& counterSetName,
35  uint16_t count = 0,
36  const Optional<std::string>& parentCategoryName = EmptyOptional()) override;
37  const Counter* RegisterCounter(const BackendId& backendId,
38  const uint16_t uid,
39  const std::string& parentCategoryName,
40  uint16_t counterClass,
41  uint16_t interpolation,
42  double multiplier,
43  const std::string& name,
44  const std::string& description,
45  const Optional<std::string>& units = EmptyOptional(),
46  const Optional<uint16_t>& numberOfCores = EmptyOptional(),
47  const Optional<uint16_t>& deviceUid = EmptyOptional(),
48  const Optional<uint16_t>& counterSetUid = EmptyOptional()) override;
49 
50  // Getters for counts
51  uint16_t GetCategoryCount() const override { return boost::numeric_cast<uint16_t>(m_Categories.size()); }
52  uint16_t GetDeviceCount() const override { return boost::numeric_cast<uint16_t>(m_Devices.size()); }
53  uint16_t GetCounterSetCount() const override { return boost::numeric_cast<uint16_t>(m_CounterSets.size()); }
54  uint16_t GetCounterCount() const override { return boost::numeric_cast<uint16_t>(m_Counters.size()); }
55 
56  // Getters for collections
57  const Categories& GetCategories() const override { return m_Categories; }
58  const Devices& GetDevices() const override { return m_Devices; }
59  const CounterSets& GetCounterSets() const override { return m_CounterSets; }
60  const Counters& GetCounters() const override { return m_Counters; }
61 
62  // Getters for profiling objects
63  const Category* GetCategory(const std::string& name) const override;
64  const Device* GetDevice(uint16_t uid) const override;
65  const CounterSet* GetCounterSet(uint16_t uid) const override;
66  const Counter* GetCounter(uint16_t uid) const override;
67 
68  // Queries for profiling objects
69  bool IsCategoryRegistered(const std::string& categoryName) const;
70  bool IsDeviceRegistered(uint16_t deviceUid) const;
71  bool IsDeviceRegistered(const std::string& deviceName) const;
72  bool IsCounterSetRegistered(uint16_t counterSetUid) const;
73  bool IsCounterSetRegistered(const std::string& counterSetName) const;
74  bool IsCounterRegistered(uint16_t counterUid) const;
75  bool IsCounterRegistered(const std::string& counterName) const;
76 
77  // Clears all the counter directory contents
78  void Clear();
79 
80 private:
81  // The profiling collections owned by the counter directory
82  Categories m_Categories;
83  Devices m_Devices;
84  CounterSets m_CounterSets;
85  Counters m_Counters;
86 
87  // Helper functions
88  CategoriesIt FindCategory(const std::string& categoryName) const;
89  DevicesIt FindDevice(uint16_t deviceUid) const;
90  DevicesIt FindDevice(const std::string& deviceName) const;
91  CounterSetsIt FindCounterSet(uint16_t counterSetUid) const;
92  CounterSetsIt FindCounterSet(const std::string& counterSetName) const;
93  CountersIt FindCounter(uint16_t counterUid) const;
94  CountersIt FindCounter(const std::string& counterName) const;
95  uint16_t GetNumberOfCores(const Optional<uint16_t>& numberOfCores,
96  uint16_t deviceUid);
97 };
98 
99 } // namespace profiling
100 
101 } // namespace armnn
bool IsCategoryRegistered(const std::string &categoryName) const
const Category * RegisterCategory(const std::string &categoryName) override
const Counter * RegisterCounter(const BackendId &backendId, const uint16_t uid, const std::string &parentCategoryName, uint16_t counterClass, uint16_t interpolation, double multiplier, const std::string &name, const std::string &description, const Optional< std::string > &units=EmptyOptional(), const Optional< uint16_t > &numberOfCores=EmptyOptional(), const Optional< uint16_t > &deviceUid=EmptyOptional(), const Optional< uint16_t > &counterSetUid=EmptyOptional()) override
const Counters & GetCounters() const override
CounterSets::const_iterator CounterSetsIt
std::unordered_map< uint16_t, CounterPtr > Counters
Categories::const_iterator CategoriesIt
const Device * GetDevice(uint16_t uid) const override
uint16_t GetCounterSetCount() const override
Devices::const_iterator DevicesIt
Copyright (c) 2020 ARM Limited.
bool IsDeviceRegistered(uint16_t deviceUid) const
std::unordered_map< uint16_t, CounterSetPtr > CounterSets
uint16_t GetDeviceCount() const override
const Devices & GetDevices() const override
uint16_t GetCategoryCount() const override
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:33
std::unordered_set< CategoryPtr > Categories
const Counter * GetCounter(uint16_t uid) const override
const Category * GetCategory(const std::string &name) const override
EmptyOptional is used to initialize the Optional class in case we want to have default value for an O...
Definition: Optional.hpp:32
const Device * RegisterDevice(const std::string &deviceName, uint16_t cores=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override
const Categories & GetCategories() const override
bool IsCounterRegistered(uint16_t counterUid) const
uint16_t GetCounterCount() const override
const CounterSet * RegisterCounterSet(const std::string &counterSetName, uint16_t count=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override
std::unordered_map< uint16_t, DevicePtr > Devices
const CounterSet * GetCounterSet(uint16_t uid) const override
Counters::const_iterator CountersIt
bool IsCounterSetRegistered(uint16_t counterSetUid) const
const CounterSets & GetCounterSets() const override