A module to manage the process grid.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(ProcessGrid_t), | public, | TARGET | :: | global_grid | The default process grid. |
Setup the default process grid.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | world_comm_ | A communicator that every process in the grid is a part of. |
||
integer, | intent(in) | :: | process_rows_ | The number of grid rows. |
||
integer, | intent(in) | :: | process_columns_ | The number of grid columns. |
||
integer, | intent(in) | :: | process_slices_ | The number of grid slices. |
||
logical, | intent(in), | optional | :: | be_verbose_in | Set true to print process grid info. |
Setup a process grid specifying only the slices
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
integer, | intent(in) | :: | world_comm_ | A communicator that every process in the grid is a part of. |
||
integer, | intent(in), | optional | :: | process_slices_in | The number of grid slices. |
|
logical, | intent(in), | optional | :: | be_verbose_in | Set true to print process grid info. |
Construct a process grid.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(inout) | :: | grid | The grid to construct |
||
integer, | intent(in) | :: | world_comm_ | A communicator that every process in the grid is a part of. |
||
integer, | intent(in) | :: | process_rows_ | The number of grid rows. |
||
integer, | intent(in) | :: | process_columns_ | The number of grid columns. |
||
integer, | intent(in) | :: | process_slices_ | The number of grid slices. |
Setup a process grid specifying only the slices
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(inout) | :: | grid | The grid to construct |
||
integer, | intent(in) | :: | world_comm_ | A communicator that every process in the grid is a part of. |
||
integer, | intent(in), | optional | :: | process_slices_in | The number of grid slices. |
A datatype which stores a process grid and all its communicators.
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer, | public | :: | total_processors | total processors in the grid. |
|||
integer, | public | :: | num_process_rows | number of rows in the grid. |
|||
integer, | public | :: | num_process_columns | number of columns in the grid. |
|||
integer, | public | :: | num_process_slices | number of 2D slices in the grid. |
|||
integer, | public | :: | slice_size | the size of a 2D slice. |
|||
integer, | public | :: | my_slice | which slice is the current process in. |
|||
integer, | public | :: | my_row | which row is the current process in. |
|||
integer, | public | :: | my_column | which column is the current process in. |
|||
integer, | public | :: | global_rank | current process rank amongst processes. |
|||
integer, | public | :: | within_slice_rank | rank for within slice communication. |
|||
integer, | public | :: | between_slice_rank | rank for between slice communication. |
|||
integer, | public | :: | column_rank | rank for within column communication. |
|||
integer, | public | :: | row_rank | rank for within row communication. |
|||
integer, | public | :: | global_comm | communicator with every other process. |
|||
integer, | public | :: | row_comm | communicator within a row. |
|||
integer, | public | :: | column_comm | communicator within a column. |
|||
integer, | public | :: | within_slice_comm | communicator within a slice. |
|||
integer, | public | :: | between_slice_comm | communicator between slices. |
|||
integer, | public | :: | grid_error | stores errors from MPI calls. |
|||
integer, | public | :: | RootID | = | 0 | Which rank is root? |
|
integer, | public | :: | block_multiplier | Block scaling factor. |
|||
integer, | public | :: | number_of_blocks_columns | number of column blocks. |
|||
integer, | public | :: | number_of_blocks_rows | number of row blocks. |
|||
integer, | public, | DIMENSION(:), ALLOCATABLE | :: | blocked_row_comm | blocked communicator within a row. |
||
integer, | public, | DIMENSION(:), ALLOCATABLE | :: | blocked_column_comm | blocked communicator within a column. |
||
integer, | public, | DIMENSION(:,:), ALLOCATABLE | :: | blocked_within_slice_comm | blocked communicator within a slice. |
||
integer, | public, | DIMENSION(:,:), ALLOCATABLE | :: | blocked_between_slice_comm | blocked communicator between slices. |
||
integer, | public | :: | omp_max_threads | The maximum number of openmp threads. |
Check if the current process is the root process.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(in), | optional | :: | grid_in | The process grid. |
True if the current process is root.
Get the slice of the current process.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(in), | optional | :: | grid | The process grid. |
Slice number of the current process.
Get the column of the current process.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(in), | optional | :: | grid | The process grid. |
The column number of the current process.
Get the row of the current process.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(in), | optional | :: | grid | The process grid. |
The row number of the current process.
Copy a process grid. Note that this makes a complete and independent copy of the process grid. Which of course means that whatever is currently stored in new_grid will be destroyed, so do not leave any matrices pointing to it.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(in) | :: | old_grid | The grid to copy. |
||
type(ProcessGrid_t), | intent(inout) | :: | new_grid | New_grid = old_grid |
Destruct a process grid. Be careful about doing this. Matrices have pointers to process grids. If you destruct a process grid without destructing the matrices pointing to it, they will become unusable.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(inout), | optional | :: | grid_in | The grid to destruct. If none specified this destroys the global grid. |
Given a process grid, this splits it into two grids of even size
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(ProcessGrid_t), | intent(inout) | :: | old_grid | The old grid to split |
||
type(ProcessGrid_t), | intent(inout) | :: | new_grid | The new grid that we are creating |
||
integer, | intent(out) | :: | my_color | A color value indicating which set this process was split into |
||
logical, | intent(out) | :: | split_slice | True if we were able to split along slices. |
||
integer, | intent(out) | :: | between_grid_comm | A communicator for sending messages between groups. |