aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/CounterDirectory.hpp
blob: a756a9a7bd08d0177fcf86e9dced96938f6e2833 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#pragma once

#include "ICounterDirectory.hpp"

#include <armnn/Optional.hpp>

#include <string>
#include <unordered_set>
#include <unordered_map>

#include <boost/numeric/conversion/cast.hpp>

namespace armnn
{

namespace profiling
{

class CounterDirectory final : public ICounterDirectory
{
public:
    CounterDirectory() = default;
    ~CounterDirectory() = default;

    // 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:
    // 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

} // namespace armnn