Dynamic Load Balancing Library
DLB is a dynamic library designed to speed up HPC hybrid applications (i.e., two levels of parallelism) by improving the load balance of the outer level of parallelism (e.g., MPI) by dynamically redistributing the computational resources at the inner level of parallelism (e.g., OpenMP). at run time.
This dynamism allows DLB to react to different sources of imbalance: Algorithm, data, hardware architecture and resource availability among others.
Lend When Idle
LeWI (Lend When Idle) is the algorithm used to redistribute the computational resources that are not being used from one process to another process inside the same shared memory node in order to speed up its execution.
Dynamic Resource Ownership Manager
DROM (Dynamic Resource Ownership Manager) is the algorithm used to manage the CPU affinity of a process running a shared memory programming model (e.g., OpenMP).
- A supported platform running Linux (i386, x86-64, ARM, PowerPC or IA64)
- GNU C/C++ compiler versions 4.4 or higher
- Python 2.4 or higher
Download DLB code
- From a git repository
Clone DLB repository
git clone https://github.com/bsc-pm/dlb.git
From our internal GitLab repository (BSC users only):
git clone https://pm.bsc.es/gitlab/dlb/dlb.git
cd dlb ./bootstrap
- From a distributed tarball
- From a git repository
configure. Optionally, check the configure flags by running
./configure -hto see detailed information about some features.
./configure --prefix=<DLB_PREFIX> [<configure-flags>]
Build ans install
make make install
Optionally, add the installed bin directory to your
For more information about the autotools installation process, please refer to INSTALL
Simply link or preload a binary with the DLB shared library
configure DLB using the environment variable
# Link application mpicc -o myapp myapp.c -L<DLB_PREFIX>/lib -ldlb -Wl,-rpath,<DLB_PREFIX>/lib # Launch two processes sharing resources export DLB_ARGS="--lewi" mpirun -n 2 ./myapp
# Launch an application preloading DLB export OMP_NUM_THREADS=4 export LD_PRELOAD=<DLB_PREFIX>/lib/libdlb.so taskset -c 0-3 ./myapp & # Reduce CPU binding to [1,3] and threads to 2 myapp_pid=$! dlb_taskset -p $myapp_pid -c 1,3
Please refer to our DLB User Guide for a more complete documentation.
If you want to cite DLB, you can use the following publications:
Hints to improve automatic load balancing with LeWI for hybrid applications at Journal of Parallel and Distributed Computing 2014. (ScienceDirect) (bibtex) (pdf)
LeWI: A Runtime Balancing Algorithm for Nested Parallelism at International Conference in Parallel Processing 2009, ICPP09. (IEEE Xplore) (bibtex) (pdf)
For questions, suggestions and bug reports, you can contact us via e-mail at firstname.lastname@example.org.