Reference documentation for deal.II version Git a5ed68a04a 20190922 06:50:58 0600

#include <deal.II/base/process_grid.h>
Public Member Functions  
ProcessGrid (MPI_Comm mpi_communicator, const unsigned int n_rows, const unsigned int n_columns)  
ProcessGrid (MPI_Comm mpi_communicator, const unsigned int n_rows_matrix, const unsigned int n_columns_matrix, const unsigned int row_block_size, const unsigned int column_block_size)  
~ProcessGrid ()  
unsigned int  get_process_grid_rows () const 
unsigned int  get_process_grid_columns () const 
int  get_this_process_row () const 
int  get_this_process_column () const 
template<typename NumberType >  
void  send_to_inactive (NumberType *value, const int count=1) const 
bool  is_process_active () const 
Private Member Functions  
ProcessGrid (MPI_Comm mpi_communicator, const std::pair< unsigned int, unsigned int > &grid_dimensions)  
Private Attributes  
MPI_Comm  mpi_communicator 
MPI_Comm  mpi_communicator_inactive_with_root 
int  blacs_context 
const unsigned int  this_mpi_process 
const unsigned int  n_mpi_processes 
int  n_process_rows 
int  n_process_columns 
int  this_process_row 
int  this_process_column 
bool  mpi_process_is_active 
A class taking care of setting up a twodimensional processor grid. For example an MPI communicator with 5 processes can be arranged into a 2x2 grid with the 5th processor being inactive:
A shared pointer to this class is provided to ScaLAPACKMatrix matrices to perform blockcyclic distribution.
Note that this class allows to setup a process grid which has fewer MPI cores than the total number of cores in the communicator.
Currently the only place where one would use a ProcessGrid object is in connection with a ScaLAPACKMatrix object.
Definition at line 63 of file process_grid.h.
Utilities::MPI::ProcessGrid::ProcessGrid  (  MPI_Comm  mpi_communicator, 
const unsigned int  n_rows,  
const unsigned int  n_columns  
) 
Constructor for a process grid with n_rows
and n_columns
for a given mpi_communicator
. The product of rows and columns should be less or equal to the total number of cores in the mpi_communicator
.
Definition at line 221 of file process_grid.cc.
Utilities::MPI::ProcessGrid::ProcessGrid  (  MPI_Comm  mpi_communicator, 
const unsigned int  n_rows_matrix,  
const unsigned int  n_columns_matrix,  
const unsigned int  row_block_size,  
const unsigned int  column_block_size  
) 
Constructor for a process grid for a given mpi_communicator
. In this case the process grid is heuristically chosen based on the dimensions and blockcyclic distribution of a target matrix provided in n_rows_matrix
, n_columns_matrix
, row_block_size
and column_block_size
.
The maximum number of MPI cores one can utilize is \(\min\{\frac{M}{MB}\frac{N}{NB}, Np\}\), where \(M,N\) are the matrix dimension and \(MB,NB\) are the block sizes and \(Np\) is the number of processes in the mpi_communicator
. This function then creates a 2D processor grid assuming the ratio between number of process row \(p\) and columns \(q\) to be equal the ratio between matrix dimensions \(M\) and \(N\).
For example, a square matrix \(640x640\) with the block size \(32\) and the mpi_communicator
with 11 cores will result in the \(3x3\) process grid.
Definition at line 206 of file process_grid.cc.
Utilities::MPI::ProcessGrid::~ProcessGrid  (  ) 
Destructor.
Definition at line 229 of file process_grid.cc.

private 
A private constructor which takes grid dimensions as an std::pair
.
Definition at line 103 of file process_grid.cc.
unsigned int Utilities::MPI::ProcessGrid::get_process_grid_rows  (  )  const 
Return the number of rows in the processes grid.
unsigned int Utilities::MPI::ProcessGrid::get_process_grid_columns  (  )  const 
Return the number of columns in the processes grid.
int Utilities::MPI::ProcessGrid::get_this_process_row  (  )  const 
Return row of this process in the process grid.
It's negative for inactive processes.
int Utilities::MPI::ProcessGrid::get_this_process_column  (  )  const 
Return column of this process in the process grid.
It's negative for inactive processes.
template void Utilities::MPI::ProcessGrid::send_to_inactive< int >  (  NumberType *  value, 
const int  count = 1 

)  const 
Send count
values stored consequently starting at value
from the process with rank zero to processes which are not in the process grid.
Definition at line 242 of file process_grid.cc.
bool Utilities::MPI::ProcessGrid::is_process_active  (  )  const 
Return true
if the process is active within the grid.

private 
An MPI communicator with all processes (active and inactive).
Definition at line 162 of file process_grid.h.

private 
An MPI communicator with inactive processes and the process with rank zero.
Definition at line 168 of file process_grid.h.

private 
BLACS context. This is equivalent to MPI communicators and is used by ScaLAPACK.
Definition at line 174 of file process_grid.h.

private 
Rank of this MPI process.
Definition at line 179 of file process_grid.h.

private 
Total number of MPI processes.
Definition at line 184 of file process_grid.h.

private 
Number of rows in the processes grid.
Definition at line 189 of file process_grid.h.

private 
Number of columns in the processes grid.
Definition at line 194 of file process_grid.h.

private 
Row of this process in the grid.
It's negative for inactive processes.
Definition at line 201 of file process_grid.h.

private 
Column of this process in the grid.
It's negative for inactive processes.
Definition at line 208 of file process_grid.h.

private 
A flag which is true for processes within the 2D process grid.
Definition at line 213 of file process_grid.h.