(git:db3ef62)
dbt_tas_split Module Reference

methods to split tall-and-skinny matrices along longest dimension. Basically, we are splitting process grid and each subgrid holds its own DBM matrix. More...

Functions/Subroutines

subroutine, public dbt_tas_create_split_rows_or_cols (split_info, mp_comm, ngroup, igroup, split_rowcol, own_comm)
 split mpi grid by rows or columns More...
 
type(mp_cart_type) function, public dbt_tas_mp_comm (mp_comm, split_rowcol, nsplit)
 Create default cartesian process grid that is consistent with default split heuristic of dbt_tas_create_split. More...
 
integer function, dimension(2), public dbt_tas_mp_dims (numproc, split_rowcol, nsplit)
 Get optimal process grid dimensions consistent with dbt_tas_create_split. More...
 
subroutine, public dbt_tas_create_split (split_info, mp_comm, split_rowcol, nsplit, own_comm, opt_nsplit)
 Split Cartesian process grid using a default split heuristic. More...
 
logical function, public accept_pgrid_dims (dims, relative)
 Whether to accept proposed process grid dimensions (based on ratio of dimensions) More...
 
subroutine, public dbt_tas_get_split_info (info, mp_comm, nsplit, igroup, mp_comm_group, split_rowcol, pgrid_offset)
 Get info on split. More...
 
subroutine, public dbt_tas_release_info (split_info)
 ... More...
 
subroutine, public dbt_tas_info_hold (split_info)
 ... More...
 
subroutine, public world_to_group_proc_map (iproc, pdims, split_rowcol, pgrid_split_size, igroup, pdims_group, iproc_group)
 map global process info to group More...
 
subroutine, public group_to_world_proc_map (iproc, pdims, split_rowcol, pgrid_split_size, igroup, iproc_group)
 map local process info to global info More...
 
subroutine, public dbt_index_local_to_global (info, dist, row_group, column_group, row, column)
 map group local block index to global matrix index More...
 
subroutine, public dbt_index_global_to_local (info, dist, row, column, row_group, column_group)
 map global block index to group local index More...
 
subroutine, public group_to_mrowcol (info, rowcol_dist, igroup, rowcols)
 maps a process subgroup to matrix rows/columns More...
 
subroutine, public dbt_tas_set_strict_split (info)
 freeze current split factor such that it is never changed during multiplication More...
 

Variables

integer, parameter, public rowsplit = 1
 
integer, parameter, public colsplit = 2
 
real(dp), parameter, public default_pdims_accept_ratio = 1.2_dp
 
real(dp), parameter, public default_nsplit_accept_ratio = 3.0_dp
 

Detailed Description

methods to split tall-and-skinny matrices along longest dimension. Basically, we are splitting process grid and each subgrid holds its own DBM matrix.

Author
Patrick Seewald

Function/Subroutine Documentation

◆ dbt_tas_create_split_rows_or_cols()

subroutine, public dbt_tas_split::dbt_tas_create_split_rows_or_cols ( type(dbt_tas_split_info), intent(out)  split_info,
type(mp_cart_type), intent(in)  mp_comm,
integer, intent(inout)  ngroup,
integer, intent(in)  igroup,
integer, intent(in)  split_rowcol,
logical, intent(in), optional  own_comm 
)

split mpi grid by rows or columns

Parameters
split_info...
mp_commglobal mpi communicator with a 2d cartesian grid
ngroupnumber of groups
igroupmy group ID
split_rowcolsplit rows or columns
own_commWhether split_info should own communicator
Author
Patrick Seewald

Definition at line 71 of file dbt_tas_split.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dbt_tas_mp_comm()

type(mp_cart_type) function, public dbt_tas_split::dbt_tas_mp_comm ( class(mp_comm_type), intent(in)  mp_comm,
integer, intent(in)  split_rowcol,
integer, intent(in)  nsplit 
)

Create default cartesian process grid that is consistent with default split heuristic of dbt_tas_create_split.

