GCC Code Coverage Report


Directory: src/
File: src/support/types.h
Date: 2026-09-15 07:37:49
Exec Total Coverage
Lines: 5 5 100.0%
Functions: 5 5 100.0%
Branches: 0 0 -%

Line Branch Exec Source
1 /*********************************************************************************/
2 /* Copyright 2009-2026 Barcelona Supercomputing Center */
3 /* */
4 /* This file is part of the DLB library. */
5 /* */
6 /* DLB is free software: you can redistribute it and/or modify */
7 /* it under the terms of the GNU Lesser General Public License as published by */
8 /* the Free Software Foundation, either version 3 of the License, or */
9 /* (at your option) any later version. */
10 /* */
11 /* DLB is distributed in the hope that it will be useful, */
12 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
13 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
14 /* GNU Lesser General Public License for more details. */
15 /* */
16 /* You should have received a copy of the GNU Lesser General Public License */
17 /* along with DLB. If not, see <https://www.gnu.org/licenses/>. */
18 /*********************************************************************************/
19
20 #ifndef TYPES_H
21 #define TYPES_H
22
23 #ifdef HAVE_CONFIG_H
24 #include <config.h>
25 #endif
26
27 #include <inttypes.h>
28 #include <stdbool.h>
29 #include <stdint.h>
30
31 #if NCPUS_AT_CONFIGURE_TIME <= 255
32 typedef uint8_t cpuid_t;
33 enum { DLB_CPUID_INVALID = UINT8_MAX };
34 #define PRICPUID PRIu8
35 #else
36 typedef uint16_t cpuid_t;
37 enum { DLB_CPUID_INVALID = UINT16_MAX };
38 #define PRICPUID PRIu16
39 #endif
40
41 typedef enum VerboseOptions {
42 VB_CLEAR = 0,
43 VB_API = 1 << 0,
44 VB_MICROLB = 1 << 1,
45 VB_SHMEM = 1 << 2,
46 VB_MPI_API = 1 << 3,
47 VB_MPI_INT = 1 << 4,
48 VB_STATS = 1 << 5,
49 VB_DROM = 1 << 6,
50 VB_ASYNC = 1 << 7,
51 VB_OMPT = 1 << 8,
52 VB_AFFINITY = 1 << 9,
53 VB_BARRIER = 1 << 10,
54 VB_TALP = 1 << 11,
55 VB_INSTR = 1 << 12,
56 VB_MNGO = 1 << 13,
57 VB_ALL = 0x0FFFF,
58 VB_UNDEF = 0xF0000,
59 } verbose_opts_t;
60
61 typedef enum VerboseFormat {
62 VBF_CLEAR = 0,
63 VBF_NODE = 1 << 0,
64 VBF_MPINODE = 1 << 1,
65 VBF_MPIRANK = 1 << 2,
66 VBF_SPID = 1 << 3,
67 VBF_THREAD = 1 << 4,
68 VBF_TSTAMP = 1 << 5
69 } verbose_fmt_t;
70
71 typedef enum InstrumentItems {
72 INST_NONE = 0,
73 INST_ALL = 0xFFFF,
74 INST_MPI = 1 << 0,
75 INST_LEWI = 1 << 1,
76 INST_DROM = 1 << 2,
77 INST_TALP = 1 << 3,
78 INST_BARR = 1 << 4,
79 INST_OMPT = 1 << 5,
80 INST_CPUS = 1 << 6,
81 INST_CBCK = 1 << 7,
82 INST_MNGO = 1 << 8
83 } instrument_items_t;
84
85 typedef enum DebugOptions {
86 DBG_CLEAR = 0,
87 DBG_WALL = 1 << 0,
88 DBG_WERROR = 1 << 1,
89 DBG_WARNMPI = 1 << 2,
90 DBG_RETURNSTOLEN = 1 << 3,
91 DBG_LPOSTMORTEM = 1 << 4,
92 } debug_opts_t;
93
94 typedef enum LewiAffinity {
95 LEWI_AFFINITY_AUTO,
96 LEWI_AFFINITY_NONE,
97 LEWI_AFFINITY_MASK,
98 LEWI_AFFINITY_NEARBY_FIRST,
99 LEWI_AFFINITY_NEARBY_ONLY,
100 LEWI_AFFINITY_SPREAD_IFEMPTY,
101 } lewi_affinity_t;
102
103 typedef enum TalpSummaryType {
104 SUMMARY_NONE = 0,
105 SUMMARY_ALL = 0xFFF9, // SUMMARY_POP_RAW and SUMMARY_NODE excluded
106 SUMMARY_POP_METRICS = 1 << 0,
107 SUMMARY_POP_RAW = 1 << 1, // DEPRECATED
108 SUMMARY_NODE = 1 << 2, // DEPRECATED
109 SUMMARY_PROCESS = 1 << 3,
110 } talp_summary_t;
111
112 typedef enum TalpModel {
113 TALP_MODEL_HYBRID_V1,
114 TALP_MODEL_HYBRID_V2,
115 } talp_model_t;
116
117 typedef enum TalpComponent {
118 TALP_COMPONENT_NONE = 0,
119 TALP_COMPONENT_DEFAULT = 1 << 0,
120 TALP_COMPONENT_MPI = 1 << 1,
121 TALP_COMPONENT_OPENMP = 1 << 2,
122 TALP_COMPONENT_GPU = 1 << 3,
123 TALP_COMPONENT_HWC = 1 << 4,
124 } talp_component_t;
125
126 typedef enum MngoModeType {
127 MNGO_HELPER_THREAD,
128 MNGO_REGIONS,
129 } mngo_mode_t;
130
131 typedef enum PolicyType {
132 POLICY_NONE,
133 POLICY_LEWI,
134 POLICY_LEWI_ASYNC,
135 POLICY_LEWI_MASK,
136 } policy_t;
137
138 typedef enum InteractionMode {
139 MODE_POLLING,
140 MODE_ASYNC
141 } interaction_mode_t;
142
143 typedef enum MPISet {
144 MPISET_NONE,
145 MPISET_ALL,
146 MPISET_BARRIER,
147 MPISET_COLLECTIVES
148 } mpi_set_t;
149
150 typedef enum OMPTOptions {
151 OMPTOOL_OPTS_NONE = 0,
152 /* OMPTOOL_OPTS_MPI = 1 << 0, DEPRECATED */
153 OMPTOOL_OPTS_BORROW = 1 << 1,
154 OMPTOOL_OPTS_LEND = 1 << 2,
155 /* OMPTOOL_OPTS_AGGRESSIVE = 0xF DEPRECATED */
156 } omptool_opts_t;
157
158 typedef enum OMPTMVersion {
159 OMPTM_NONE,
160 OMPTM_OMP5,
161 OMPTM_FREE_AGENTS,
162 OMPTM_ROLE_SHIFT
163 } omptm_version_t;
164
165 typedef struct sync_call_flags_t {
166 bool is_mpi:1;
167 bool is_blocking:1;
168 bool is_collective:1;
169 bool is_dlb_barrier:1;
170 bool do_lewi:1;
171 } sync_call_flags_t;
172
173 5984 static inline int min_int(int a, int b) { return a < b ? a : b; }
174 86 static inline int max_int(int a, int b) { return a > b ? a : b; }
175 3 static inline int64_t min_int64(int64_t a, int64_t b) { return a < b ? a : b; }
176 62 static inline int64_t max_int64(int64_t a, int64_t b) { return a > b ? a : b; }
177 295 static inline unsigned int min_uint(unsigned int a, unsigned int b) { return a < b ? a : b; }
178 static inline double min_double(double a, double b) { return a < b ? a : b; }
179 static inline double max_double(double a, double b) { return a > b ? a : b; }
180
181 static inline double min_double_non_zero(double a, double b) {
182 if (a == 0.0 && b == 0.0) {
183 return 0.0;
184 } else if (a == 0.0) {
185 return b;
186 } else if (b == 0.0) {
187 return a;
188 } else {
189 return min_double(a, b);
190 }
191 }
192
193 int parse_bool(const char *str, bool *value);
194 bool equivalent_bool(const char *str1, const char *str2);
195
196 int parse_negated_bool(const char *str, bool *value);
197 bool equivalent_negated_bool(const char *str1, const char *str2);
198
199 int parse_int(const char *str, int *value);
200 bool equivalent_int(const char *str1, const char *str2);
201
202 /* verbose_opts_t */
203 int parse_verbose_opts(const char *str, verbose_opts_t *value);
204 const char* verbose_opts_tostr(verbose_opts_t value);
205 const char* get_verbose_opts_choices(void);
206 bool equivalent_verbose_opts(const char *str1, const char *str2);
207
208 /* verbose_fmt_t */
209 int parse_verbose_fmt(const char *str, verbose_fmt_t *value);
210 const char* verbose_fmt_tostr(verbose_fmt_t value);
211 const char* get_verbose_fmt_choices(void);
212 bool equivalent_verbose_fmt(const char *str1, const char *str2);
213
214 /* instrument_item_t */
215 int parse_instrument_items(const char *str, instrument_items_t *value);
216 const char* instrument_items_tostr(instrument_items_t value);
217 const char* get_instrument_items_choices(void);
218 bool equivalent_instrument_items(const char *str1, const char *str2);
219
220 /* debug_opts_t */
221 int parse_debug_opts(const char *str, debug_opts_t *value);
222 const char* debug_opts_tostr(debug_opts_t value);
223 const char* get_debug_opts_choices(void);
224 bool equivalent_debug_opts(const char *str1, const char *str2);
225
226 /* lewi_affinity_t */
227 int parse_lewi_affinity(const char *str, lewi_affinity_t *value);
228 const char* lewi_affinity_tostr(lewi_affinity_t value);
229 const char* get_lewi_affinity_choices(void);
230 bool equivalent_lewi_affinity(const char *str1, const char *str2);
231
232 /* policy_t */
233 int parse_policy(const char *str, policy_t *value);
234 const char* policy_tostr(policy_t policy);
235 const char* get_policy_choices(void);
236 bool equivalent_policy(const char *str1, const char *str2);
237
238 /* talp_summary_t */
239 int parse_talp_summary(const char *str, talp_summary_t *value);
240 const char* talp_summary_tostr(talp_summary_t summary);
241 const char* get_talp_summary_choices(void);
242 bool equivalent_talp_summary(const char *str1, const char *str2);
243
244 /* talp_model_t */
245 int parse_talp_model(const char *str, talp_model_t *value);
246 const char* talp_model_tostr(talp_model_t value);
247 const char* get_talp_model_choices(void);
248 bool equivalent_talp_model(const char *str1, const char *str2);
249
250 /* talp_component_t */
251 int parse_talp_component(const char *str, talp_component_t *value);
252 const char* talp_component_tostr(talp_component_t value);
253 const char* get_talp_component_choices(void);
254 bool equivalent_talp_component(const char *str1, const char *str2);
255
256 /* mngo_mode_t */
257 int parse_mngo_mode(const char *str, mngo_mode_t *option);
258 const char* mngo_mode_tostr(mngo_mode_t value);
259 const char* get_mngo_mode_choices(void);
260 bool equivalent_mngo_mode(const char *str1, const char *str2);
261
262 /* interaction_mode_t */
263 int parse_mode(const char *str, interaction_mode_t *value);
264 const char* mode_tostr(interaction_mode_t value);
265 const char* get_mode_choices(void);
266 bool equivalent_mode(const char *str1, const char *str2);
267
268 /* mpi_set_t */
269 int parse_mpiset(const char *str, mpi_set_t *value);
270 const char* mpiset_tostr(mpi_set_t value);
271 const char* get_mpiset_choices(void);
272 bool equivalent_mpiset(const char *str1, const char *str2);
273
274 /* omptool_opts_t */
275 int parse_omptool_opts(const char *str, omptool_opts_t *value);
276 const char* omptool_opts_tostr(omptool_opts_t value);
277 const char* get_omptool_opts_choices(void);
278 bool equivalent_omptool_opts(const char *str1, const char *str2);
279
280 /* omptm_version_t */
281 int parse_omptm_version(const char *str, omptm_version_t *value);
282 const char* omptm_version_tostr(omptm_version_t value);
283 const char* get_omptm_version_choices(void);
284 bool equivalent_omptm_version_opts(const char *str1, const char *str2);
285
286 #endif /* TYPES_H */
287