MPI Based GPU Backends backend_mpi
MPI Backend
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
type(dtfft_backend_t), | public | :: | backend |
Backend type |
|||
logical, | public | :: | is_selfcopy |
If backend is self-copying |
|||
logical, | public | :: | is_pipelined |
If backend is pipelined |
|||
integer(kind=int64), | public | :: | aux_size |
Number of bytes required by aux buffer |
|||
integer(kind=int64), | public | :: | send_recv_buffer_size |
Number of float elements used in |
|||
type(MPI_Comm), | public | :: | comm |
MPI Communicator |
|||
integer(kind=int32), | public, | allocatable | :: | comm_mapping(:) |
Mapping of 1d comm ranks to global comm |
||
integer(kind=int32), | public | :: | comm_size |
Size of MPI Comm |
|||
integer(kind=int32), | public | :: | comm_rank |
Rank in MPI Comm |
|||
integer(kind=int64), | public, | allocatable | :: | send_displs(:) |
Send data displacements, in float elements |
||
integer(kind=int64), | public, | allocatable | :: | send_floats(:) |
Send data elements, in float elements |
||
integer(kind=int64), | public, | allocatable | :: | recv_displs(:) |
Recv data displacements, in float elements |
||
integer(kind=int64), | public, | allocatable | :: | recv_floats(:) |
Recv data elements, in float elements |
||
type(cudaEvent), | public | :: | execution_event |
Event for main execution stream |
|||
type(cudaEvent), | public | :: | copy_event |
Event for copy stream |
|||
type(dtfft_stream_t), | public | :: | copy_stream |
Stream for copy operations |
|||
integer(kind=int64), | public | :: | self_copy_bytes |
Number of bytes to copy it itself |
|||
integer(kind=int64), | public | :: | self_send_displ |
Displacement for send buffer |
|||
integer(kind=int64), | public | :: | self_recv_displ |
Displacement for recv buffer |
|||
type(nvrtc_kernel), | public, | pointer | :: | unpack_kernel |
Kernel for unpacking data |
||
type(nvrtc_kernel), | public, | pointer | :: | unpack_kernel2 |
Kernel for unpacking data |
||
type(mpi_backend_helper), | private | :: | send |
MPI Helper for send data |
|||
type(mpi_backend_helper), | private | :: | recv |
MPI Helper for recv data |
procedure, public, non_overridable, pass(self) :: create | ../../ Creates Abstract GPU Backend |
procedure, public, non_overridable, pass(self) :: execute | ../../ Executes GPU Backend |
procedure, public, non_overridable, pass(self) :: destroy | ../../ Destroys Abstract GPU Backend |
procedure, public, non_overridable, pass(self) :: get_aux_size | ../../ Returns number of bytes required by aux buffer |
procedure, public, non_overridable, pass(self) :: set_unpack_kernel | ../../ Sets unpack kernel for pipelined backend |
procedure, public :: create_private => create_mpi | ../../ Creates MPI backend |
procedure, public :: execute_private => execute_mpi | ../../ Executes MPI backend |
procedure, public :: destroy_private => destroy_mpi | ../../ Destroys MPI backend |
MPI Helper
Type | Visibility | Attributes | Name | Initial | |||
---|---|---|---|---|---|---|---|
integer(kind=CNT_KIND), | public, | allocatable | :: | counts(:) |
Counts of data to send or recv |
||
integer(kind=ADDR_KIND), | public, | allocatable | :: | displs(:) |
Displacements of data to send or recv |
||
type(MPI_Request), | public, | allocatable | :: | requests(:) |
MPI Requests |
||
integer(kind=int32), | public | :: | n_requests |
Number of requests |
|||
logical, | public | :: | is_request_created | = | .false. |
Request created flag. Used for persistent functions |
procedure, public, pass(self) :: create => create_helper | ../../ Creates MPI helper |
procedure, public, pass(self) :: destroy => destoy_helper | ../../ Destroys MPI helper |
Creates MPI helper
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpi_backend_helper), | intent(inout) | :: | self |
MPI Helper |
||
integer(kind=int64), | intent(in) | :: | counts(:) |
Counts of data to send or recv |
||
integer(kind=int64), | intent(in) | :: | displs(:) |
Displacements of data to send or recv |
||
integer(kind=int32), | intent(in) | :: | max_requests |
Maximum number of requests required |
Destroys MPI helper
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(mpi_backend_helper), | intent(inout) | :: | self |
MPI Helper |
Creates MPI backend
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(backend_mpi), | intent(inout) | :: | self |
MPI GPU Backend |
||
type(backend_helper), | intent(in) | :: | helper |
Backend helper (unused) |
||
type(dtfft_transpose_t), | intent(in) | :: | tranpose_type |
Type of transpose to create (unused) |
||
integer(kind=int64), | intent(in) | :: | base_storage |
Number of bytes to store single element (unused) |
Destroys MPI backend
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(backend_mpi), | intent(inout) | :: | self |
MPI GPU Backend |
Executes MPI backend
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
class(backend_mpi), | intent(inout) | :: | self |
MPI GPU Backend |
||
real(kind=real32), | intent(inout), | target | :: | in(:) |
Send pointer |
|
real(kind=real32), | intent(inout), | target | :: | out(:) |
Recv pointer |
|
type(dtfft_stream_t), | intent(in) | :: | stream |
Main execution CUDA stream |
||
real(kind=real32), | intent(inout), | target | :: | aux(:) |
Aux pointer |
Executes MPI point-to-point communication
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(MPI_Comm), | intent(in) | :: | comm |
MPI communicator |
||
type(mpi_backend_helper), | intent(inout) | :: | send |
MPI Helper for send data |
||
type(mpi_backend_helper), | intent(inout) | :: | recv |
MPI Helper for recv data |
||
real(kind=real32), | intent(in) | :: | in(:) |
Data to be sent |
||
real(kind=real32), | intent(inout) | :: | out(:) |
Data to be received |
Executes MPI all-to-all communication
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(MPI_Comm), | intent(in) | :: | comm |
MPI communicator |
||
type(mpi_backend_helper), | intent(inout) | :: | send |
MPI Helper for send data |
||
type(mpi_backend_helper), | intent(inout) | :: | recv |
MPI Helper for recv data |
||
real(kind=real32), | intent(in) | :: | in(:) |
Data to be sent |
||
real(kind=real32), | intent(inout) | :: | out(:) |
Data to be received |