]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/test_and_benchmark/libbenchmark/src/libbenchmark_misc/libbenchmark_misc_pal_helpers.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / test_and_benchmark / libbenchmark / src / libbenchmark_misc / libbenchmark_misc_pal_helpers.c
1 /***** includes *****/
2 #include "libbenchmark_misc_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 void libbenchmark_misc_pal_helper_new_topology_node( struct libbenchmark_topology_node_state **tns,
10                                                      struct libshared_memory_state *ms )
11 {
12   LFDS710_PAL_ASSERT( tns != NULL );
13   LFDS710_PAL_ASSERT( ms != NULL );
14
15   *tns = libshared_memory_alloc_from_unknown_node( ms, sizeof(struct libbenchmark_topology_node_state), LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES );
16
17   libbenchmark_topology_node_init( *tns );
18
19   return;
20 }
21
22
23
24
25
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 )
32 {
33   struct libbenchmark_topology_node_state
34     *tns_temp;
35
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
41
42   libbenchmark_misc_pal_helper_new_topology_node( &tns_temp, ms );
43
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 );
46
47   if( windows_processor_group_inuse_flag == RAISED )
48    LIBBENCHMARK_TOPOLOGY_NODE_SET_WINDOWS_GROUP_NUMBER( *tns_temp, windows_processor_group_number );
49   else
50     LIBBENCHMARK_TOPOLOGY_NODE_UNSET_WINDOWS_GROUP_NUMBER( *tns_temp );
51
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 );
55
56   return;
57 }
58
59
60
61
62
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 )
66 {
67   LFDS710_PAL_ASSERT( ts != NULL );
68   LFDS710_PAL_ASSERT( tns != NULL );
69
70   LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_SYSTEM );
71
72   libbenchmark_topology_insert( ts, tns );
73
74   return;
75 }
76
77
78
79
80
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 )
85 {
86   LFDS710_PAL_ASSERT( ts != NULL );
87   LFDS710_PAL_ASSERT( tns != NULL );
88   // TRD : numa_node_id can be NULL
89
90   LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_NUMA );
91   LIBBENCHMARK_TOPOLOGY_NODE_SET_NUMA_ID( *tns, numa_node_id );
92
93   libbenchmark_topology_insert( ts, tns );
94
95   return;
96 }
97
98
99
100
101
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 )
105 {
106   LFDS710_PAL_ASSERT( ts != NULL );
107   LFDS710_PAL_ASSERT( tns != NULL );
108
109   LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_SOCKET );
110
111   libbenchmark_topology_insert( ts, tns );
112
113   return;
114 }
115
116
117
118
119
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 )
123 {
124   LFDS710_PAL_ASSERT( ts != NULL );
125   LFDS710_PAL_ASSERT( tns != NULL );
126
127   LIBBENCHMARK_TOPOLOGY_NODE_SET_TYPE( *tns, LIBBENCHMARK_TOPOLOGY_NODE_TYPE_PHYSICAL_PROCESSOR );
128
129   libbenchmark_topology_insert( ts, tns );
130
131   return;
132 }
133
134
135
136
137
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 )
143 {
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
148
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 );
152
153   libbenchmark_topology_insert( ts, tns );
154
155   return;
156 }
157
158
159
160
161
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 )
168 {
169   struct libbenchmark_topology_node_state
170     *tns;
171
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
177
178   libbenchmark_misc_pal_helper_new_topology_node( &tns, ms );
179
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 );
182
183   if( windows_processor_group_inuse_flag == RAISED )
184    LIBBENCHMARK_TOPOLOGY_NODE_SET_WINDOWS_GROUP_NUMBER( *tns, windows_processor_group_number );
185   else
186     LIBBENCHMARK_TOPOLOGY_NODE_UNSET_WINDOWS_GROUP_NUMBER( *tns );
187
188   libbenchmark_topology_insert( ts, tns );
189
190   return;
191 }
192