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:

vector_transpose_mpi()

Used modules

  • ed_input_vars: User-accessible input variables

  • ed_vars_global: Global variable accessible throughout the code

  • ed_bath: Routines for bath creation and manipulation

  • ed_aux_funx: Assortment of auxiliary procedures required throughout the code

  • ed_sector: Routines for Fock space sectors creation and manipulation

  • ed_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 MPI AlltoAllV 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\)