Parameters
mp_comm...
split_rowcol...
nsplit...
Returns
new communicator
Author
Patrick Seewald

Definition at line 154 of file dbt_tas_split.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dbt_tas_mp_dims()

integer function, dimension(2), public dbt_tas_split::dbt_tas_mp_dims ( integer, intent(in)  numproc,
integer, intent(in)  split_rowcol,
integer, intent(in)  nsplit 
)

Get optimal process grid dimensions consistent with dbt_tas_create_split.

Parameters
numproc...
split_rowcol...
nsplit...
Returns
...
Author
Patrick Seewald

Definition at line 183 of file dbt_tas_split.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dbt_tas_create_split()

subroutine, public dbt_tas_split::dbt_tas_create_split ( type(dbt_tas_split_info), intent(out)  split_info,
type(mp_cart_type), intent(in)  mp_comm,
integer, intent(in)  split_rowcol,
integer, intent(in)  nsplit,
logical, intent(in), optional  own_comm,
logical, intent(in), optional  opt_nsplit 
)

Split Cartesian process grid using a default split heuristic.

Parameters
split_infoobject storing all data corresponding to split, submatrices and parallelization
mp_commMPI communicator with associated cartesian grid
split_rowcolsplit rows or columns
nsplitdesired split factor, set to 0 if split factor of exactly 1 is required
own_commwhether split_info should own communicator
opt_nsplitwhether nsplit should be optimized to process grid
Author
Patrick Seewald

Definition at line 332 of file dbt_tas_split.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ accept_pgrid_dims()

logical function, public dbt_tas_split::accept_pgrid_dims ( integer, dimension(2), intent(in)  dims,
logical, intent(in)  relative 
)

Whether to accept proposed process grid dimensions (based on ratio of dimensions)

Parameters
dims...
relative...
Returns
...
Author
Patrick Seewald

Definition at line 399 of file dbt_tas_split.F.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dbt_tas_get_split_info()

subroutine, public dbt_tas_split::dbt_tas_get_split_info ( type(dbt_tas_split_info), intent(in)  info,
type(mp_cart_type), intent(out), optional  mp_comm,
integer, intent(out), optional  nsplit,
integer, intent(out), optional  igroup,
type(mp_cart_type), intent(out), optional  mp_comm_group,
integer, intent(out), optional  split_rowcol,
integer, dimension(2), intent(out), optional  pgrid_offset 
)

Get info on split.

Parameters
info...
mp_commcommunicator (global process grid)
nsplitsplit factor
igroupwhich group do I belong to
mp_comm_groupsubgroup communicator (group-local process grid)
split_rowcolsplit rows or columns
pgrid_offsetgroup-local offset in process grid
Author
Patrick Seewald

Definition at line 426 of file dbt_tas_split.F.

Here is the caller graph for this function:

◆ dbt_tas_release_info()

subroutine, public dbt_tas_split::dbt_tas_release_info ( type(dbt_tas_split_info), intent(inout)  split_info)

...

Parameters
split_info...
Author
Patrick Seewald

Definition at line 456 of file dbt_tas_split.F.

Here is the caller graph for this function:

◆ dbt_tas_info_hold()

subroutine, public dbt_tas_split::dbt_tas_info_hold ( type(dbt_tas_split_info), intent(in)  split_info)

...

Parameters
split_info...
Author
Patrick Seewald

Definition at line 491 of file dbt_tas_split.F.

Here is the caller graph for this function:

◆ world_to_group_proc_map()

subroutine, public dbt_tas_split::world_to_group_proc_map ( integer, intent(in)  iproc,
integer, dimension(2), intent(in)  pdims,
integer, intent(in)  split_rowcol,
integer, intent(in)  pgrid_split_size,
integer, intent(out)  igroup,
integer, dimension(2), intent(out), optional  pdims_group,
integer, intent(out), optional  iproc_group 
)

map global process info to group

