Dynamic Load Balance 3.6.1+32-59d1
mask_utils.h
Go to the documentation of this file.
1/*********************************************************************************/
2/* Copyright 2009-2024 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 MASK_UTILS_H
21#define MASK_UTILS_H
22
23#include "support/debug.h"
24#include "support/types.h"
25#include <sched.h>
26
27typedef struct mu_cpuset_t {
28 cpu_set_t *set;
29 size_t alloc_size;
34
35/* System topology */
36void mu_init(void);
37void mu_finalize(void);
38int mu_get_system_size(void);
39void mu_get_system_mask(cpu_set_t *mask);
44bool mu_system_has_smt(void);
45int mu_get_num_cores(void);
46int mu_get_core_id(int cpuid);
47const mu_cpuset_t* mu_get_core_mask(int cpuid);
48const mu_cpuset_t* mu_get_core_mask_by_coreid(int core_id);
49void mu_get_nodes_intersecting_with_cpuset(cpu_set_t *node_set, const cpu_set_t *cpuset);
50void mu_get_nodes_subset_of_cpuset(cpu_set_t *node_set, const cpu_set_t *cpuset);
51void mu_get_cores_intersecting_with_cpuset(cpu_set_t *core_set, const cpu_set_t *cpuset);
52void mu_get_cores_subset_of_cpuset(cpu_set_t *core_set, const cpu_set_t *cpuset);
53int mu_get_cpu_next_core(const cpu_set_t *mask, int prev_cpu);
54int mu_count_cores(const cpu_set_t *mask);
55int mu_count_cores_intersecting_with_cpuset(const cpu_set_t *mask);
56int mu_get_last_coreid(const cpu_set_t *mask);
57int mu_take_last_coreid(cpu_set_t *mask);
58void mu_unset_core(cpu_set_t *mask, int coreid);
59void mu_set_core(cpu_set_t *mask, int coreid);
60
61
62/* Generic mask utilities */
63void mu_zero(cpu_set_t *result);
64void mu_and(cpu_set_t *result, const cpu_set_t *mask1, const cpu_set_t *mask2);
65void mu_or(cpu_set_t *result, const cpu_set_t *mask1, const cpu_set_t *mask2);
66void mu_xor (cpu_set_t *result, const cpu_set_t *mask1, const cpu_set_t *mask2);
67bool mu_equal(const cpu_set_t *mask1, const cpu_set_t *mask2);
68bool mu_is_subset(const cpu_set_t *subset, const cpu_set_t *superset);
69bool mu_is_superset(const cpu_set_t *superset, const cpu_set_t *subset);
70bool mu_is_proper_subset(const cpu_set_t *subset, const cpu_set_t *superset);
71bool mu_is_proper_superset(const cpu_set_t *superset, const cpu_set_t *subset);
72bool mu_intersects(const cpu_set_t *mask1, const cpu_set_t *mask2);
73int mu_count(const cpu_set_t *mask);
74void mu_subtract(cpu_set_t *result, const cpu_set_t *minuend, const cpu_set_t *subtrahend);
75int mu_get_single_cpu(const cpu_set_t *mask);
76int mu_get_first_cpu(const cpu_set_t *mask);
77int mu_get_last_cpu(const cpu_set_t *mask);
78int mu_get_next_cpu(const cpu_set_t *mask, int prev);
79int mu_get_next_unset(const cpu_set_t *mask, int prev);
80
81/* Parsing utilities */
82const char* mu_to_str(const cpu_set_t *cpu_set);
83void mu_parse_mask(const char *str, cpu_set_t *mask);
84char* mu_parse_to_slurm_format(const cpu_set_t *mask);
85bool mu_equivalent_masks(const char *str1, const char *str2);
86void mu_get_quoted_mask(const cpu_set_t *mask, char *str, size_t namelen);
87int mu_cmp_cpuids_by_ownership(const void *cpuid1, const void *cpuid2, void *mask);
88int mu_cmp_cpuids_by_affinity(const void *cpuid1, const void *cpuid2, void *affinity);
89
90/* Testing */
92void mu_testing_set_sys_size(int size);
93void mu_testing_set_sys(unsigned int num_cpus, unsigned int num_cores,
94 unsigned int num_nodes);
95void mu_testing_set_sys_masks(const cpu_set_t *sys_mask,
96 const cpu_set_t *core_masks, unsigned int num_cores,
97 const cpu_set_t *node_masks, unsigned int num_nodes);
99
100#endif /* MASK_UTILS_H */
void mu_get_quoted_mask(const cpu_set_t *mask, char *str, size_t namelen)
Definition: mask_utils.c:1247
void mu_get_cores_subset_of_cpuset(cpu_set_t *core_set, const cpu_set_t *cpuset)
Definition: mask_utils.c:749
int mu_get_cpu_next_core(const cpu_set_t *mask, int prev_cpu)
Definition: mask_utils.c:761
int mu_get_single_cpu(const cpu_set_t *mask)
Definition: mask_utils.c:964
void mu_get_cores_intersecting_with_cpuset(cpu_set_t *core_set, const cpu_set_t *cpuset)
Definition: mask_utils.c:730
void mu_get_nodes_intersecting_with_cpuset(cpu_set_t *node_set, const cpu_set_t *cpuset)
Definition: mask_utils.c:694
void mu_subtract(cpu_set_t *result, const cpu_set_t *minuend, const cpu_set_t *subtrahend)
Definition: mask_utils.c:957
int mu_get_first_cpu(const cpu_set_t *mask)
Definition: mask_utils.c:975
int mu_take_last_coreid(cpu_set_t *mask)
Definition: mask_utils.c:856
int mu_get_system_num_nodes(void)
Definition: mask_utils.c:574
bool mu_testing_is_initialized(void)
Definition: mask_utils.c:1485
void mu_parse_mask(const char *str, cpu_set_t *mask)
Definition: mask_utils.c:1105
int mu_get_system_cores_per_node(void)
Definition: mask_utils.c:578
const mu_cpuset_t * mu_get_core_mask_by_coreid(int core_id)
Definition: mask_utils.c:680
void mu_testing_set_sys_masks(const cpu_set_t *sys_mask, const cpu_set_t *core_masks, unsigned int num_cores, const cpu_set_t *node_masks, unsigned int num_nodes)
Definition: mask_utils.c:1500
void mu_unset_core(cpu_set_t *mask, int coreid)
Definition: mask_utils.c:885
int mu_cmp_cpuids_by_affinity(const void *cpuid1, const void *cpuid2, void *affinity)
Definition: mask_utils.c:1397
void mu_and(cpu_set_t *result, const cpu_set_t *mask1, const cpu_set_t *mask2)
Definition: mask_utils.c:896
bool mu_is_superset(const cpu_set_t *superset, const cpu_set_t *subset)
Definition: mask_utils.c:921
bool mu_equal(const cpu_set_t *mask1, const cpu_set_t *mask2)
Definition: mask_utils.c:908
int mu_count_cores(const cpu_set_t *mask)
Definition: mask_utils.c:789
void mu_get_system_mask(cpu_set_t *mask)
Definition: mask_utils.c:561
void mu_set_core(cpu_set_t *mask, int coreid)
Definition: mask_utils.c:872
void mu_testing_set_sys(unsigned int num_cpus, unsigned int num_cores, unsigned int num_nodes)
Definition: mask_utils.c:1494
bool mu_system_has_smt(void)
Definition: mask_utils.c:640
void mu_get_nodes_subset_of_cpuset(cpu_set_t *node_set, const cpu_set_t *cpuset)
Definition: mask_utils.c:713
int mu_get_next_cpu(const cpu_set_t *mask, int prev)
Definition: mask_utils.c:1007
int mu_get_last_coreid(const cpu_set_t *mask)
Definition: mask_utils.c:835
void mu_zero(cpu_set_t *result)
Definition: mask_utils.c:892
void mu_finalize(void)
Definition: mask_utils.c:530
int mu_get_system_size(void)
Definition: mask_utils.c:556
int mu_get_num_cores(void)
Definition: mask_utils.c:645
int mu_count(const cpu_set_t *mask)
Definition: mask_utils.c:952
void mu_xor(cpu_set_t *result, const cpu_set_t *mask1, const cpu_set_t *mask2)
Definition: mask_utils.c:904
bool mu_is_proper_subset(const cpu_set_t *subset, const cpu_set_t *superset)
Definition: mask_utils.c:929
int mu_get_core_id(int cpuid)
Definition: mask_utils.c:659
bool mu_equivalent_masks(const char *str1, const char *str2)
Definition: mask_utils.c:1325
int mu_count_cores_intersecting_with_cpuset(const cpu_set_t *mask)
Definition: mask_utils.c:811
bool mu_is_proper_superset(const cpu_set_t *superset, const cpu_set_t *subset)
Definition: mask_utils.c:937
bool mu_intersects(const cpu_set_t *mask1, const cpu_set_t *mask2)
Definition: mask_utils.c:945
void mu_testing_init_nohwloc(void)
Definition: mask_utils.c:1507
char * mu_parse_to_slurm_format(const cpu_set_t *mask)
Definition: mask_utils.c:1303
const char * mu_to_str(const cpu_set_t *cpu_set)
Definition: mask_utils.c:1054
void mu_or(cpu_set_t *result, const cpu_set_t *mask1, const cpu_set_t *mask2)
Definition: mask_utils.c:900
int mu_get_system_hwthreads_per_core(void)
Definition: mask_utils.c:567
int mu_cmp_cpuids_by_ownership(const void *cpuid1, const void *cpuid2, void *mask)
Definition: mask_utils.c:1349
void mu_testing_set_sys_size(int size)
Definition: mask_utils.c:1489
int mu_get_last_cpu(const cpu_set_t *mask)
Definition: mask_utils.c:988
void mu_get_system_description(print_buffer_t *buffer)
Definition: mask_utils.c:582
bool mu_is_subset(const cpu_set_t *subset, const cpu_set_t *superset)
Definition: mask_utils.c:913
void mu_init(void)
Definition: mask_utils.c:507
const mu_cpuset_t * mu_get_core_mask(int cpuid)
Definition: mask_utils.c:673
int mu_get_next_unset(const cpu_set_t *mask, int prev)
Definition: mask_utils.c:1029
Definition: mask_utils.h:27
cpuid_t first_cpuid
Definition: mask_utils.h:31
size_t alloc_size
Definition: mask_utils.h:29
cpuid_t count
Definition: mask_utils.h:30
cpu_set_t * set
Definition: mask_utils.h:28
cpuid_t last_cpuid
Definition: mask_utils.h:32
Definition: debug.h:31
uint8_t cpuid_t
Definition: types.h:32