dtfft_transpose_handle_cuda Module

This module describes transpose_handle_cuda class


Uses

  • module~~dtfft_transpose_handle_cuda~~UsesGraph module~dtfft_transpose_handle_cuda dtfft_transpose_handle_cuda iso_c_binding iso_c_binding module~dtfft_transpose_handle_cuda->iso_c_binding iso_fortran_env iso_fortran_env module~dtfft_transpose_handle_cuda->iso_fortran_env module~dtfft_abstract_backend dtfft_abstract_backend module~dtfft_transpose_handle_cuda->module~dtfft_abstract_backend module~dtfft_backend_cufftmp_m dtfft_backend_cufftmp_m module~dtfft_transpose_handle_cuda->module~dtfft_backend_cufftmp_m module~dtfft_backend_mpi dtfft_backend_mpi module~dtfft_transpose_handle_cuda->module~dtfft_backend_mpi module~dtfft_backend_nccl_m dtfft_backend_nccl_m module~dtfft_transpose_handle_cuda->module~dtfft_backend_nccl_m module~dtfft_interface_cuda_runtime dtfft_interface_cuda_runtime module~dtfft_transpose_handle_cuda->module~dtfft_interface_cuda_runtime module~dtfft_interface_nvtx dtfft_interface_nvtx module~dtfft_transpose_handle_cuda->module~dtfft_interface_nvtx module~dtfft_nvrtc_kernel dtfft_nvrtc_kernel module~dtfft_transpose_handle_cuda->module~dtfft_nvrtc_kernel module~dtfft_parameters dtfft_parameters module~dtfft_transpose_handle_cuda->module~dtfft_parameters module~dtfft_pencil dtfft_pencil module~dtfft_transpose_handle_cuda->module~dtfft_pencil module~dtfft_utils dtfft_utils module~dtfft_transpose_handle_cuda->module~dtfft_utils mpi_f08 mpi_f08 module~dtfft_transpose_handle_cuda->mpi_f08 module~dtfft_abstract_backend->iso_c_binding module~dtfft_abstract_backend->iso_fortran_env module~dtfft_abstract_backend->module~dtfft_interface_cuda_runtime module~dtfft_abstract_backend->module~dtfft_nvrtc_kernel module~dtfft_abstract_backend->module~dtfft_parameters module~dtfft_abstract_backend->module~dtfft_pencil module~dtfft_abstract_backend->module~dtfft_utils module~dtfft_abstract_backend->mpi_f08 module~dtfft_interface_nccl dtfft_interface_nccl module~dtfft_abstract_backend->module~dtfft_interface_nccl module~dtfft_backend_cufftmp_m->iso_c_binding module~dtfft_backend_cufftmp_m->iso_fortran_env module~dtfft_backend_cufftmp_m->module~dtfft_abstract_backend module~dtfft_backend_cufftmp_m->module~dtfft_interface_cuda_runtime module~dtfft_backend_cufftmp_m->module~dtfft_parameters module~dtfft_backend_cufftmp_m->module~dtfft_pencil module~dtfft_backend_cufftmp_m->module~dtfft_utils module~dtfft_backend_cufftmp_m->mpi_f08 module~dtfft_interface_cufft dtfft_interface_cufft module~dtfft_backend_cufftmp_m->module~dtfft_interface_cufft module~dtfft_interface_nvshmem dtfft_interface_nvshmem module~dtfft_backend_cufftmp_m->module~dtfft_interface_nvshmem module~dtfft_backend_mpi->iso_c_binding module~dtfft_backend_mpi->iso_fortran_env module~dtfft_backend_mpi->module~dtfft_abstract_backend module~dtfft_backend_mpi->module~dtfft_interface_cuda_runtime module~dtfft_backend_mpi->module~dtfft_parameters module~dtfft_backend_mpi->module~dtfft_utils module~dtfft_backend_mpi->mpi_f08 module~dtfft_backend_nccl_m->iso_c_binding module~dtfft_backend_nccl_m->iso_fortran_env module~dtfft_backend_nccl_m->module~dtfft_abstract_backend module~dtfft_backend_nccl_m->module~dtfft_interface_cuda_runtime module~dtfft_backend_nccl_m->module~dtfft_parameters module~dtfft_backend_nccl_m->module~dtfft_utils module~dtfft_backend_nccl_m->mpi_f08 module~dtfft_backend_nccl_m->module~dtfft_interface_nccl module~dtfft_interface_cuda_runtime->iso_c_binding module~dtfft_interface_cuda_runtime->module~dtfft_parameters module~dtfft_interface_cuda_runtime->module~dtfft_utils module~dtfft_interface_nvtx->iso_c_binding module~dtfft_interface_nvtx->module~dtfft_utils module~dtfft_nvrtc_kernel->iso_c_binding module~dtfft_nvrtc_kernel->iso_fortran_env module~dtfft_nvrtc_kernel->module~dtfft_interface_cuda_runtime module~dtfft_nvrtc_kernel->module~dtfft_interface_nvtx module~dtfft_nvrtc_kernel->module~dtfft_parameters module~dtfft_nvrtc_kernel->module~dtfft_utils module~dtfft_nvrtc_kernel->mpi_f08 module~dtfft_interface_cuda dtfft_interface_cuda module~dtfft_nvrtc_kernel->module~dtfft_interface_cuda module~dtfft_interface_nvrtc dtfft_interface_nvrtc module~dtfft_nvrtc_kernel->module~dtfft_interface_nvrtc module~dtfft_parameters->iso_c_binding module~dtfft_parameters->iso_fortran_env module~dtfft_parameters->mpi_f08 module~dtfft_pencil->iso_c_binding module~dtfft_pencil->iso_fortran_env module~dtfft_pencil->module~dtfft_interface_cuda_runtime module~dtfft_pencil->module~dtfft_parameters module~dtfft_pencil->module~dtfft_utils module~dtfft_pencil->mpi_f08 module~dtfft_utils->iso_c_binding module~dtfft_utils->iso_fortran_env module~dtfft_utils->module~dtfft_parameters module~dtfft_utils->mpi_f08 module~dtfft_interface_cuda->iso_c_binding module~dtfft_interface_cuda->iso_fortran_env module~dtfft_interface_cuda->module~dtfft_interface_cuda_runtime module~dtfft_interface_cuda->module~dtfft_parameters module~dtfft_interface_cuda->module~dtfft_utils module~dtfft_interface_cufft->iso_c_binding module~dtfft_interface_cufft->iso_fortran_env module~dtfft_interface_cufft->module~dtfft_parameters module~dtfft_interface_cufft->module~dtfft_utils module~dtfft_interface_nccl->iso_c_binding module~dtfft_interface_nccl->module~dtfft_parameters module~dtfft_interface_nccl->module~dtfft_utils module~dtfft_interface_nvrtc->iso_c_binding module~dtfft_interface_nvrtc->iso_fortran_env module~dtfft_interface_nvrtc->module~dtfft_interface_cuda_runtime module~dtfft_interface_nvrtc->module~dtfft_parameters module~dtfft_interface_nvrtc->module~dtfft_utils module~dtfft_interface_nvshmem->iso_c_binding module~dtfft_interface_nvshmem->iso_fortran_env module~dtfft_interface_nvshmem->module~dtfft_parameters module~dtfft_interface_nvshmem->module~dtfft_utils