Parameters
iprocglobal process ID
pdimsglobal process dimensions
split_rowcolsplit rows or column
pgrid_split_sizehow many process rows/cols per group
igroupgroup ID
pdims_grouplocal process grid dimensions
iproc_groupgroup local process ID
Author
Patrick Seewald

Definition at line 514 of file dbt_tas_split.F.

Here is the caller graph for this function:

◆ group_to_world_proc_map()

subroutine, public dbt_tas_split::group_to_world_proc_map ( integer, intent(out)  iproc,
integer, dimension(2), intent(in)  pdims,
integer, intent(in)  split_rowcol,
integer, intent(in)  pgrid_split_size,
integer, intent(in)  igroup,
integer, intent(in)  iproc_group 
)

map local process info to global info

Parameters
iprocglobal process id
pdimsglobal process grid dimensions
split_rowcolsplit rows or colum
pgrid_split_sizehow many process rows/cols per group
igroupgroup ID
iproc_grouplocal process ID
Author
Patrick Seewald

Definition at line 554 of file dbt_tas_split.F.

◆ dbt_index_local_to_global()

subroutine, public dbt_tas_split::dbt_index_local_to_global ( type(dbt_tas_split_info), intent(in)  info,
type(dbt_tas_distribution_type), intent(in)  dist,
integer, intent(in), optional  row_group,
integer, intent(in), optional  column_group,
integer(kind=int_8), intent(out), optional  row,
integer(kind=int_8), intent(out), optional  column 
)

map group local block index to global matrix index

Parameters
info...
dist...
row_groupgroup local row block index
column_groupgroup local column block index
rowglobal block row
columnglobal block column
Author
Patrick Seewald

Definition at line 591 of file dbt_tas_split.F.

◆ dbt_index_global_to_local()

subroutine, public dbt_tas_split::dbt_index_global_to_local ( type(dbt_tas_split_info), intent(in)  info,
type(dbt_tas_distribution_type), intent(in)  dist,
integer(kind=int_8), intent(in), optional  row,
integer(kind=int_8), intent(in), optional  column,
integer, intent(out), optional  row_group,
integer, intent(out), optional  column_group 
)

map global block index to group local index

Parameters
info...
dist...
row...
column...
row_group...
column_group...
Author
Patrick Seewald

Definition at line 621 of file dbt_tas_split.F.

◆ group_to_mrowcol()

subroutine, public dbt_tas_split::group_to_mrowcol ( type(dbt_tas_split_info), intent(in)  info,
class(dbt_tas_distribution), intent(in)  rowcol_dist,
integer, intent(in)  igroup,
integer(kind=int_8), dimension(:), intent(out), allocatable  rowcols 
)

maps a process subgroup to matrix rows/columns

Parameters
info...
rowcol_dist...
igroupgroup ID
rowcolsrows/ columns on this group
Author
Patrick Seewald

Definition at line 677 of file dbt_tas_split.F.

◆ dbt_tas_set_strict_split()

subroutine, public dbt_tas_split::dbt_tas_set_strict_split ( type(dbt_tas_split_info), intent(inout)  info)

freeze current split factor such that it is never changed during multiplication

Parameters
info...
Author
Patrick Seewald

Definition at line 712 of file dbt_tas_split.F.

Here is the caller graph for this function:

Variable Documentation

◆ rowsplit

integer, parameter, public dbt_tas_split::rowsplit = 1

Definition at line 50 of file dbt_tas_split.F.

◆ colsplit

integer, parameter, public dbt_tas_split::colsplit = 2

Definition at line 50 of file dbt_tas_split.F.

◆ default_pdims_accept_ratio

real(dp), parameter, public dbt_tas_split::default_pdims_accept_ratio = 1.2_dp

Definition at line 51 of file dbt_tas_split.F.

◆ default_nsplit_accept_ratio

real(dp), parameter, public dbt_tas_split::default_nsplit_accept_ratio = 3.0_dp

Definition at line 52 of file dbt_tas_split.F.