(git:591cf04)
Loading...
Searching...
No Matches
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...

Data Types

interface  dbt_tas_mp_comm

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
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.
integer function, dimension(2), public dbt_tas_mp_dims (numproc, split_rowcol, nsplit)
 Get optimal process grid dimensions consistent with dbt_tas_create_split.
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.
logical function, public accept_pgrid_dims (dims, relative)
 Whether to accept proposed process grid dimensions (based on ratio of dimensions).
subroutine, public dbt_tas_get_split_info (info, mp_comm, nsplit, igroup, mp_comm_group, split_rowcol, pgrid_offset)
 Get info on split.
subroutine, public dbt_tas_release_info (split_info)
 ...
subroutine, public dbt_tas_info_hold (split_info)
 ...
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
subroutine, public group_to_world_proc_map (iproc, pdims, split_rowcol, pgrid_split_size, igroup, iproc_group)
 map local process info to global info
subroutine, public dbt_index_local_to_global (info, dist, row_group, column_group, row, column)
 map group local block index to global matrix index
subroutine, public dbt_index_global_to_local (info, dist, row, column, row_group, column_group)
 map global block index to group local index
subroutine, public group_to_mrowcol (info, rowcol_dist, igroup, rowcols)
 maps a process subgroup to matrix rows/columns
subroutine, public dbt_tas_set_strict_split (info)
 freeze current split factor such that it is never changed during multiplication

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.

◆ 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.