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)
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)
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)
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)
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)
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
23 enum libbenchmark_topology_node_type
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
33 enum libbenchmark_topology_node_cache_type
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
41 enum libbenchmark_topology_logical_processor_set_encoding
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
49 struct libbenchmark_topology_node_cache
51 enum libbenchmark_topology_node_cache_type
58 struct libbenchmark_topology_node_logical_processor
61 windows_group_number_set_flag;
68 struct libbenchmark_topology_node_numa
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
77 struct libbenchmark_topology_node_cache
80 struct libbenchmark_topology_node_logical_processor
83 struct libbenchmark_topology_node_numa
87 struct libbenchmark_topology_node_state
89 enum libbenchmark_topology_node_type
92 struct lfds710_btree_au_element
95 struct lfds710_list_aso_element
98 struct lfds710_list_aso_state
99 logical_processor_children;
101 union libbenchmark_topology_node_extended_info
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) );
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 );
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