From 6db5f20ade72896ebf0f6513a4832b8f2e917aa0 Mon Sep 17 00:00:00 2001 From: Matteo Martincigh Date: Thu, 5 Sep 2019 12:02:04 +0100 Subject: 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 --- src/profiling/CounterDirectory.hpp | 155 +++++++++++++++++-------------------- 1 file changed, 69 insertions(+), 86 deletions(-) (limited to 'src/profiling/CounterDirectory.hpp') 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 -#include -#include - -namespace armnn -{ +#include "ICounterDirectory.hpp" -namespace profiling -{ +#include -class Category -{ -public: - std::string m_Name; -}; +#include +#include +#include -class Device -{ -public: - uint16_t m_Uid; - std::string m_Name; - uint16_t m_Cores; -}; +#include -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& deviceUid = EmptyOptional(), + const Optional& counterSetUid = EmptyOptional()); + const Device* RegisterDevice (const std::string& deviceName, + uint16_t cores = 0, + const Optional& parentCategoryName = EmptyOptional()); + const CounterSet* RegisterCounterSet(const std::string& counterSetName, + uint16_t count = 0, + const Optional& 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& units = EmptyOptional(), + const Optional& numberOfCores = EmptyOptional(), + const Optional& deviceUid = EmptyOptional(), + const Optional& counterSetUid = EmptyOptional()); + + // Getters for counts + uint16_t GetCategoryCount() const override { return boost::numeric_cast(m_Categories.size()); } + uint16_t GetDeviceCount() const override { return boost::numeric_cast(m_Devices.size()); } + uint16_t GetCounterSetCount() const override { return boost::numeric_cast(m_CounterSets.size()); } + uint16_t GetCounterCount() const override { return boost::numeric_cast(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> m_DeviceIds; - std::vector> m_CounterIds; - std::vector> m_CategoryIds; - - std::vector> m_DeviceObjects; - std::vector> m_CounterObjects; - std::vector> 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& numberOfCores, + uint16_t deviceUid, + const CategoryPtr& parentCategory); }; } // namespace profiling -- cgit v1.2.1