Dynamic Load Balance 3.6.1+32-59d1
dlb.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 DLB_H
21#define DLB_H
22
23#include "dlb_types.h"
24#include "dlb_errors.h"
25#include <stdbool.h>
26#include <stddef.h>
27
28/* DLB Version:
29 * major version: DLB_VERSION >> 16 & 0xff
30 * minor version: DLB_VERSION >> 8 & 0xff
31 * patch version: DLB_VERSION & 0xff
32 */
33#define DLB_VERSION 0x30601
34
35#ifdef __cplusplus
36extern "C"
37{
38#endif
39
40/*********************************************************************************/
41/* Status */
42/*********************************************************************************/
43
60int DLB_Init(int ncpus, const_dlb_cpu_set_t mask, const char *dlb_args);
61
67int DLB_Finalize(void);
68
76int DLB_PreInit(const_dlb_cpu_set_t mask, char ***next_environ);
77
87int DLB_Enable(void);
88
98int DLB_Disable(void);
99
113int DLB_SetMaxParallelism(int max);
114
124
125
126/*********************************************************************************/
127/* Callbacks */
128/*********************************************************************************/
129
142int DLB_CallbackSet(dlb_callbacks_t which, dlb_callback_t callback, void *arg);
143
154int DLB_CallbackGet(dlb_callbacks_t which, dlb_callback_t *callback, void **arg);
155
156
157/*********************************************************************************/
158/* Lend */
159/*********************************************************************************/
160
171int DLB_Lend(void);
172
184int DLB_LendCpu(int cpuid);
185
198int DLB_LendCpus(int ncpus);
199
212
213
214/*********************************************************************************/
215/* Reclaim */
216/*********************************************************************************/
217
229int DLB_Reclaim(void);
230
244int DLB_ReclaimCpu(int cpuid);
245
258int DLB_ReclaimCpus(int ncpus);
259
274
275
276/*********************************************************************************/
277/* Acquire */
278/*********************************************************************************/
279
295int DLB_AcquireCpu(int cpuid);
296
315int DLB_AcquireCpus(int ncpus);
316
333
350int DLB_AcquireCpusInMask(int ncpus, const_dlb_cpu_set_t mask);
351
352
353/*********************************************************************************/
354/* Borrow */
355/*********************************************************************************/
356
367int DLB_Borrow(void);
368
380int DLB_BorrowCpu(int cpuid);
381
393int DLB_BorrowCpus(int ncpus);
394
407
420int DLB_BorrowCpusInMask(int ncpus, const_dlb_cpu_set_t mask);
421
422/*********************************************************************************/
423/* Return */
424/*********************************************************************************/
425
441int DLB_Return(void);
442
457int DLB_ReturnCpu(int cpuid);
458
474
475
476/*********************************************************************************/
477/* DROM Responsive */
478/*********************************************************************************/
479
491int DLB_PollDROM(int *ncpus, dlb_cpu_set_t mask);
492
502int DLB_PollDROM_Update(void);
503
504
505/*********************************************************************************/
506/* Misc */
507/*********************************************************************************/
508
518int DLB_CheckCpuAvailability(int cpuid);
519
531int DLB_Barrier(void);
532
544int DLB_BarrierAttach(void);
545
556int DLB_BarrierDetach(void);
557
578dlb_barrier_t* DLB_BarrierNamedRegister(const char *barrier_name,
579 dlb_barrier_flags_t flags);
580
582dlb_barrier_t* DLB_BarrierNamedGet(const char *barrier_name,
583 dlb_barrier_flags_t flags);
584
594
606
619
631int DLB_SetVariable(const char *variable, const char *value);
632
641int DLB_GetVariable(const char *variable, char *value);
642
648int DLB_PrintVariables(int print_extended);
649
655int DLB_PrintShmem(int num_columns, dlb_printshmem_flags_t print_flags);
656
661const char* DLB_Strerror(int errnum);
662
675
682int DLB_GetVersion(int *major, int *minor, int *patch);
683
684
685int DLB_GetGPUAffinity(char *buffer, size_t buffer_size, bool full_uuid);
686
687int DLB_AutoSizerStart(void) __attribute__((deprecated));
688int DLB_AutoSizerEnd(void) __attribute__((deprecated));
689
690#ifdef __cplusplus
691}
692#endif
693
694#endif /* DLB_H */
__attribute__((constructor))
Definition: DLB_interface.c:47
__thread bool thread_is_observer
Definition: DLB_kernel.c:56
int DLB_ReclaimCpu(int cpuid)
Reclaim a specific CPU that are owned by the process.
Definition: DLB_interface.c:210
const char * DLB_Strerror(int errnum)
Obtain a pointer to a string that describes the error code passed by argument.
Definition: DLB_interface.c:467
int DLB_AcquireCpusInMask(int ncpus, const_dlb_cpu_set_t mask)
Acquire some CPUs from a subset of CPUs.
Definition: DLB_interface.c:267
int DLB_PollDROM(int *ncpus, dlb_cpu_set_t mask)
Poll DROM module to check if the process needs to adapt to a new mask or number of CPUs.
Definition: DLB_interface.c:357
int DLB_AcquireCpu(int cpuid)
Acquire a specific CPU.
Definition: DLB_interface.c:240
int DLB_Barrier(void)
Perform a DLB Barrier among processes in the node.
Definition: DLB_interface.c:384
int DLB_BarrierNamedAttach(dlb_barrier_t *barrier)
Attach process to the named barrier team.
Definition: DLB_interface.c:421
int DLB_AcquireCpus(int ncpus)
Acquire a specific amount of CPUs.
Definition: DLB_interface.c:249
int DLB_ReclaimCpus(int ncpus)
Reclaim a specific amount of CPUs that are owned by the process.
Definition: DLB_interface.c:219
int DLB_GetVariable(const char *variable, char *value)
Query the value of a DLB internal variable.
Definition: DLB_interface.c:439
int DLB_Enable(void)
Enable DLB and all its features in case it was previously disabled, otherwise it has no effect.
Definition: DLB_interface.c:108
int DLB_SetMaxParallelism(int max)
Set the maximum number of resources to be used by the calling process.
Definition: DLB_interface.c:126
dlb_barrier_t * DLB_BarrierNamedRegister(const char *barrier_name, dlb_barrier_flags_t flags)
Register, or obtain, a named barrier.
Definition: DLB_interface.c:402
int DLB_LendCpuMask(const_dlb_cpu_set_t mask)
Lend a set of CPUs.
Definition: DLB_interface.c:189
int DLB_Lend(void)
Lend all the current CPUs.
Definition: DLB_interface.c:162
int DLB_LendCpus(int ncpus)
Lend a specific amount of CPUs, only useful for systems that do not work with cpu masks.
Definition: DLB_interface.c:180
int DLB_BarrierNamed(dlb_barrier_t *barrier)
Perform a DLB Barrier using the named barrier among processes in the node.
int DLB_CallbackGet(dlb_callbacks_t which, dlb_callback_t *callback, void **arg)
Getter for DLB callbacks.
Definition: DLB_interface.c:153
int DLB_PreInit(const_dlb_cpu_set_t mask, char ***next_environ)
Pre-Initialize process.
Definition: DLB_interface.c:90
int DLB_ReturnCpu(int cpuid)
Return the specific CPU if it has been reclaimed.
Definition: DLB_interface.c:336
int DLB_GetGPUAffinity(char *buffer, size_t buffer_size, bool full_uuid)
Definition: DLB_interface.c:486
int DLB_BorrowCpus(int ncpus)
Borrow a specific amount of CPUs.
Definition: DLB_interface.c:297
int DLB_LendCpu(int cpuid)
Lend a specific CPU.
Definition: DLB_interface.c:171
int DLB_BarrierAttach(void)
Attach process to the DLB Barrier team.
Definition: DLB_interface.c:390
int DLB_AcquireCpuMask(const_dlb_cpu_set_t mask)
Acquire a set of CPUs.
Definition: DLB_interface.c:258
int DLB_Reclaim(void)
Reclaim all the CPUs that are owned by the process.
Definition: DLB_interface.c:201
int DLB_AutoSizerStart(void) __attribute__((deprecated))
int DLB_CheckCpuAvailability(int cpuid)
Check whether the specified CPU is being used by another process.
Definition: DLB_interface.c:378
int DLB_BorrowCpu(int cpuid)
Borrow a specific CPU.
Definition: DLB_interface.c:288
int DLB_GetVersion(int *major, int *minor, int *patch)
Return the DLB version.
Definition: DLB_interface.c:478
int DLB_AutoSizerEnd(void) __attribute__((deprecated))
int DLB_BarrierNamedDetach(dlb_barrier_t *barrier)
Detach process from the named barrier team.
Definition: DLB_interface.c:427
int DLB_PrintVariables(int print_extended)
Print DLB internal variables.
Definition: DLB_interface.c:445
int DLB_UnsetMaxParallelism(void)
Unset the maximum number of resources to be used by the calling process.
Definition: DLB_interface.c:135
int DLB_PrintShmem(int num_columns, dlb_printshmem_flags_t print_flags)
Print the data stored in the shmem.
Definition: DLB_interface.c:461
int DLB_ReclaimCpuMask(const_dlb_cpu_set_t mask)
Reclaim a set of CPUs.
Definition: DLB_interface.c:228
int DLB_Disable(void)
Disable DLB actions for the calling process.
Definition: DLB_interface.c:117
int DLB_BorrowCpuMask(const_dlb_cpu_set_t mask)
Borrow a set of CPUs.
Definition: DLB_interface.c:306
int DLB_BorrowCpusInMask(int ncpus, const_dlb_cpu_set_t mask)
Borrow some CPUs from a subset of CPUs.
Definition: DLB_interface.c:315
int DLB_PollDROM_Update(void)
Poll DROM module to check if the process needs to adapt to a new mask and update it if necessary usin...
Definition: DLB_interface.c:366
int DLB_CallbackSet(dlb_callbacks_t which, dlb_callback_t callback, void *arg)
Setter for DLB callbacks.
Definition: DLB_interface.c:147
int DLB_Finalize(void)
Finalize DLB library and clean up all its data structures. Must be called by each process before exit...
Definition: DLB_interface.c:71
int DLB_Init(int ncpus, const_dlb_cpu_set_t mask, const char *dlb_args)
Initialize DLB library and all its internal data structures. Must be called once and only once by eac...
Definition: DLB_interface.c:61
dlb_barrier_t * DLB_BarrierNamedGet(const char *barrier_name, dlb_barrier_flags_t flags)
Register, or obtain, a named barrier.
int DLB_BarrierDetach(void)
Detach process from the DLB Barrier team.
Definition: DLB_interface.c:396
int DLB_Borrow(void)
Borrow all the possible CPUs registered on DLB.
Definition: DLB_interface.c:279
int DLB_SetVariable(const char *variable, const char *value)
Change the value of a DLB internal variable.
Definition: DLB_interface.c:433
int DLB_ReturnCpuMask(const_dlb_cpu_set_t mask)
Return a set of CPUs if some of them have been reclaimed.
Definition: DLB_interface.c:345
int DLB_SetObserverRole(bool thread_is_observer)
Modify the current thread DLB role to either observer or particpant.
Definition: DLB_interface.c:472
int DLB_Return(void)
Return claimed CPUs of other processes.
Definition: DLB_interface.c:327
dlb_callbacks_t
Definition: dlb_types.h:61
void * dlb_cpu_set_t
Definition: dlb_types.h:26
dlb_printshmem_flags_t
Definition: dlb_types.h:45
dlb_barrier_flags_t
Definition: dlb_types.h:51
void(* dlb_callback_t)(void)
Definition: dlb_types.h:58
struct dlb_barrier_t dlb_barrier_t
Definition: dlb_types.h:24
const void * const_dlb_cpu_set_t
Definition: dlb_types.h:27