2 #include "libbenchmark_misc_internal.h"
8 /****************************************************************************/
9 void libbenchmark_misc_pal_helper_new_topology_node( struct libbenchmark_topology_node_state **tns,
10 struct libshared_memory_state *ms )
12 LFDS710_PAL_ASSERT( tns != NULL );
13 LFDS710_PAL_ASSERT( ms != NULL );
15 *tns = libshared_memory_alloc_from_unknown_node( ms, sizeof(struct libbenchmark_topology_node_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
17 libbenchmark_topology_node_init( *tns );
26 /****************************************************************************/
27 void libbenchmark_misc_pal_helper_add_logical_processor_to_topology_node( struct libbenchmark_topology_node_state *tns,
28 struct libshared_memory_state *ms,
29 lfds710_pal_uint_t logical_processor_number,
30 enum flag windows_processor_group_inuse_flag,
31 lfds710_pal_uint_t windows_processor_group_number )
33 struct libbenchmark_topology_node_state
36 LFDS710_PAL_ASSERT( tns != NULL );
37 LFDS710_PAL_ASSERT( ms != NULL );
38 // TRD : logical_processor_number can be any value in its range
39 // TRD : windows_processor_group_inuse_flag can be any value in its range
40 // TRD : windows_processor_group_number can be any value in its range
42 libbenchmark_misc_pal_helper_new_topology_node( &tns_temp, ms );
44 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns_temp, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_LOGICAL_PROCESSOR );
45 LIBBENCHMARK_TOPOLOGY_NODE_SET_LOGICAL_PROCESSOR_NUMBER( *tns_temp, logical_processor_number );
47 if( windows_processor_group_inuse_flag == RAISED )
48 LIBBENCHMARK_TOPOLOGY_NODE_SET_WINDOWS_GROUP_NUMBER( *tns_temp, windows_processor_group_number );
50 LIBBENCHMARK_TOPOLOGY_NODE_UNSET_WINDOWS_GROUP_NUMBER( *tns_temp );
52 LFDS710_LIST_ASO_SET_KEY_IN_ELEMENT( tns_temp->lasoe, tns_temp );
53 LFDS710_LIST_ASO_SET_VALUE_IN_ELEMENT( tns_temp->lasoe, tns_temp );
54 lfds710_list_aso_insert( &tns->logical_processor_children, &tns_temp->lasoe, NULL );
63 /****************************************************************************/
64 void libbenchmark_misc_pal_helper_add_system_node_to_topology_tree( struct libbenchmark_topology_state *ts,
65 struct libbenchmark_topology_node_state *tns )
67 LFDS710_PAL_ASSERT( ts != NULL );
68 LFDS710_PAL_ASSERT( tns != NULL );
70 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_SYSTEM );
72 libbenchmark_topology_insert( ts, tns );
81 /****************************************************************************/
82 void libbenchmark_misc_pal_helper_add_numa_node_to_topology_tree( struct libbenchmark_topology_state *ts,
83 struct libbenchmark_topology_node_state *tns,
84 lfds710_pal_uint_t numa_node_id )
86 LFDS710_PAL_ASSERT( ts != NULL );
87 LFDS710_PAL_ASSERT( tns != NULL );
88 // TRD : numa_node_id can be NULL
90 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_NUMA );
91 LIBBENCHMARK_TOPOLOGY_NODE_SET_NUMA_ID( *tns, numa_node_id );
93 libbenchmark_topology_insert( ts, tns );
102 /****************************************************************************/
103 void libbenchmark_misc_pal_helper_add_socket_node_to_topology_tree( struct libbenchmark_topology_state *ts,
104 struct libbenchmark_topology_node_state *tns )
106 LFDS710_PAL_ASSERT( ts != NULL );
107 LFDS710_PAL_ASSERT( tns != NULL );
109 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_SOCKET );
111 libbenchmark_topology_insert( ts, tns );
120 /****************************************************************************/
121 void libbenchmark_misc_pal_helper_add_physical_processor_node_to_topology_tree( struct libbenchmark_topology_state *ts,
122 struct libbenchmark_topology_node_state *tns )
124 LFDS710_PAL_ASSERT( ts != NULL );
125 LFDS710_PAL_ASSERT( tns != NULL );
127 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_PHYSICAL_PROCESSOR );
129 libbenchmark_topology_insert( ts, tns );
138 /****************************************************************************/
139 void libbenchmark_misc_pal_helper_add_cache_node_to_topology_tree( struct libbenchmark_topology_state *ts,
140 struct libbenchmark_topology_node_state *tns,
141 lfds710_pal_uint_t level,
142 enum libbenchmark_topology_node_cache_type type )
144 LFDS710_PAL_ASSERT( ts != NULL );
145 LFDS710_PAL_ASSERT( tns != NULL );
146 // TRD : level can be any value in its range
147 // TRD : type can be any value in its range
149 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_CACHE );
150 LIBBENCHMARK_TOPOLOGY_NODE_SET_CACHE_LEVEL( *tns, level );
151 LIBBENCHMARK_TOPOLOGY_NODE_SET_CACHE_TYPE( *tns, type );
153 libbenchmark_topology_insert( ts, tns );
162 /****************************************************************************/
163 void libbenchmark_misc_pal_helper_add_logical_processor_node_to_topology_tree( struct libbenchmark_topology_state *ts,
164 struct libshared_memory_state *ms,
165 lfds710_pal_uint_t logical_processor_number,
166 enum flag windows_processor_group_inuse_flag,
167 lfds710_pal_uint_t windows_processor_group_number )
169 struct libbenchmark_topology_node_state
172 LFDS710_PAL_ASSERT( ts != NULL );
173 LFDS710_PAL_ASSERT( ms != NULL );
174 // TRD : logical_processor_number can be any value in its range
175 // TRD : windows_processor_group_inuse_flag can be any value in its range
176 // TRD : windows_processor_group_number can be any value in its range
178 libbenchmark_misc_pal_helper_new_topology_node( &tns, ms );
180 LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_LOGICAL_PROCESSOR );
181 LIBBENCHMARK_TOPOLOGY_NODE_SET_LOGICAL_PROCESSOR_NUMBER( *tns, logical_processor_number );
183 if( windows_processor_group_inuse_flag == RAISED )
184 LIBBENCHMARK_TOPOLOGY_NODE_SET_WINDOWS_GROUP_NUMBER( *tns, windows_processor_group_number );
186 LIBBENCHMARK_TOPOLOGY_NODE_UNSET_WINDOWS_GROUP_NUMBER( *tns );
188 libbenchmark_topology_insert( ts, tns );