blob: 4492f854bfbf5ff2ce2adf1f5439ed0cae8ee4d5 [file] [log] [blame]
Matteo Martincigh6db5f202019-09-05 12:02:04 +01001//
2// Copyright © 2019 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
Keith Davise394bd92019-12-02 15:12:19 +00008#include <armnn/BackendId.hpp>
9
Matteo Martincigh6db5f202019-09-05 12:02:04 +010010#include <string>
11#include <vector>
12#include <memory>
13#include <unordered_set>
14#include <unordered_map>
15
Matteo Martincigh6db5f202019-09-05 12:02:04 +010016namespace armnn
17{
18
19namespace profiling
20{
21
22// Forward declarations
23class Category;
24class Device;
25class CounterSet;
26class Counter;
27
28// Profiling objects smart pointer types
29using CategoryPtr = std::unique_ptr<Category>;
30using DevicePtr = std::unique_ptr<Device>;
31using CounterSetPtr = std::unique_ptr<CounterSet>;
32using CounterPtr = std::shared_ptr<Counter>;
33
34// Profiling objects collection types
35using Categories = std::unordered_set<CategoryPtr>;
36using Devices = std::unordered_map<uint16_t, DevicePtr>;
37using CounterSets = std::unordered_map<uint16_t, CounterSetPtr>;
38using Counters = std::unordered_map<uint16_t, CounterPtr>;
39
40// Profiling objects collection iterator types
41using CategoriesIt = Categories::const_iterator;
42using DevicesIt = Devices::const_iterator;
43using CounterSetsIt = CounterSets::const_iterator;
44using CountersIt = Counters::const_iterator;
45
46class Category final
47{
48public:
49 // Constructors
Sadik Armagan4c998992020-02-25 12:44:44 +000050 Category(const std::string& name)
Matteo Martincigh6db5f202019-09-05 12:02:04 +010051 : m_Name(name)
Matteo Martincigh6db5f202019-09-05 12:02:04 +010052 {}
53
54 // Fields
55 std::string m_Name;
56
57 // Connections
58 std::vector<uint16_t> m_Counters; // The UIDs of the counters associated with this category
Matteo Martincigh6db5f202019-09-05 12:02:04 +010059};
60
61class Device final
62{
63public:
64 // Constructors
65 Device(uint16_t deviceUid, const std::string& name, uint16_t cores)
66 : m_Uid(deviceUid)
67 , m_Name(name)
68 , m_Cores(cores)
69 {}
70
71 // Fields
72 uint16_t m_Uid;
73 std::string m_Name;
74 uint16_t m_Cores;
75};
76
77class CounterSet final
78{
79public:
80 // Constructors
81 CounterSet(uint16_t counterSetUid, const std::string& name, uint16_t count)
82 : m_Uid(counterSetUid)
83 , m_Name(name)
84 , m_Count(count)
85 {}
86
87 // Fields
88 uint16_t m_Uid;
89 std::string m_Name;
90 uint16_t m_Count;
91};
92
93class Counter final
94{
95public:
96 // Constructors
Keith Davise394bd92019-12-02 15:12:19 +000097 Counter(BackendId backendId,
98 uint16_t counterUid,
Matteo Martincigh6db5f202019-09-05 12:02:04 +010099 uint16_t maxCounterUid,
100 uint16_t counterClass,
101 uint16_t interpolation,
102 double multiplier,
103 const std::string& name,
104 const std::string& description,
105 const std::string& units,
106 uint16_t deviceUid,
107 uint16_t counterSetUid)
Keith Davise394bd92019-12-02 15:12:19 +0000108 : m_BackendId(backendId)
109 , m_Uid(counterUid)
Matteo Martincigh6db5f202019-09-05 12:02:04 +0100110 , m_MaxCounterUid(maxCounterUid)
111 , m_Class(counterClass)
112 , m_Interpolation(interpolation)
113 , m_Multiplier(multiplier)
114 , m_Name(name)
115 , m_Description(description)
116 , m_Units(units)
117 , m_DeviceUid(deviceUid)
118 , m_CounterSetUid(counterSetUid)
119 {}
120
121 // Fields
Keith Davise394bd92019-12-02 15:12:19 +0000122 BackendId m_BackendId;
Matteo Martincigh6db5f202019-09-05 12:02:04 +0100123 uint16_t m_Uid;
124 uint16_t m_MaxCounterUid;
125 uint16_t m_Class;
126 uint16_t m_Interpolation;
127 double m_Multiplier;
128 std::string m_Name;
129 std::string m_Description;
130 std::string m_Units; // Optional, leave empty if the counter does not need units
131
132 // Connections
133 uint16_t m_DeviceUid; // Optional, set to zero if the counter is not associated with a device
134 uint16_t m_CounterSetUid; // Optional, set to zero if the counter is not associated with a counter set
135};
136
137class ICounterDirectory
138{
139public:
140 virtual ~ICounterDirectory() {}
141
142 // Getters for counts
143 virtual uint16_t GetCategoryCount() const = 0;
144 virtual uint16_t GetDeviceCount() const = 0;
145 virtual uint16_t GetCounterSetCount() const = 0;
146 virtual uint16_t GetCounterCount() const = 0;
147
148 // Getters for collections
149 virtual const Categories& GetCategories() const = 0;
150 virtual const Devices& GetDevices() const = 0;
151 virtual const CounterSets& GetCounterSets() const = 0;
152 virtual const Counters& GetCounters() const = 0;
153
154 // Getters for profiling objects
155 virtual const Category* GetCategory(const std::string& name) const = 0;
156 virtual const Device* GetDevice(uint16_t uid) const = 0;
157 virtual const CounterSet* GetCounterSet(uint16_t uid) const = 0;
158 virtual const Counter* GetCounter(uint16_t uid) const = 0;
159};
160
161} // namespace profiling
162
163} // namespace armnn