This module describes transpose_handle_host class
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=MPI_ADDRESS_KIND), | private, | parameter | :: | LB | = | 0 |
Lower bound for all derived datatypes |
Transposition class
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(MPI_Comm), | private | :: | comm |
1d communicator |
|||
logical, | private | :: | is_even |
Is decomposition even |
|||
type(handle_t), | private | :: | send |
Handle to send data |
|||
type(handle_t), | private | :: | recv |
Handle to recieve data |
|||
type(MPI_Request), | private | :: | request |
Request for persistent communication |
|||
logical, | private | :: | is_request_created |
Is request created |
procedure, public, pass(self) :: create | ../../ Initializes class |
procedure, public, pass(self) :: execute | ../../ Performs MPI_Alltoall(w) |
procedure, public, pass(self) :: destroy | ../../ Destroys class |
procedure, private, pass(self) :: create_transpose_2d | ../../ Creates two-dimensional transposition datatypes |
procedure, private, pass(self) :: create_transpose_XY | ../../ Creates three-dimensional X –> Y, Y –> X transposition datatypes |
procedure, private, pass(self) :: create_transpose_YZ | ../../ Creates three-dimensional Y –> Z, Z –> Y transposition datatypes |
procedure, private, pass(self) :: create_transpose_XZ | ../../ Creates three-dimensional X –> Z datatype, only slab! |
procedure, private, pass(self) :: create_transpose_ZX | ../../ Creates three-dimensional Z –> X datatype, only slab! |
Transposition handle class
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(MPI_Datatype), | public, | allocatable | :: | dtypes(:) |
Datatypes buffer |
||
integer(kind=int32), | public, | allocatable | :: | counts(:) |
Number of datatypes (always equals 1) |
||
integer(kind=int32), | public, | allocatable | :: | displs(:) |
Displacements is bytes |
procedure, public, pass(self) :: create => create_handle | ../../ Creates transposition handle |
procedure, public, pass(self) :: destroy => destroy_handle | ../../ Destroys transposition handle |
Creates transposition handle
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(handle_t), | intent(inout) | :: | self |
Transposition handle |
||
integer(kind=int32), | intent(in) | :: | n |
Number of datatypes to be created |
Destroys transposition handle
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(handle_t), | intent(inout) | :: | self |
Transposition handle |
Creates transpose_handle_host
class
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
type(MPI_Comm), | intent(in) | :: | comm |
1d communicator |
||
class(pencil), | intent(in) | :: | send |
Information about send buffer |
||
class(pencil), | intent(in) | :: | recv |
Information about recv buffer |
||
type(MPI_Datatype), | intent(in) | :: | base_type |
Base MPI Datatype |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes needed to store single element |
||
integer(kind=int8), | intent(in) | :: | datatype_id |
Type of datatype to use |
Executes transposition
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
real(kind=real32), | intent(in) | :: | send(:) |
Incoming buffer |
||
real(kind=real32), | intent(inout) | :: | recv(:) |
Resulting buffer |
Destroys transpose_handle_host
class
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
Creates two-dimensional transposition datatypes
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
integer(kind=int32), | intent(in) | :: | n_neighbors |
Size of 1d comm |
||
integer(kind=int32), | intent(in) | :: | i |
Counter |
||
class(pencil), | intent(in) | :: | send |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | send_counts(:) |
Rank i is sending this counts |
||
class(pencil), | intent(in) | :: | recv |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | recv_counts(:) |
Rank i is recieving this counts |
||
integer(kind=int8), | intent(in) | :: | datatype_id |
Id of transpose plan to use |
||
type(MPI_Datatype), | intent(in) | :: | base_type |
Base MPI_Datatype |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes needed to store single element |
Creates three-dimensional X –> Y, Y –> X transposition datatypes
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
integer(kind=int32), | intent(in) | :: | n_neighbors |
Size of 1d comm |
||
integer(kind=int32), | intent(in) | :: | i |
Counter |
||
class(pencil), | intent(in) | :: | send |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | send_counts(:) |
Rank i is sending this counts |
||
class(pencil), | intent(in) | :: | recv |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | recv_counts(:) |
Rank i is recieving this counts |
||
integer(kind=int8), | intent(in) | :: | datatype_id |
Id of transpose plan to use |
||
type(MPI_Datatype), | intent(in) | :: | base_type |
Base MPI_Datatype |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes needed to store single element |
Creates three-dimensional Y –> Z, Z –> Y transposition datatypes
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
integer(kind=int32), | intent(in) | :: | n_neighbors |
Size of 1d comm |
||
integer(kind=int32), | intent(in) | :: | i |
Counter |
||
class(pencil), | intent(in) | :: | send |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | send_counts(:) |
Rank i is sending this counts |
||
class(pencil), | intent(in) | :: | recv |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | recv_counts(:) |
Rank i is recieving this counts |
||
integer(kind=int8), | intent(in) | :: | datatype_id |
Id of transpose plan to use |
||
type(MPI_Datatype), | intent(in) | :: | base_type |
Base MPI_Datatype |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes needed to store single element |
Creates three-dimensional X –> Z transposition datatypes Can only be used with 3D slab decomposition when slabs are distributed in Z direction
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
integer(kind=int32), | intent(in) | :: | n_neighbors |
Size of 1d comm |
||
integer(kind=int32), | intent(in) | :: | i |
Counter |
||
class(pencil), | intent(in) | :: | send |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | send_counts(:) |
Rank i is sending this counts |
||
class(pencil), | intent(in) | :: | recv |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | recv_counts(:) |
Rank i is recieving this counts |
||
integer(kind=int8), | intent(in) | :: | datatype_id |
Id of transpose plan to use |
||
type(MPI_Datatype), | intent(in) | :: | base_type |
Base MPI_Datatype |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes needed to store single element |
Creates three-dimensional Z –> X transposition datatypes Can only be used with 3D slab decomposition when slabs are distributed in Z direction
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(transpose_handle_host), | intent(inout) | :: | self |
Transposition class |
||
integer(kind=int32), | intent(in) | :: | n_neighbors |
Size of 1d comm |
||
integer(kind=int32), | intent(in) | :: | i |
Counter |
||
class(pencil), | intent(in) | :: | send |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | send_counts(:) |
Rank i is sending this counts |
||
class(pencil), | intent(in) | :: | recv |
Information about send buffer |
||
integer(kind=int32), | intent(in) | :: | recv_counts(:) |
Rank i is recieving this counts |
||
integer(kind=int8), | intent(in) | :: | datatype_id |
Id of transpose plan to use |
||
type(MPI_Datatype), | intent(in) | :: | base_type |
Base MPI_Datatype |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes needed to store single element |
Frees temporary datatypes
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(MPI_Datatype), | intent(inout), | optional | :: | t1 |
Temporary datatype |
|
type(MPI_Datatype), | intent(inout), | optional | :: | t2 |
Temporary datatype |
|
type(MPI_Datatype), | intent(inout), | optional | :: | t3 |
Temporary datatype |
|
type(MPI_Datatype), | intent(inout), | optional | :: | t4 |
Temporary datatype |