![]() |
(git:b77b4be)
|
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 |
methods to split tall-and-skinny matrices along longest dimension. Basically, we are splitting process grid and each subgrid holds its own DBM matrix.
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
split_info | ... |
mp_comm | global mpi communicator with a 2d cartesian grid |
ngroup | number of groups |
igroup | my group ID |
split_rowcol | split rows or columns |
own_comm | Whether split_info should own communicator |
Definition at line 71 of file dbt_tas_split.F.
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.
mp_comm | ... |
split_rowcol | ... |
nsplit | ... |
Definition at line 154 of file dbt_tas_split.F.
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.
numproc | ... |
split_rowcol | ... |
nsplit | ... |
Definition at line 183 of file dbt_tas_split.F.
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.
split_info | object storing all data corresponding to split, submatrices and parallelization |
mp_comm | MPI communicator with associated cartesian grid |
split_rowcol | split rows or columns |
nsplit | desired split factor, set to 0 if split factor of exactly 1 is required |
own_comm | whether split_info should own communicator |
opt_nsplit | whether nsplit should be optimized to process grid |
Definition at line 332 of file dbt_tas_split.F.
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)
dims | ... |
relative | ... |
Definition at line 399 of file dbt_tas_split.F.
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.
info | ... |
mp_comm | communicator (global process grid) |
nsplit | split factor |
igroup | which group do I belong to |
mp_comm_group | subgroup communicator (group-local process grid) |
split_rowcol | split rows or columns |
pgrid_offset | group-local offset in process grid |
Definition at line 426 of file dbt_tas_split.F.
subroutine, public dbt_tas_split::dbt_tas_release_info | ( | type(dbt_tas_split_info), intent(inout) | split_info | ) |
...
split_info | ... |
Definition at line 456 of file dbt_tas_split.F.
subroutine, public dbt_tas_split::dbt_tas_info_hold | ( | type(dbt_tas_split_info), intent(in) | split_info | ) |
...
split_info | ... |
Definition at line 491 of file dbt_tas_split.F.
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
iproc | global process ID |
pdims | global process dimensions |
split_rowcol | split rows or column |
pgrid_split_size | how many process rows/cols per group |
igroup | group ID |
pdims_group | local process grid dimensions |
iproc_group | group local process ID |
Definition at line 514 of file dbt_tas_split.F.
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
iproc | global process id |
pdims | global process grid dimensions |
split_rowcol | split rows or colum |
pgrid_split_size | how many process rows/cols per group |
igroup | group ID |
iproc_group | local process ID |
Definition at line 554 of file dbt_tas_split.F.
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
info | ... |
dist | ... |
row_group | group local row block index |
column_group | group local column block index |
row | global block row |
column | global block column |
Definition at line 591 of file dbt_tas_split.F.
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
info | ... |
dist | ... |
row | ... |
column | ... |
row_group | ... |
column_group | ... |
Definition at line 621 of file dbt_tas_split.F.
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
info | ... |
rowcol_dist | ... |
igroup | group ID |
rowcols | rows/ columns on this group |
Definition at line 677 of file dbt_tas_split.F.
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
info | ... |
Definition at line 712 of file dbt_tas_split.F.
integer, parameter, public dbt_tas_split::rowsplit = 1 |
Definition at line 50 of file dbt_tas_split.F.
integer, parameter, public dbt_tas_split::colsplit = 2 |
Definition at line 50 of file dbt_tas_split.F.
real(dp), parameter, public dbt_tas_split::default_pdims_accept_ratio = 1.2_dp |
Definition at line 51 of file dbt_tas_split.F.
real(dp), parameter, public dbt_tas_split::default_nsplit_accept_ratio = 3.0_dp |
Definition at line 52 of file dbt_tas_split.F.