![]() |
(git:fd1133a)
|
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.