DLB
dlb-3.4
Getting started
Components Overview
LeWI: Lend When Idle
DROM: Dynamic Resource Ownership Manager
TALP: Tracking Application Live Performance
How to install DLB
Build requirements
Installation steps
Other installation methods
Downloading from git repository
Meson
DLB configure flags
Debug and Instrumentation versions
Optional dependencies
Additional MPI configure flags
How to run with DLB
Contents of the installation
Structure after installation
Binaries
Libraries
Examples
DROM
OMPT
MPI + OpenMP / MPI + OpenMP (OMPT) / MPI + OmpSs
Monitoring Regions
TALP
Statistics
Scripts
Technical Requirements
Programming models
POSIX Shared Memory
Preload mechanism for MPI applications
Non-busy-waiting for MPI calls
Parallel regions in OpenMP
LeWI
LeWI for improving Load Balance in Applications
Using a DLB script provided in the installation
LeWI Examples by Programming Model
MPI + OmpSs
MPI + OpenMP
MPI + OpenMP (with OMPT support)
LewI option flags
DROM
DROM for making the application react to changes in the CPU affinity
DROM example
TALP
TALP for monitoring the Programming Model efficiencies
Reporting POP metrics at the end of the execution
POP Metrics Overview
Parallel Efficiency
Communication Efficiency
Load Balance
Intra-node Load Balance (LB_in)
Inter-node Load Balance (LB_out)
Average IPC
Defining custom monitoring regions
Inspecting monitoring regions within the source code
Redirecting TALP output to a file
Enabling Hardware Counters
TALP option flags
API Documentation
Public API
DLB Types
DLB Basic API
LeWI API
Dynamic Resource Manager Interface
TALP Interface
DLB_TALP_QueryPOPNodeMetrics()
Advanced Usage
DLB Return Errors
Callbacks
Asynchronous mode
Requests
OMPT
Usage
Summary
FAQ
FAQ: Frequently Asked Questions
Does my application need to meet any requirements to run with DLB?
Which should I use, LeWI or DROM for my application?
DLB fails registering a mask. What does it mean?
I’m running a hybrid MPI + OpenMP application but DLB doesn’t seem to have any impact
I’m running a well allocated hybrid MPI + OpenMP but DLB still doesn’t do anything.
How do I share CPUs between unrelated applications?
How do I prevent sharing CPUs between applications?
Can I see DLB in action in a Paraver trace?
Can I see DLB events in a Paraver trace?
What DLB library do I need to use if I want to trace the application but not DLB?
Man pages
dlb
NAME
SYNOPSIS
DESCRIPTION
AUTHOR
SEE ALSO
dlb_run
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
AUTHOR
SEE ALSO
dlb_shm
NAME
SYNOPSIS
DESCRIPTION
AUTHOR
SEE ALSO
dlb_taskset
NAME
SYNOPSIS
DESCRIPTION
OPTIONS
CPU_LIST FORMAT
AUTHOR
SEE ALSO
dlb.h
NAME
SYNOPSIS
Functions
Function Documentation
int DLB_Init (int ncpus,
const_dlb_cpu_set_t
mask, const char * dlb_args)
int DLB_Finalize (void)
int DLB_PreInit (
const_dlb_cpu_set_t
mask, char *** next_environ)
int DLB_Enable (void)
int DLB_Disable (void)
int DLB_SetMaxParallelism (int max)
int DLB_UnsetMaxParallelism (void)
int DLB_CallbackSet (
dlb_callbacks_t
which,
dlb_callback_t
callback, void * arg)
int DLB_CallbackGet (
dlb_callbacks_t
which,
dlb_callback_t
* callback, void ** arg)
int DLB_Lend (void)
int DLB_LendCpu (int cpuid)
int DLB_LendCpus (int ncpus)
int DLB_LendCpuMask (
const_dlb_cpu_set_t
mask)
int DLB_Reclaim (void)
int DLB_ReclaimCpu (int cpuid)
int DLB_ReclaimCpus (int ncpus)
int DLB_ReclaimCpuMask (
const_dlb_cpu_set_t
mask)
int DLB_AcquireCpu (int cpuid)
int DLB_AcquireCpus (int ncpus)
int DLB_AcquireCpuMask (
const_dlb_cpu_set_t
mask)
int DLB_AcquireCpusInMask (int ncpus,
const_dlb_cpu_set_t
mask)
int DLB_Borrow (void)
int DLB_BorrowCpu (int cpuid)
int DLB_BorrowCpus (int ncpus)
int DLB_BorrowCpuMask (
const_dlb_cpu_set_t
mask)
int DLB_BorrowCpusInMask (int ncpus,
const_dlb_cpu_set_t
mask)
int DLB_Return (void)
int DLB_ReturnCpu (int cpuid)
int DLB_ReturnCpuMask (
const_dlb_cpu_set_t
mask)
int DLB_PollDROM (int * ncpus,
dlb_cpu_set_t
mask)
int DLB_PollDROM_Update (void)
int DLB_CheckCpuAvailability (int cpuid)
int DLB_Barrier (void)
int DLB_BarrierAttach (void)
int DLB_BarrierDetach (void)
dlb_barrier_t
* DLB_BarrierNamedRegister (const char * barrier_name,
dlb_barrier_flags_t
flags)
dlb_barrier_t
* DLB_BarrierNamedGet (const char * barrier_name,
dlb_barrier_flags_t
flags)
int DLB_BarrierNamed (
dlb_barrier_t
* barrier)
int DLB_BarrierNamedAttach (
dlb_barrier_t
* barrier)
int DLB_BarrierNamedDetach (
dlb_barrier_t
* barrier)
int DLB_SetVariable (const char * variable, const char * value)
int DLB_GetVariable (const char * variable, char * value)
int DLB_PrintVariables (int print_extended)
int DLB_PrintShmem (int num_columns,
dlb_printshmem_flags_t
print_flags)
const char* DLB_Strerror (int errnum)
int DLB_SetObserverRole (bool thread_is_observer)
int DLB_AutoSizerStart (void)
int DLB_AutoSizerEnd (void)
Author
dlb_drom.h
NAME
SYNOPSIS
Functions
Function Documentation
int DLB_DROM_Attach (void)
int DLB_DROM_Detach (void)
int DLB_DROM_GetNumCpus (int * ncpus)
int DLB_DROM_GetPidList (int * pidlist, int * nelems, int max_len)
int DLB_DROM_GetProcessMask (int pid,
dlb_cpu_set_t
mask,
dlb_drom_flags_t
flags)
int DLB_DROM_SetProcessMask (int pid,
const_dlb_cpu_set_t
mask,
dlb_drom_flags_t
flags)
int DLB_DROM_PreInit (int pid,
const_dlb_cpu_set_t
mask,
dlb_drom_flags_t
flags, char *** next_environ)
int DLB_DROM_PostFinalize (int pid,
dlb_drom_flags_t
flags)
int DLB_DROM_RecoverStolenCpus (int pid)
Author
dlb_errors.h
NAME
SYNOPSIS
Enumerations
Enumeration Type Documentation
enum
DLBErrorCodes
Author
dlb_sp.h
NAME
SYNOPSIS
Functions
Function Documentation
dlb_handler_t
DLB_Init_sp (int ncpus,
const_dlb_cpu_set_t
mask, const char * dlb_args)
int DLB_Finalize_sp (
dlb_handler_t
handler)
int DLB_Enable_sp (
dlb_handler_t
handler)
int DLB_Disable_sp (
dlb_handler_t
handler)
int DLB_SetMaxParallelism_sp (
dlb_handler_t
handler, int max)
int DLB_UnsetMaxParallelism_sp (
dlb_handler_t
handler)
int DLB_CallbackSet_sp (
dlb_handler_t
handler,
dlb_callbacks_t
which,
dlb_callback_t
callback, void * arg)
int DLB_CallbackGet_sp (
dlb_handler_t
handler,
dlb_callbacks_t
which,
dlb_callback_t
* callback, void ** arg)
int DLB_Lend_sp (
dlb_handler_t
handler)
int DLB_LendCpu_sp (
dlb_handler_t
handler, int cpuid)
int DLB_LendCpus_sp (
dlb_handler_t
handler, int ncpus)
int DLB_LendCpuMask_sp (
dlb_handler_t
handler,
const_dlb_cpu_set_t
mask)
int DLB_Reclaim_sp (
dlb_handler_t
handler)
int DLB_ReclaimCpu_sp (
dlb_handler_t
handler, int cpuid)
int DLB_ReclaimCpus_sp (
dlb_handler_t
handler, int ncpus)
int DLB_ReclaimCpuMask_sp (
dlb_handler_t
handler,
const_dlb_cpu_set_t
mask)
int DLB_AcquireCpu_sp (
dlb_handler_t
handler, int cpuid)
int DLB_AcquireCpus_sp (
dlb_handler_t
handler, int ncpus)
int DLB_AcquireCpuMask_sp (
dlb_handler_t
handler,
const_dlb_cpu_set_t
mask)
int DLB_AcquireCpusInMask_sp (
dlb_handler_t
handler, int ncpus,
const_dlb_cpu_set_t
mask)
int DLB_Borrow_sp (
dlb_handler_t
handler)
int DLB_BorrowCpu_sp (
dlb_handler_t
handler, int cpuid)
int DLB_BorrowCpus_sp (
dlb_handler_t
handler, int ncpus)
int DLB_BorrowCpuMask_sp (
dlb_handler_t
handler,
const_dlb_cpu_set_t
mask)
int DLB_BorrowCpusInMask_sp (
dlb_handler_t
handler, int ncpus,
const_dlb_cpu_set_t
mask)
int DLB_Return_sp (
dlb_handler_t
handler)
int DLB_ReturnCpu_sp (
dlb_handler_t
handler, int cpuid)
int DLB_ReturnCpuMask_sp (
dlb_handler_t
handler,
const_dlb_cpu_set_t
mask)
int DLB_PollDROM_sp (
dlb_handler_t
handler, int * ncpus,
dlb_cpu_set_t
mask)
int DLB_PollDROM_Update_sp (
dlb_handler_t
handler)
int DLB_CheckCpuAvailability_sp (
dlb_handler_t
handler, int cpuid)
int DLB_SetVariable_sp (
dlb_handler_t
handler, const char * variable, const char * value)
int DLB_GetVariable_sp (
dlb_handler_t
handler, const char * variable, char * value)
int DLB_PrintVariables_sp (
dlb_handler_t
handler, int print_extended)
Author
dlb_talp.h
NAME
SYNOPSIS
Data Structures
Macros
Enumerations
Functions
Macro Definition Documentation
#define DLB_MPI_REGION NULL
Enumeration Type Documentation
anonymous enum
Function Documentation
int DLB_TALP_Attach (void)
int DLB_TALP_Detach (void)
int DLB_TALP_GetNumCPUs (int * ncpus)
int DLB_TALP_GetPidList (int * pidlist, int * nelems, int max_len)
int DLB_TALP_GetTimes (int pid, double * mpi_time, double * useful_time)
int DLB_TALP_GetNodeTimes (const char * name,
dlb_node_times_t
* node_times_list, int * nelems, int max_len)
int DLB_TALP_QueryPOPNodeMetrics (const char * name,
dlb_node_metrics_t
* node_metrics)
const
dlb_monitor_t
* DLB_MonitoringRegionGetMPIRegion (void)
dlb_monitor_t
* DLB_MonitoringRegionRegister (const char * name)
int DLB_MonitoringRegionReset (
dlb_monitor_t
* handle)
int DLB_MonitoringRegionStart (
dlb_monitor_t
* handle)
int DLB_MonitoringRegionStop (
dlb_monitor_t
* handle)
int DLB_MonitoringRegionReport (const
dlb_monitor_t
* handle)
int DLB_MonitoringRegionsUpdate (void)
int DLB_TALP_CollectPOPMetrics (
dlb_monitor_t
* monitor,
dlb_pop_metrics_t
* pop_metrics)
int DLB_TALP_CollectPOPNodeMetrics (
dlb_monitor_t
* monitor,
dlb_node_metrics_t
* node_metrics)
int DLB_TALP_CollectNodeMetrics (
dlb_monitor_t
* monitor,
dlb_node_metrics_t
* node_metrics)
Author
dlb_types.h
NAME
SYNOPSIS
Typedefs
Enumerations
Typedef Documentation
typedef struct
dlb_barrier_t
dlb_barrier_t
typedef void*
dlb_handler_t
typedef void*
dlb_cpu_set_t
typedef const void*
const_dlb_cpu_set_t
typedef void(* dlb_callback_t) (void)
typedef void(* dlb_callback_set_num_threads_t) (int num_threads, void *arg)
typedef void(* dlb_callback_set_active_mask_t) (
const_dlb_cpu_set_t
mask, void *arg)
typedef void(* dlb_callback_set_process_mask_t) (
const_dlb_cpu_set_t
mask, void *arg)
typedef void(* dlb_callback_add_active_mask_t) (
const_dlb_cpu_set_t
mask, void *arg)
typedef void(* dlb_callback_add_process_mask_t) (
const_dlb_cpu_set_t
mask, void *arg)
typedef void(* dlb_callback_enable_cpu_t) (int cpuid, void *arg)
typedef void(* dlb_callback_disable_cpu_t) (int cpuid, void *arg)
Enumeration Type Documentation
enum
dlb_drom_flags_t
enum
dlb_printshmem_flags_t
enum
dlb_barrier_flags_t
enum
dlb_callbacks_t
Author
DLB
Index
Edit on GitHub
Index
B
|
C
|
D
|
L
|
M
|
T
B
Basic set
built-in function
DLB_TALP_QueryPOPNodeMetrics()
C
const_dlb_cpu_set_t
D
dlb_callback_t
dlb_callbacks_t
dlb_cpu_set_t
dlb_drom_flags_t
dlb_monitor_t
dlb_node_metrics_t
dlb_pop_metrics_t
dlb_printshmem_flags_t
DLB_TALP_QueryPOPNodeMetrics()
built-in function
DROM: Dynamic Resource Ownership Manager
L
LeWI: Lend When Idle
M
MPI API
T
TALP: Tracking Application Live Performance