Dynamic Load Balance 3.6.1+32-59d1
lb_funcs.h
Go to the documentation of this file.
1/*********************************************************************************/
2/* Copyright 2009-2021 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 LB_FUNCS_H
21#define LB_FUNCS_H
22
23#include "support/types.h"
24
25#include <sched.h>
26
27struct SubProcessDescriptor;
28
29typedef struct BalancePolicy {
30 /* Status */
31 int (*init)(struct SubProcessDescriptor *spd);
32 int (*finalize)(struct SubProcessDescriptor *spd);
33 int (*enable)(const struct SubProcessDescriptor *spd);
34 int (*disable)(const struct SubProcessDescriptor *spd);
35 int (*set_max_parallelism)(const struct SubProcessDescriptor *spd, int max);
36 int (*unset_max_parallelism)(const struct SubProcessDescriptor *spd);
37 /* MPI specific */
38 int (*into_communication)(const struct SubProcessDescriptor *spd);
39 int (*out_of_communication)(const struct SubProcessDescriptor *spd);
40 int (*into_blocking_call)(const struct SubProcessDescriptor *spd);
41 int (*out_of_blocking_call)(const struct SubProcessDescriptor *spd);
42 /* Lend */
43 int (*lend)(const struct SubProcessDescriptor *spd);
44 int (*lend_cpu)(const struct SubProcessDescriptor *spd, int cpuid);
45 int (*lend_cpus)(const struct SubProcessDescriptor *spd, int ncpus);
46 int (*lend_cpu_mask)(const struct SubProcessDescriptor *spd, const cpu_set_t *mask);
47 /* Reclaim */
48 int (*reclaim)(const struct SubProcessDescriptor *spd);
49 int (*reclaim_cpu)(const struct SubProcessDescriptor *spd, int cpuid);
50 int (*reclaim_cpus)(const struct SubProcessDescriptor *spd, int ncpus);
51 int (*reclaim_cpu_mask)(const struct SubProcessDescriptor *spd, const cpu_set_t *mask);
52 /* Acquire */
53 int (*acquire_cpu)(const struct SubProcessDescriptor *spd, int cpuid);
54 int (*acquire_cpus)(const struct SubProcessDescriptor *spd, int ncpus);
55 int (*acquire_cpu_mask)(const struct SubProcessDescriptor *spd, const cpu_set_t *mask);
56 int (*acquire_cpus_in_mask)(const struct SubProcessDescriptor *spd, int ncpus, const cpu_set_t *mask);
57 /* Borrow */
58 int (*borrow)(const struct SubProcessDescriptor *spd);
59 int (*borrow_cpu)(const struct SubProcessDescriptor *spd, int cpuid);
60 int (*borrow_cpus)(const struct SubProcessDescriptor *spd, int ncpus);
61 int (*borrow_cpu_mask)(const struct SubProcessDescriptor *spd, const cpu_set_t *mask);
62 int (*borrow_cpus_in_mask)(const struct SubProcessDescriptor *spd, int ncpus, const cpu_set_t *mask);
63 /* Return */
64 int (*return_all)(const struct SubProcessDescriptor *spd);
65 int (*return_cpu)(const struct SubProcessDescriptor *spd, int cpuid);
66 int (*return_cpu_mask)(const struct SubProcessDescriptor *spd, const cpu_set_t *mask);
67 /* Misc */
68 int (*check_cpu_availability)(const struct SubProcessDescriptor *spd, int cpuid);
69 int (*update_ownership)(const struct SubProcessDescriptor *spd, const cpu_set_t *process_mask);
71
72void set_lb_funcs(balance_policy_t *lb_funcs, policy_t policy);
73
74#endif /* LB_FUNCS_H */
int acquire_cpus_in_mask(const subprocess_descriptor_t *spd, int ncpus, const cpu_set_t *mask)
Definition: DLB_kernel.c:569
int reclaim_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask)
Definition: DLB_kernel.c:502
int lend(const subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:386
int set_max_parallelism(subprocess_descriptor_t *spd, int max)
Definition: DLB_kernel.c:317
int reclaim(const subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:454
int borrow_cpus(const subprocess_descriptor_t *spd, int ncpus)
Definition: DLB_kernel.c:620
int return_all(const subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:670
int unset_max_parallelism(subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:333
int check_cpu_availability(const subprocess_descriptor_t *spd, int cpuid)
Definition: DLB_kernel.c:807
int borrow(const subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:588
int lend_cpus(const subprocess_descriptor_t *spd, int ncpus)
Definition: DLB_kernel.c:419
int acquire_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask)
Definition: DLB_kernel.c:553
int borrow_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask)
Definition: DLB_kernel.c:636
int acquire_cpus(const subprocess_descriptor_t *spd, int ncpus)
Definition: DLB_kernel.c:537
int lend_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask)
Definition: DLB_kernel.c:435
int reclaim_cpus(const subprocess_descriptor_t *spd, int ncpus)
Definition: DLB_kernel.c:486
int return_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask)
Definition: DLB_kernel.c:698
int borrow_cpus_in_mask(const subprocess_descriptor_t *spd, int ncpus, const cpu_set_t *mask)
Definition: DLB_kernel.c:652
void set_lb_funcs(balance_policy_t *lb_funcs, policy_t policy)
Definition: lb_funcs.c:34
Definition: lb_funcs.h:29
policy_t
Definition: types.h:123