MPI two-sided data transfers (MPI-2S)

This algorithm was implemented in CASINO by Randolf Hood of LLNL in 2008. We have presented its main features in this report because it was used in the performance tests. The algorithm uses two-sided MPI calls for BC transfers between tasks, its main steps are as follow:

  1. The total number of tasks of a given computation is split in groups of size $ n_g$.
  2. The BC are distributed among each group of tasks in the following manner: each task has the full spatial grid and $ N_b/n_g$ orbitals picked with a periodic rule.
  3. When a task needs to compute the orbitals' values for a given electron it broadcasts the electron's coordinates to its group members and waits for them to return the orbitals' values whose BC are stored on each of them.

Because each task evolves its configurations randomly a synchronisation mechanism must be provided. In the current implementation it consists of additional 'sentinel calls' in the inner loop of the configuration computation that answer the requests of orbital computations from the associated tasks.