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.

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
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:

  1. Simple Wye-shape biosystem;
  2. Heterogeneous polymer melt and
  3. 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 . To obtain a copy of the repository you can use

git clone

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