ALL Tensor-Product method¶
A Load-Balancing Library (ALL) library aims to provide an easy and portable way to include dynamic domain-based load balancing into particle based simulation codes. The library is developed in the Simulation Laboratory Molecular Systems of the Juelich Supercomputing Centre at Forschungszentrum Juelich.
Purpose of Module¶
This module provides an additional method to the ALL library , up-to-date descriptions of the methods in the library can be found in the ALL README file.
For the Tensor-Product method, the work on all processes (subdomains) is reduced over the cartesian planes in the systems. This work is then equalized by adjusting the borders of the cartesian planes.
Background Information¶
See ALL (A Load-balancing Library) for details.
ALL: Building and Testing¶
ALL is a C++ header only library using template programming, strictly speaking there is no need to install the library, you simply include the header files in your application. In order to provide examples, ALL uses the CMake build system, specific build and installation requirements can be found in the ALL README file. If you wish to use/test the topological mesh scheme, you will need an MPI-enabled installation of the VTK package.
To build ALL, begin in the root directory of the package and use
export ALL_INSTALLATION=/path/to/my/loadbalancing/install
mkdir build
cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$ALL_INSTALLATION -DCM_ALL_VTK_OUTPUT=ON -DCM_ALL_VORONOI=ON
make -j
make install
cd ..
This will create an installation of ALL in the path pointed to by
ALL_INSTALLATION
. ALL_test
(in the bin
folder) is the binary that
performs the tests. If you omit the option -DCM_ALL_VTK_OUTPUT=ON
you will
not require the VTK dependency (but cannot use the unstructured mesh method).
In the example/jube/input
subdirectory there are 3 test data sets available,
namely:
- Simple Wye-shape biosystem;
- Heterogeneous polymer melt and
- A rotated version of the Wye-shaped biosystem.
These data sets are in raw ascii format and need to be translated into a format
that can be consumed by ALL_test
. A utility ASCII2MPIBIN
is provided to
do the conversion, with the command line options:
ASCII2MPIBIN <in_file (ASCII)> <out_file (binary)> <n_x> <n_y> <n_z>
where n_x
, n_y
, n_z
are the number of (MPI) processes (in the X, Y
and Z directions) that will be used.
ALL_test
takes a number of options,
ALL_test <Method> <Number of iterations> <gamma> <weighted> <input file> <system size: x, y, z> <domain layout: x, y, z>
Method
(integer) is the load-balancing scheme to use of which there are 5 options:
0 : Tensor
1 : Staggered
2 : Unstructured
3 : Voronoi
4 : Histogram
, gamma
(double) is a relaxation which controls the convergence of the
load-balancing methods, weighted
(boolean) indicates whether points should
be assigned a weight. The system size and domain layout are provided in the
output of the call to ASCII2MPIBIN
.
An example execution using the polymer melt data set on 125 processors looks like
ASCII2MPIBIN globalBlockCoordsPolymer.txt input.bin 5 5 5
mpirun -n 125 ALL_test 0 50 8.0 0 input.bin 80 80 450 5 5 5
Source Code¶
The implementation of the Tensor-Product method in ALL can be found in ALL_Tensor.hpp.
The source code to the ALL library is available as a git repository at https://gitlab.version.fz-juelich.de/SLMS/loadbalancing . To obtain a copy of the repository you can use
git clone https://gitlab.version.fz-juelich.de/SLMS/loadbalancing.git
However, please note that the source code is currently under embargo until an associated paper is published, if you would like to be obtain a copy of the code, please contact Prof. Godehard Sutmann at g.sutmann@fz-juelich.de
.