MPI all-2-all transposition
This module ED_HAMILTONIAN_NORMAL_COMMON
defines several
variables shared across the Hamiltonian setup in the ed_mode
= normal
mode. It also contains the procedure vector_transpose_mpi()
implementing the MPI Allv-2-Allv
parallel transposition of a matrix. This is the key function of the massively parallel execution of matrix-vector products discussed in j.cpc.2021.108261.
Description
Global variables related to sector Hamiltonian construction. It contains the vector_transpose_mpi()
implementing the MPI Allv-2-Allv
parallel matrix transposition.
Quick access
- Routines:
Used modules
ed_input_vars
: User-accessible input variablesed_vars_global
: Global variable accessible throughout the codeed_bath
: Routines for bath creation and manipulationed_aux_funx
: Assortment of auxiliary procedures required throughout the codeed_sector
: Routines for Fock space sectors creation and manipulationed_setup
: Routines for solver environment initialization and finalization
External modules
Subroutines and functions
- subroutine ed_hamiltonian_normal_common/vector_transpose_mpi(nrow, qcol, a, ncol, qrow, b)
Performs the parallel transposition of the vector
a
, as a matrix of dimensions [nrow
,qcol
], using MPIAlltoAllV
procedure, which transfers data such that the j-block, sent from the process i, is received by process j and placed as block i. This parallel transposition involves the minimum amount of data transfer necessary to execute the matrix-vector product, removing the communicational congestion and unlocking optimal parallel scaling.See j.cpc.2021.108261 for a detailed description of the algorithm implemented in this procedure.
- Options:
nrow [integer] – Global number of rows
qcol [integer] – Local number of columns on each thread
ncol [integer] – Global number of columns
qrow [integer] – Local number of rows on each thread
- Parameters:
a (nrow, qcol) [real] – Input vector to be transposed
b (ncol, qrow) [real] – Output vector \(b = v^T\)