dtfft_executor_mkl_m Module

This module describes MKL based FFT Executor: mkl_executor

https://software.intel.com/content/www/us/en/develop/documentation/onemkl-developer-reference-fortran/top/fourier-transform-functions/fft-functions.html


Uses

  • module~~dtfft_executor_mkl_m~~UsesGraph module~dtfft_executor_mkl_m dtfft_executor_mkl_m iso_c_binding iso_c_binding module~dtfft_executor_mkl_m->iso_c_binding iso_fortran_env iso_fortran_env module~dtfft_executor_mkl_m->iso_fortran_env module~dtfft_abstract_executor dtfft_abstract_executor module~dtfft_executor_mkl_m->module~dtfft_abstract_executor module~dtfft_interface_mkl_m dtfft_interface_mkl_m module~dtfft_executor_mkl_m->module~dtfft_interface_mkl_m module~dtfft_interface_mkl_native_m dtfft_interface_mkl_native_m module~dtfft_executor_mkl_m->module~dtfft_interface_mkl_native_m module~dtfft_parameters dtfft_parameters module~dtfft_executor_mkl_m->module~dtfft_parameters module~dtfft_utils dtfft_utils module~dtfft_executor_mkl_m->module~dtfft_utils mpi_f08 mpi_f08 module~dtfft_executor_mkl_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_interface_mkl_m->iso_c_binding module~dtfft_interface_mkl_m->module~dtfft_utils MKL_DFTI MKL_DFTI module~dtfft_interface_mkl_native_m->MKL_DFTI 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_parameters module~dtfft_pencil->module~dtfft_utils module~dtfft_pencil->mpi_f08 module~dtfft_interface_cuda_runtime dtfft_interface_cuda_runtime module~dtfft_pencil->module~dtfft_interface_cuda_runtime module~dtfft_interface_cuda_runtime->iso_c_binding module~dtfft_interface_cuda_runtime->module~dtfft_parameters module~dtfft_interface_cuda_runtime->module~dtfft_utils

Used by

  • module~~dtfft_executor_mkl_m~~UsedByGraph module~dtfft_executor_mkl_m dtfft_executor_mkl_m module~dtfft_plan dtfft_plan module~dtfft_plan->module~dtfft_executor_mkl_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) ::  mkl_executor

MKL 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?

logical, private :: need_reconfigure

Needed for R2C plans

integer(kind=c_long), private, allocatable :: istrides(:)

Input strides. Needed for R2C plans to reconfigure plan

integer(kind=c_long), private, allocatable :: ostrides(:)

Output strides. Needed for R2C plans to reconfigure plan

integer(kind=int32), private :: idist

Input distance between the first data elements of consecutive data sets

integer(kind=int32), private :: odist

Output distance between the first data elements of consecutive data sets

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 MKL DFTI Interface

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

Executes MKL plan

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

Destroys MKL plan

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

Allocates MKL memory

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

Frees MKL aligned memory


Subroutines

private subroutine make_plan(fft_rank, fft_sizes, mkl_precision, forward_domain, how_many, idist, odist, plan)

Creates general MKL plan

Arguments

Type IntentOptional Attributes Name
integer(kind=int8), intent(in) :: fft_rank

Rank of fft: 1 or 2

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

Dimensions of transform

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

MKL Precision

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

C2C or R2C flag

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

Sets DFTI_NUMBER_OF_TRANSFORMS

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

Sets DFTI_INPUT_DISTANCE

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

Sets DFTI_OUTPUT_DISTANCE

type(c_ptr), intent(inout) :: plan

Resulting plan

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 MKL DFTI Interface

Arguments

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

MKL 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 MKL plan

Arguments

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

MKL 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 MKL plan

Arguments

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

MKL FFT Executor

private subroutine mem_alloc(alloc_bytes, ptr)

Allocates MKL memory

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)

Frees MKL aligned memory

Arguments

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

Pointer to free