]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/test_and_benchmark/libbenchmark/inc/libbenchmark/libbenchmark_topology_node.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / test_and_benchmark / libbenchmark / inc / libbenchmark / libbenchmark_topology_node.h
1 /***** defines *****/
2 #define LIBBENCHMARK_TOPOLOGY_NODE_GET_TYPE( tns, node_type )           (tns).type
3 #define LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( tns, node_type )           (tns).type = (node_type)
4
5 #define LIBBENCHMARK_TOPOLOGY_NODE_GET_CACHE_TYPE( tns, cache_type )    (tns).extended_node_info.cache.type
6 #define LIBBENCHMARK_TOPOLOGY_NODE_SET_CACHE_TYPE( tns, cache_type )    (tns).extended_node_info.cache.type = (cache_type)
7
8 #define LIBBENCHMARK_TOPOLOGY_NODE_GET_CACHE_LEVEL( tns, cache_level )  (tns).extended_node_info.cache.level
9 #define LIBBENCHMARK_TOPOLOGY_NODE_SET_CACHE_LEVEL( tns, cache_level )  (tns).extended_node_info.cache.level = (cache_level)
10
11 #define LIBBENCHMARK_TOPOLOGY_NODE_GET_NUMA_ID( tns )                   (tns).extended_node_info.numa.id
12 #define LIBBENCHMARK_TOPOLOGY_NODE_SET_NUMA_ID( tns, numa_node_id )     (tns).extended_node_info.numa.id = (numa_node_id)
13
14 #define LIBBENCHMARK_TOPOLOGY_NODE_GET_LOGICAL_PROCESSOR_NUMBER( tns )                    (tns).extended_node_info.logical_processor.number
15 #define LIBBENCHMARK_TOPOLOGY_NODE_SET_LOGICAL_PROCESSOR_NUMBER( tns, processor_number )  (tns).extended_node_info.logical_processor.number = (processor_number)
16
17 #define LIBBENCHMARK_TOPOLOGY_NODE_GET_WINDOWS_GROUP_NUMBER( tns )                    (tns).extended_node_info.logical_processor.windows_group_number
18 #define LIBBENCHMARK_TOPOLOGY_NODE_SET_WINDOWS_GROUP_NUMBER( tns, win_group_number )  (tns).extended_node_info.logical_processor.windows_group_number = (win_group_number), (tns).extended_node_info.logical_processor.windows_group_number_set_flag = RAISED
19 #define LIBBENCHMARK_TOPOLOGY_NODE_UNSET_WINDOWS_GROUP_NUMBER( tns )                  LIBBENCHMARK_TOPOLOGY_NODE_SET_WINDOWS_GROUP_NUMBER( tns, 0 ), (tns).extended_node_info.logical_processor.windows_group_number_set_flag = LOWERED
20 #define LIBBENCHMARK_TOPOLOGY_NODE_IS_WINDOWS_GROUP_NUMBER( tns )                     (tns).extended_node_info.logical_processor.windows_group_number_set_flag
21
22 /***** enums *****/
23 enum libbenchmark_topology_node_type
24 {
25   LIBBENCHMARK_TOPOLOGY_NODE_TYPE_LOGICAL_PROCESSOR,
26   LIBBENCHMARK_TOPOLOGY_NODE_TYPE_CACHE,
27   LIBBENCHMARK_TOPOLOGY_NODE_TYPE_PHYSICAL_PROCESSOR,
28   LIBBENCHMARK_TOPOLOGY_NODE_TYPE_SOCKET,
29   LIBBENCHMARK_TOPOLOGY_NODE_TYPE_NUMA,
30   LIBBENCHMARK_TOPOLOGY_NODE_TYPE_SYSTEM
31 };
32
33 enum libbenchmark_topology_node_cache_type
34 {
35   LIBBENCHMARK_TOPOLOGY_NODE_CACHE_TYPE_DATA,
36   LIBBENCHMARK_TOPOLOGY_NODE_CACHE_TYPE_INSTRUCTION,
37   LIBBENCHMARK_TOPOLOGY_NODE_CACHE_TYPE_UNIFIED,
38   LIBBENCHMARK_TOPOLOGY_NODE_CACHE_TYPE_COUNT
39 };
40
41 enum libbenchmark_topology_logical_processor_set_encoding
42 {
43   LIBBENCHMARK_TOPOLOGY_LOGICAL_PROCESSOR_SET_ENCODING_BITMASK,
44   LIBBENCHMARK_TOPOLOGY_LOGICAL_PROCESSOR_SET_ENCODING_PATH_TO_CSV_HEX,
45   LIBBENCHMARK_TOPOLOGY_LOGICAL_PROCESSOR_SET_ENCODING_SINGLE_LOGICAL_PROCESSOR
46 };
47
48 /***** structs *****/
49 struct libbenchmark_topology_node_cache
50 {
51   enum libbenchmark_topology_node_cache_type
52     type;
53
54   lfds710_pal_uint_t
55     level;
56 };
57
58 struct libbenchmark_topology_node_logical_processor
59 {
60   enum flag
61     windows_group_number_set_flag;
62
63   lfds710_pal_uint_t
64     number,
65     windows_group_number;
66 };
67
68 struct libbenchmark_topology_node_numa
69 {
70   lfds710_pal_uint_t
71     id;
72 };
73
74 // TRD : most node types just *are* (a socket is a socket, etc), but caches, NUMA nodes and LPs have some extra info
75 union libbenchmark_topology_node_extended_info
76 {
77   struct libbenchmark_topology_node_cache
78     cache;
79
80   struct libbenchmark_topology_node_logical_processor
81     logical_processor;
82
83   struct libbenchmark_topology_node_numa
84     numa;
85 };
86
87 struct libbenchmark_topology_node_state
88 {
89   enum libbenchmark_topology_node_type
90     type;
91
92   struct lfds710_btree_au_element
93     baue;
94
95   struct lfds710_list_aso_element
96     lasoe;
97
98   struct lfds710_list_aso_state
99     logical_processor_children;
100
101   union libbenchmark_topology_node_extended_info
102     extended_node_info;
103 };
104
105 /***** public prototypes *****/
106 void libbenchmark_topology_node_init( struct libbenchmark_topology_node_state *tns );
107 void libbenchmark_topology_node_cleanup( struct libbenchmark_topology_node_state *tns, void (*element_cleanup_callback)(struct lfds710_list_aso_state *lasos, struct lfds710_list_aso_element *lasoe) );
108
109 int libbenchmark_topology_node_compare_nodes_function( void const *new_key, void const *existing_key );
110 int libbenchmark_topology_node_compare_node_types_function( void const *new_key, void const *existing_key );
111
112 int libbenchmark_topology_node_compare_lpsets_function( struct lfds710_list_aso_state *lpset_one, struct lfds710_list_aso_state *lpset_two );
113   // TRD : only used in results compare function, where we comapre two lists of nodes which are logical prceossors
114