aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/CounterDirectory.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/profiling/CounterDirectory.hpp')
-rw-r--r--src/profiling/CounterDirectory.hpp155
1 files changed, 69 insertions, 86 deletions
diff --git a/src/profiling/CounterDirectory.hpp b/src/profiling/CounterDirectory.hpp
index ec1ac273bc..a756a9a7bd 100644
--- a/src/profiling/CounterDirectory.hpp
+++ b/src/profiling/CounterDirectory.hpp
@@ -5,106 +5,89 @@
#pragma once
-#include <atomic>
-#include <string>
-#include <vector>
-
-namespace armnn
-{
+#include "ICounterDirectory.hpp"
-namespace profiling
-{
+#include <armnn/Optional.hpp>
-class Category
-{
-public:
- std::string m_Name;
-};
+#include <string>
+#include <unordered_set>
+#include <unordered_map>
-class Device
-{
-public:
- uint16_t m_Uid;
- std::string m_Name;
- uint16_t m_Cores;
-};
+#include <boost/numeric/conversion/cast.hpp>
-class Counter
+namespace armnn
{
-public:
- uint16_t m_Uid;
- uint16_t m_MaxCounterUid;
- uint16_t m_Class;
- uint16_t m_Interpolation;
- float m_Multiplier;
- std::string m_Name;
- std::string m_Description;
- std::string m_Units;
-};
-class CounterSet
+namespace profiling
{
-public:
- uint16_t m_Uid;
- std::string m_Name;
- uint16_t m_Count;
-};
-class CounterDirectory final
+class CounterDirectory final : public ICounterDirectory
{
public:
- CounterDirectory(uint16_t uid,
- const std::string& name,
- uint16_t deviceCount,
- uint16_t counterCount,
- uint16_t categoryCount);
-
+ CounterDirectory() = default;
~CounterDirectory() = default;
- uint16_t GetUid() const;
- const std::string& GetName() const;
-
- uint16_t GetDeviceCount() const;
- uint16_t GetCounterCount() const;
- uint16_t GetCategoryCount() const;
-
- void GetDeviceValue(uint16_t index, uint32_t& value) const;
- void SetDeviceValue(uint16_t index, uint32_t value);
-
- void GetDeviceObject(uint16_t index, Device* counter) const;
- void SetDeviceObject(uint16_t index, Device* counter);
-
- void GetCounterValue(uint16_t index, uint32_t& value) const;
- void SetCounterValue(uint16_t index, uint32_t value);
-
- void GetCounterObject(uint16_t index, Counter* counter) const;
- void SetCounterObject(uint16_t index, Counter* counter);
-
- void GetCategoryValue(uint16_t index, uint32_t& value) const;
- void SetCategoryValue(uint16_t index, uint32_t value);
-
- void GetCategoryObject(uint16_t index, Category* counter) const;
- void SetCategoryObject(uint16_t index, Category* counter);
+ // Register profiling objects
+ const Category* RegisterCategory (const std::string& categoryName,
+ const Optional<uint16_t>& deviceUid = EmptyOptional(),
+ const Optional<uint16_t>& counterSetUid = EmptyOptional());
+ const Device* RegisterDevice (const std::string& deviceName,
+ uint16_t cores = 0,
+ const Optional<std::string>& parentCategoryName = EmptyOptional());
+ const CounterSet* RegisterCounterSet(const std::string& counterSetName,
+ uint16_t count = 0,
+ const Optional<std::string>& parentCategoryName = EmptyOptional());
+ const Counter* RegisterCounter (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());
+
+ // Getters for counts
+ uint16_t GetCategoryCount() const override { return boost::numeric_cast<uint16_t>(m_Categories.size()); }
+ uint16_t GetDeviceCount() const override { return boost::numeric_cast<uint16_t>(m_Devices.size()); }
+ uint16_t GetCounterSetCount() const override { return boost::numeric_cast<uint16_t>(m_CounterSets.size()); }
+ uint16_t GetCounterCount() const override { return boost::numeric_cast<uint16_t>(m_Counters.size()); }
+
+ // Getters for collections
+ const Categories& GetCategories() const override { return m_Categories; }
+ const Devices& GetDevices() const override { return m_Devices; }
+ const CounterSets& GetCounterSets() const override { return m_CounterSets; }
+ const Counters& GetCounters() const override { return m_Counters; }
+
+ // Getters for profiling objects
+ const Category* GetCategory(const std::string& name) const override;
+ const Device* GetDevice(uint16_t uid) const override;
+ const CounterSet* GetCounterSet(uint16_t uid) const override;
+ const Counter* GetCounter(uint16_t uid) const override;
private:
- uint16_t m_Uid;
- std::string m_Name;
-
- uint16_t m_DeviceCount;
- uint16_t m_CounterCount;
- uint16_t m_CategoryCount;
-
- std::vector<std::atomic<uint32_t>> m_DeviceIds;
- std::vector<std::atomic<uint32_t>> m_CounterIds;
- std::vector<std::atomic<uint32_t>> m_CategoryIds;
-
- std::vector<std::atomic<Device*>> m_DeviceObjects;
- std::vector<std::atomic<Counter*>> m_CounterObjects;
- std::vector<std::atomic<Category*>> m_CategoryObjects;
-
- void CheckDeviceIndex(uint16_t index) const;
- void CheckCounterIndex(uint16_t index) const;
- void CheckCategoryIndex(uint16_t index) const;
+ // The profiling collections owned by the counter directory
+ Categories m_Categories;
+ Devices m_Devices;
+ CounterSets m_CounterSets;
+ Counters m_Counters;
+
+ // Helper functions
+ CategoriesIt FindCategory(const std::string& categoryName) const;
+ DevicesIt FindDevice(uint16_t deviceUid) const;
+ DevicesIt FindDevice(const std::string& deviceName) const;
+ CounterSetsIt FindCounterSet(uint16_t counterSetUid) const;
+ CounterSetsIt FindCounterSet(const std::string& counterSetName) const;
+ CountersIt FindCounter(uint16_t counterUid) const;
+ bool CheckIfCategoryIsRegistered(const std::string& categoryName) const;
+ bool CheckIfDeviceIsRegistered(uint16_t deviceUid) const;
+ bool CheckIfDeviceIsRegistered(const std::string& deviceName) const;
+ bool CheckIfCounterSetIsRegistered(uint16_t counterSetUid) const;
+ bool CheckIfCounterSetIsRegistered(const std::string& counterSetName) const;
+ uint16_t GetNumberOfCores(const Optional<uint16_t>& numberOfCores,
+ uint16_t deviceUid,
+ const CategoryPtr& parentCategory);
};
} // namespace profiling