aboutsummaryrefslogtreecommitdiff
path: root/src/profiling/CounterDirectory.hpp
blob: ec1ac273bce6c86646ff306f578b3bc2390f4021 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#pragma once

#include <atomic>
#include <string>
#include <vector>

namespace armnn
{

namespace profiling
{

class Category
{
public:
    std::string m_Name;
};

class Device
{
public:
    uint16_t    m_Uid;
    std::string m_Name;
    uint16_t    m_Cores;
};

class Counter
{
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
{
public:
    uint16_t    m_Uid;
    std::string m_Name;
    uint16_t    m_Count;
};

class CounterDirectory final
{
public:
    CounterDirectory(uint16_t uid,
                     const std::string& name,
                     uint16_t deviceCount,
                     uint16_t counterCount,
                     uint16_t categoryCount);

    ~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);

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;
};

} // namespace profiling

} // namespace armnn