Used by

  • module~~dtfft_transpose_handle_cuda~~UsedByGraph module~dtfft_transpose_handle_cuda dtfft_transpose_handle_cuda module~dtfft_transpose_plan_cuda dtfft_transpose_plan_cuda module~dtfft_transpose_plan_cuda->module~dtfft_transpose_handle_cuda module~dtfft_plan dtfft_plan module~dtfft_plan->module~dtfft_transpose_plan_cuda module~dtfft dtfft module~dtfft->module~dtfft_plan module~dtfft_api dtfft_api module~dtfft_api->module~dtfft_plan

Derived Types

type, public ::  transpose_handle_cuda

CUDA Transpose Handle

Components

Type Visibility Attributes Name Initial
type(dtfft_transpose_t), private :: transpose_type
logical, private :: has_exchange = .false.

If current handle has exchanges between GPUs

logical, private :: is_pipelined = .false.

If underlying exchanges are pipelined

type(nvrtc_kernel), private :: transpose_kernel

Transposes data

type(nvrtc_kernel), private :: unpack_kernel

Unpacks data

type(nvrtc_kernel), private :: unpack_kernel2
class(abstract_backend), private, allocatable :: comm_handle

Communication handle

Type-Bound Procedures

procedure, public, pass(self) :: create ../../

