diff options
author | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-09-05 12:02:04 +0100 |
---|---|---|
committer | Jim Flynn Arm <jim.flynn@arm.com> | 2019-09-17 15:48:37 +0000 |
commit | 6db5f20ade72896ebf0f6513a4832b8f2e917aa0 (patch) | |
tree | 654e0502a35d6fa11c51be31edf60a6106a15a54 /src/profiling/CounterDirectory.hpp | |
parent | 10e0786f15bdb60e1d632c9a368fce2737852ae4 (diff) | |
download | armnn-6db5f20ade72896ebf0f6513a4832b8f2e917aa0.tar.gz |
IVGCVSW-3691 Rework the CounterDirectory class to take into consideration
the connections between components
* Added constructors and connections to the profiling classes
* Used hash table to keep track of the profiling objects by UID
* Added register methods
* Added find/check helper methods
* Updated the makefile to include the profiling directory
* Added unit tests for the CounterDirectory class
* Added ICounterDirectory interface class for read-only use
* Added custom macro to locally disable conversion warnings
Change-Id: I3f53a68663ee77b8d03ac0ef7dc01e90c6893511
Signed-off-by: Matteo Martincigh <matteo.martincigh@arm.com>
Diffstat (limited to 'src/profiling/CounterDirectory.hpp')
-rw-r--r-- | src/profiling/CounterDirectory.hpp | 155 |
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 |