ArmNN  NotReleased
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,
31  const Optional<uint16_t>& deviceUid = EmptyOptional(),
32  const Optional<uint16_t>& counterSetUid = EmptyOptional()) override;
33  const Device* RegisterDevice (const std::string& deviceName,
34  uint16_t cores = 0,
35  const Optional<std::string>& parentCategoryName = EmptyOptional()) override;
36  const CounterSet* RegisterCounterSet(const std::string& counterSetName,
37  uint16_t count = 0,
38  const Optional<std::string>& parentCategoryName = EmptyOptional()) override;
39  const Counter* RegisterCounter(const BackendId& backendId,
40  const uint16_t uid,
41  const std::string& parentCategoryName,
42  uint16_t counterClass,
43  uint16_t interpolation,
44  double multiplier,
45  const std::string& name,
46  const std::string& description,
47  const Optional<std::string>& units = EmptyOptional(),
48  const Optional<uint16_t>& numberOfCores = EmptyOptional(),
49  const Optional<uint16_t>& deviceUid = EmptyOptional(),
50  const Optional<uint16_t>& counterSetUid = EmptyOptional()) override;
51 
52  // Getters for counts
53  uint16_t GetCategoryCount() const override { return boost::numeric_cast<uint16_t>(m_Categories.size()); }
54  uint16_t GetDeviceCount() const override { return boost::numeric_cast<uint16_t>(m_Devices.size()); }
55  uint16_t GetCounterSetCount() const override { return boost::numeric_cast<uint16_t>(m_CounterSets.size()); }
56  uint16_t GetCounterCount() const override { return boost::numeric_cast<uint16_t>(m_Counters.size()); }
57 
58  // Getters for collections
59  const Categories& GetCategories() const override { return m_Categories; }
60  const Devices& GetDevices() const override { return m_Devices; }
61  const CounterSets& GetCounterSets() const override { return m_CounterSets; }
62  const Counters& GetCounters() const override { return m_Counters; }
63 
64  // Getters for profiling objects
65  const Category* GetCategory(const std::string& name) const override;
66  const Device* GetDevice(uint16_t uid) const override;
67  const CounterSet* GetCounterSet(uint16_t uid) const override;
68  const Counter* GetCounter(uint16_t uid) const override;
69 
70  // Queries for profiling objects
71  bool IsCategoryRegistered(const std::string& categoryName) const;
72  bool IsDeviceRegistered(uint16_t deviceUid) const;
73  bool IsDeviceRegistered(const std::string& deviceName) const;
74  bool IsCounterSetRegistered(uint16_t counterSetUid) const;
75  bool IsCounterSetRegistered(const std::string& counterSetName) const;
76  bool IsCounterRegistered(uint16_t counterUid) const;
77  bool IsCounterRegistered(const std::string& counterName) const;
78 
79  // Clears all the counter directory contents
80  void Clear();
81 
82 private:
83  // The profiling collections owned by the counter directory
84  Categories m_Categories;
85  Devices m_Devices;
86  CounterSets m_CounterSets;
87  Counters m_Counters;
88 
89  // Helper functions
90  CategoriesIt FindCategory(const std::string& categoryName) const;
91  DevicesIt FindDevice(uint16_t deviceUid) const;
92  DevicesIt FindDevice(const std::string& deviceName) const;
93  CounterSetsIt FindCounterSet(uint16_t counterSetUid) const;
94  CounterSetsIt FindCounterSet(const std::string& counterSetName) const;
95  CountersIt FindCounter(uint16_t counterUid) const;
96  CountersIt FindCounter(const std::string& counterName) const;
97  uint16_t GetNumberOfCores(const Optional<uint16_t>& numberOfCores,
98  uint16_t deviceUid,
99  const CategoryPtr& parentCategory);
100 };
101 
102 } // namespace profiling
103 
104 } // namespace armnn
std::unordered_set< CategoryPtr > Categories
Counters::const_iterator CountersIt
std::unordered_map< uint16_t, DevicePtr > Devices
const CounterSet * GetCounterSet(uint16_t uid) const override
const Device * GetDevice(uint16_t uid) const override
const Category * RegisterCategory(const std::string &categoryName, const Optional< uint16_t > &deviceUid=EmptyOptional(), const Optional< uint16_t > &counterSetUid=EmptyOptional()) override
std::unordered_map< uint16_t, CounterSetPtr > CounterSets
bool IsCategoryRegistered(const std::string &categoryName) const
const Device * RegisterDevice(const std::string &deviceName, uint16_t cores=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override
bool IsCounterSetRegistered(uint16_t counterSetUid) const
const Counter * GetCounter(uint16_t uid) const 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 Devices & GetDevices() const override
bool IsDeviceRegistered(uint16_t deviceUid) const
CounterSets::const_iterator CounterSetsIt
uint16_t GetCounterCount() const override
uint16_t GetCategoryCount() const override
const CounterSets & GetCounterSets() const override
std::unique_ptr< Category > CategoryPtr
Devices::const_iterator DevicesIt
uint16_t GetCounterSetCount() const override
Categories::const_iterator CategoriesIt
const Categories & GetCategories() const override
std::unordered_map< uint16_t, CounterPtr > Counters
uint16_t GetDeviceCount() const override
const Category * GetCategory(const std::string &name) const override
const CounterSet * RegisterCounterSet(const std::string &counterSetName, uint16_t count=0, const Optional< std::string > &parentCategoryName=EmptyOptional()) override
bool IsCounterRegistered(uint16_t counterUid) const
const Counters & GetCounters() const override