Creates CUDA Transpose Handle

procedure, public, pass(self) :: execute ../../

Executes transpose - exchange - unpack

procedure, public, pass(self) :: destroy ../../

Destroys CUDA Transpose Handle

procedure, public, pass(self) :: get_aux_size ../../

Returns number of bytes required by aux buffer

procedure, public, pass(self) :: get_tranpose_type ../../

Returns transpose_type, associated with handle

type, private ::  data_handle

Helper class used to obtain displacements and counts needed to send to other processes

Components

Type Visibility Attributes Name Initial
integer(kind=int32), public, allocatable :: ls(:,:)

Starts of my data that I should send or recv while communicating with other processes

integer(kind=int32), public, allocatable :: ln(:,:)

Counts of my data that I should send or recv while communicating with other processes

integer(kind=int32), public, allocatable :: sizes(:,:)

Counts of every rank in a comm

integer(kind=int32), public, allocatable :: starts(:,:)

Starts of every rank in a comm

integer(kind=int32), public, allocatable :: displs(:)

Local buffer displacement

integer(kind=int32), public, allocatable :: counts(:)

Number of elements to send or recv

Type-Bound Procedures

procedure, public, pass(self) :: create => create_data_handle ../../

Creates handle

procedure, public, pass(self) :: destroy => destroy_data_handle ../../

Destroys handle


Functions

private function get_aux_size(self)

Returns number of bytes required by aux buffer

Arguments

Type IntentOptional Attributes Name
class(transpose_handle_cuda), intent(in) :: self

CUDA Transpose Handle

Return Value integer(kind=int64)

private function get_tranpose_type(self) result(tranpose_type)

Returns transpose_type, associated with handle

Arguments

Type IntentOptional Attributes Name
class(transpose_handle_cuda), intent(in) :: self

CUDA Transpose Handle

Return Value type(dtfft_transpose_t)


Subroutines

private subroutine create_data_handle(self, info, comm, comm_size)

Creates handle

Arguments

Type IntentOptional Attributes Name
class(data_handle), intent(inout) :: self

Helper class

type(pencil), intent(in) :: info

Pencil info

type(MPI_Comm), intent(in) :: comm

MPI communicator

integer(kind=int32), intent(in) :: comm_size

Size of comm

private subroutine destroy_data_handle(self)

Destroys handle

Arguments

Type IntentOptional Attributes Name
class(data_handle), intent(inout) :: self

Helper class

private subroutine create(self, helper, send, recv, base_storage, backend)

Creates CUDA Transpose Handle

Arguments

Type IntentOptional Attributes Name
class(transpose_handle_cuda), intent(inout) :: self

CUDA Transpose Handle

type(backend_helper), intent(in) :: helper

Backend helper

type(pencil), intent(in) :: send

Send pencil

type(pencil), intent(in) :: recv

Recv pencil

integer(kind=int64), intent(in) :: base_storage

Number of bytes needed to store single element

type(dtfft_backend_t), intent(in) :: backend

Backend type

private subroutine execute(self, in, out, stream, aux)

Executes transpose - exchange - unpack

Arguments

Type IntentOptional Attributes Name
class(transpose_handle_cuda), intent(inout) :: self

CUDA Transpose Handle

real(kind=real32), intent(inout) :: in(:)

Send pointer

real(kind=real32), intent(inout) :: out(:)

Recv pointer

type(dtfft_stream_t), intent(in) :: stream

Main execution CUDA stream

real(kind=real32), intent(inout) :: aux(:)

Aux pointer

private subroutine destroy(self)

Destroys CUDA Transpose Handle

Arguments

Type IntentOptional Attributes Name
class(transpose_handle_cuda), intent(inout) :: self

CUDA Transpose Handle