Dynamic Load Balance 3.6.1+32-59d1
DLB_kernel.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 DLB_KERNEL_H
21#define DLB_KERNEL_H
22
23#include "LB_core/spd.h"
24#include "apis/dlb_types.h"
25#include "support/options.h"
26
27#include <sched.h>
28#include <stdbool.h>
29#include <unistd.h>
30#include <stdlib.h>
31
32typedef struct sync_call_flags_t {
33 bool is_mpi:1;
37 bool do_lewi:1;
39
40/* Status */
41int Initialize(subprocess_descriptor_t *spd, pid_t id, int ncpus,
42 const cpu_set_t *mask, const char *lb_args);
44int PreInitialize(subprocess_descriptor_t *spd, const cpu_set_t *mask,
45 const char *lb_args);
46int set_lewi_enabled(subprocess_descriptor_t *spd, bool enabled);
49
50/* Sync-call specific (MPI, DLB_Barrier, etc.) */
53
54/* Lend */
55int lend(const subprocess_descriptor_t *spd);
56int lend_cpu(const subprocess_descriptor_t *spd, int cpuid);
57int lend_cpus(const subprocess_descriptor_t *spd, int ncpus);
58int lend_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask);
59
60/* Reclaim */
61int reclaim(const subprocess_descriptor_t *spd);
62int reclaim_cpu(const subprocess_descriptor_t *spd, int cpuid);
63int reclaim_cpus(const subprocess_descriptor_t *spd, int ncpus);
64int reclaim_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask);
65
66/* Acquire */
67int acquire_cpu(const subprocess_descriptor_t *spd, int cpuid);
68int acquire_cpus(const subprocess_descriptor_t *spd, int ncpus);
69int acquire_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask);
70int acquire_cpus_in_mask(const subprocess_descriptor_t *spd, int ncpus, const cpu_set_t *mask);
71
72/* Borrow */
73int borrow(const subprocess_descriptor_t *spd);
74int borrow_cpu(const subprocess_descriptor_t *spd, int cpuid);
75int borrow_cpus(const subprocess_descriptor_t *spd, int ncpus);
76int borrow_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask);
77int borrow_cpus_in_mask(const subprocess_descriptor_t *spd, int ncpus, const cpu_set_t *mask);
78
79/* Return */
81int return_cpu(const subprocess_descriptor_t *spd, int cpuid);
82int return_cpu_mask(const subprocess_descriptor_t *spd, const cpu_set_t *mask);
83
84/* DROM Responsive */
85int poll_drom(const subprocess_descriptor_t *spd, int *new_cpus, cpu_set_t *new_mask);
88
89/* Misc */
90int check_cpu_availability(const subprocess_descriptor_t *spd, int cpuid);
91int print_shmem(subprocess_descriptor_t *spd, int num_columns,
92 dlb_printshmem_flags_t print_flags);
93int set_observer_role(bool is_observer);
94int get_gpu_affinity(char *buffer, size_t buffer_size, bool full_uuid);
95void print_dlb_variables(subprocess_descriptor_t *spd, bool print_extended);
96
97#endif //DLB_KERNEL_H
int set_observer_role(bool is_observer)
Definition: DLB_kernel.c:839
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 borrow_cpu(const subprocess_descriptor_t *spd, int cpuid)
Definition: DLB_kernel.c:604
int reclaim_cpu(const subprocess_descriptor_t *spd, int cpuid)
Definition: DLB_kernel.c:470
int set_max_parallelism(subprocess_descriptor_t *spd, int max)
Definition: DLB_kernel.c:317
int poll_drom(const subprocess_descriptor_t *spd, int *new_cpus, cpu_set_t *new_mask)
Definition: DLB_kernel.c:715
int get_gpu_affinity(char *buffer, size_t buffer_size, bool full_uuid)
Definition: DLB_kernel.c:844
void out_of_sync_call(sync_call_flags_t flags)
Definition: DLB_kernel.c:367
int reclaim(const subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:454
void into_sync_call(sync_call_flags_t flags)
Definition: DLB_kernel.c:351
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 Finish(subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:221
int print_shmem(subprocess_descriptor_t *spd, int num_columns, dlb_printshmem_flags_t print_flags)
Definition: DLB_kernel.c:819
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 return_cpu(const subprocess_descriptor_t *spd, int cpuid)
Definition: DLB_kernel.c:684
int lend_cpu(const subprocess_descriptor_t *spd, int cpuid)
Definition: DLB_kernel.c:403
int drom_setprocessmask(int pid, const_dlb_cpu_set_t mask, dlb_drom_flags_t flags)
Definition: DLB_kernel.c:749
int lend_cpus(const subprocess_descriptor_t *spd, int ncpus)
Definition: DLB_kernel.c:419
int Initialize(subprocess_descriptor_t *spd, pid_t id, int ncpus, const cpu_set_t *mask, const char *lb_args)
Definition: DLB_kernel.c:61
void print_dlb_variables(subprocess_descriptor_t *spd, bool print_extended)
Definition: DLB_kernel.c:848
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 PreInitialize(subprocess_descriptor_t *spd, const cpu_set_t *mask, const char *lb_args)
Definition: DLB_kernel.c:271
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 set_lewi_enabled(subprocess_descriptor_t *spd, bool enabled)
Definition: DLB_kernel.c:301
int reclaim_cpus(const subprocess_descriptor_t *spd, int ncpus)
Definition: DLB_kernel.c:486
int acquire_cpu(const subprocess_descriptor_t *spd, int cpuid)
Definition: DLB_kernel.c:521
int poll_drom_update(const subprocess_descriptor_t *spd)
Definition: DLB_kernel.c:740
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
dlb_drom_flags_t
Definition: dlb_types.h:34
dlb_printshmem_flags_t
Definition: dlb_types.h:45
const void * const_dlb_cpu_set_t
Definition: dlb_types.h:27
Definition: spd.h:33
Definition: DLB_kernel.h:32
bool do_lewi
Definition: DLB_kernel.h:37
bool is_blocking
Definition: DLB_kernel.h:34
bool is_collective
Definition: DLB_kernel.h:35
bool is_dlb_barrier
Definition: DLB_kernel.h:36
bool is_mpi
Definition: DLB_kernel.h:33