dtfft_executor_cufft_m Module

This module describes cuFFT based FFT Executor: vkfft_executor

https://docs.nvidia.com/cuda/cufft/index.html


Uses

  • module~~dtfft_executor_cufft_m~~UsesGraph module~dtfft_executor_cufft_m dtfft_executor_cufft_m iso_c_binding iso_c_binding module~dtfft_executor_cufft_m->iso_c_binding iso_fortran_env iso_fortran_env module~dtfft_executor_cufft_m->iso_fortran_env module~dtfft_abstract_executor dtfft_abstract_executor module~dtfft_executor_cufft_m->module~dtfft_abstract_executor module~dtfft_config dtfft_config module~dtfft_executor_cufft_m->module~dtfft_config module~dtfft_interface_cuda_runtime dtfft_interface_cuda_runtime module~dtfft_executor_cufft_m->module~dtfft_interface_cuda_runtime module~dtfft_interface_cufft dtfft_interface_cufft module~dtfft_executor_cufft_m->module~dtfft_interface_cufft module~dtfft_parameters dtfft_parameters module~dtfft_executor_cufft_m->module~dtfft_parameters module~dtfft_utils dtfft_utils module~dtfft_executor_cufft_m->module~dtfft_utils mpi_f08 mpi_f08 module~dtfft_executor_cufft_m->mpi_f08 module~dtfft_abstract_executor->iso_c_binding module~dtfft_abstract_executor->iso_fortran_env module~dtfft_abstract_executor->module~dtfft_parameters module~dtfft_abstract_executor->module~dtfft_utils module~dtfft_interface_nvtx dtfft_interface_nvtx module~dtfft_abstract_executor->module~dtfft_interface_nvtx module~dtfft_pencil dtfft_pencil module~dtfft_abstract_executor->module~dtfft_pencil module~dtfft_config->iso_c_binding module~dtfft_config->iso_fortran_env module~dtfft_config->module~dtfft_interface_cuda_runtime module~dtfft_config->module~dtfft_parameters module~dtfft_config->module~dtfft_utils module~dtfft_config->mpi_f08 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_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_parameters->iso_c_binding module~dtfft_parameters->iso_fortran_env module~dtfft_parameters->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_nvtx->iso_c_binding module~dtfft_interface_nvtx->module~dtfft_utils 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

Used by

  • module~~dtfft_executor_cufft_m~~UsedByGraph module~dtfft_executor_cufft_m dtfft_executor_cufft_m module~dtfft_plan dtfft_plan module~dtfft_plan->module~dtfft_executor_cufft_m module~dtfft dtfft module~dtfft->module~dtfft_plan module~dtfft_api dtfft_api module~dtfft_api->module~dtfft_plan

Derived Types

type, public, extends(abstract_executor) ::  cufft_executor

cuFFT FFT Executor

Components

Type Visibility Attributes Name Initial
type(c_ptr), public :: plan_forward

Pointer to forward plan

type(c_ptr), public :: plan_backward

Pointer to backward plan

logical, public :: is_inverse_copied = .false.

Is inverse plan copied?

Type-Bound Procedures

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

Creates FFT plan

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

Executes plan

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

Destroys plan

procedure, public :: create_private => create ../../

Creates FFT plan via cuFFT Interface

procedure, public :: execute_private => execute ../../

Executes cuFFT plan

procedure, public :: destroy_private => destroy ../../

Destroys cuFFT plan

procedure, public, nopass :: mem_alloc ../../

Dummy method. Raises error stop

procedure, public, nopass :: mem_free ../../

Dummy method. Raises error stop


Subroutines

private subroutine create(self, fft_rank, fft_type, precision, idist, odist, how_many, fft_sizes, inembed, onembed, error_code, r2r_kinds)

Creates FFT plan via cuFFT Interface

Arguments

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

cuFFT FFT Executor

integer(kind=int8), intent(in) :: fft_rank

Rank of fft: 1 or 2

integer(kind=int8), intent(in) :: fft_type

Type of fft: r2r, r2c, c2c

type(dtfft_precision_t), intent(in) :: precision

Precision of fft: DTFFT_SINGLE or DTFFT_DOUBLE

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

Distance between the first element of two consecutive signals in a batch of the input data.

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

Distance between the first element of two consecutive signals in a batch of the output data.

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

Number of transforms to create

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

Dimensions of transform

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

Storage dimensions of the input data in memory.

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

Storage dimensions of the output data in memory.

integer(kind=int32), intent(inout) :: error_code

Error code to be returned to user

type(dtfft_r2r_kind_t), intent(in), optional :: r2r_kinds(:)

Kinds of r2r transform

private subroutine execute(self, a, b, sign)

Executes cuFFT plan

Arguments

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

cuFFT FFT Executor

type(c_ptr), intent(in) :: a

Source pointer

type(c_ptr), intent(in) :: b

Target pointer

integer(kind=int8), intent(in) :: sign

Sign of transform

private subroutine destroy(self)

Destroys cuFFT plan

Arguments

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

cuFFT FFT Executor

private subroutine mem_alloc(alloc_bytes, ptr)

Dummy method. Raises error stop

Arguments

Type IntentOptional Attributes Name
integer(kind=int64), intent(in) :: alloc_bytes

Number of bytes to allocate

type(c_ptr), intent(out) :: ptr

Allocated pointer

private subroutine mem_free(ptr)

Dummy method. Raises error stop

Arguments

Type IntentOptional Attributes Name
type(c_ptr), intent(in) :: ptr

Pointer to free