dtfft_parameters Module

This module defines common dtFFT parameters


Uses

  • module~~dtfft_parameters~~UsesGraph module~dtfft_parameters dtfft_parameters iso_c_binding iso_c_binding module~dtfft_parameters->iso_c_binding iso_fortran_env iso_fortran_env module~dtfft_parameters->iso_fortran_env mpi_f08 mpi_f08 module~dtfft_parameters->mpi_f08

Used by

  • module~~dtfft_parameters~~UsedByGraph module~dtfft_parameters dtfft_parameters module~dtfft dtfft module~dtfft->module~dtfft_parameters module~dtfft_config dtfft_config module~dtfft->module~dtfft_config module~dtfft_pencil dtfft_pencil module~dtfft->module~dtfft_pencil module~dtfft_plan dtfft_plan module~dtfft->module~dtfft_plan module~dtfft_abstract_backend dtfft_abstract_backend module~dtfft_abstract_backend->module~dtfft_parameters module~dtfft_interface_cuda_runtime dtfft_interface_cuda_runtime module~dtfft_abstract_backend->module~dtfft_interface_cuda_runtime module~dtfft_interface_nccl dtfft_interface_nccl module~dtfft_abstract_backend->module~dtfft_interface_nccl module~dtfft_nvrtc_kernel dtfft_nvrtc_kernel module~dtfft_abstract_backend->module~dtfft_nvrtc_kernel module~dtfft_abstract_backend->module~dtfft_pencil module~dtfft_utils dtfft_utils module~dtfft_abstract_backend->module~dtfft_utils module~dtfft_abstract_executor dtfft_abstract_executor module~dtfft_abstract_executor->module~dtfft_parameters module~dtfft_abstract_executor->module~dtfft_pencil module~dtfft_abstract_executor->module~dtfft_utils module~dtfft_interface_nvtx dtfft_interface_nvtx module~dtfft_abstract_executor->module~dtfft_interface_nvtx module~dtfft_abstract_transpose_plan dtfft_abstract_transpose_plan module~dtfft_abstract_transpose_plan->module~dtfft_parameters module~dtfft_abstract_transpose_plan->module~dtfft_abstract_backend module~dtfft_abstract_transpose_plan->module~dtfft_config module~dtfft_abstract_transpose_plan->module~dtfft_interface_cuda_runtime module~dtfft_abstract_transpose_plan->module~dtfft_interface_nccl module~dtfft_interface_nvshmem dtfft_interface_nvshmem module~dtfft_abstract_transpose_plan->module~dtfft_interface_nvshmem module~dtfft_abstract_transpose_plan->module~dtfft_nvrtc_kernel module~dtfft_abstract_transpose_plan->module~dtfft_pencil module~dtfft_abstract_transpose_plan->module~dtfft_utils module~dtfft_abstract_transpose_plan->module~dtfft_interface_nvtx module~dtfft_api dtfft_api module~dtfft_api->module~dtfft_parameters module~dtfft_api->module~dtfft_config module~dtfft_api->module~dtfft_pencil module~dtfft_api->module~dtfft_plan module~dtfft_api->module~dtfft_utils module~dtfft_backend_cufftmp_m dtfft_backend_cufftmp_m module~dtfft_backend_cufftmp_m->module~dtfft_parameters module~dtfft_backend_cufftmp_m->module~dtfft_abstract_backend module~dtfft_backend_cufftmp_m->module~dtfft_interface_cuda_runtime module~dtfft_interface_cufft dtfft_interface_cufft module~dtfft_backend_cufftmp_m->module~dtfft_interface_cufft module~dtfft_backend_cufftmp_m->module~dtfft_interface_nvshmem module~dtfft_backend_cufftmp_m->module~dtfft_pencil module~dtfft_backend_cufftmp_m->module~dtfft_utils module~dtfft_backend_mpi dtfft_backend_mpi module~dtfft_backend_mpi->module~dtfft_parameters module~dtfft_backend_mpi->module~dtfft_abstract_backend module~dtfft_backend_mpi->module~dtfft_interface_cuda_runtime module~dtfft_backend_mpi->module~dtfft_utils module~dtfft_backend_nccl_m dtfft_backend_nccl_m module~dtfft_backend_nccl_m->module~dtfft_parameters 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_interface_nccl module~dtfft_backend_nccl_m->module~dtfft_utils module~dtfft_config->module~dtfft_parameters module~dtfft_config->module~dtfft_interface_cuda_runtime module~dtfft_config->module~dtfft_utils module~dtfft_executor_cufft_m dtfft_executor_cufft_m module~dtfft_executor_cufft_m->module~dtfft_parameters module~dtfft_executor_cufft_m->module~dtfft_abstract_executor module~dtfft_executor_cufft_m->module~dtfft_config module~dtfft_executor_cufft_m->module~dtfft_interface_cuda_runtime module~dtfft_executor_cufft_m->module~dtfft_interface_cufft module~dtfft_executor_cufft_m->module~dtfft_utils module~dtfft_executor_fftw_m dtfft_executor_fftw_m module~dtfft_executor_fftw_m->module~dtfft_parameters module~dtfft_executor_fftw_m->module~dtfft_abstract_executor module~dtfft_executor_fftw_m->module~dtfft_pencil module~dtfft_executor_fftw_m->module~dtfft_utils module~dtfft_executor_mkl_m dtfft_executor_mkl_m module~dtfft_executor_mkl_m->module~dtfft_parameters module~dtfft_executor_mkl_m->module~dtfft_abstract_executor module~dtfft_executor_mkl_m->module~dtfft_utils module~dtfft_interface_mkl_m dtfft_interface_mkl_m module~dtfft_executor_mkl_m->module~dtfft_interface_mkl_m module~dtfft_executor_vkfft_m dtfft_executor_vkfft_m module~dtfft_executor_vkfft_m->module~dtfft_parameters module~dtfft_executor_vkfft_m->module~dtfft_abstract_executor module~dtfft_executor_vkfft_m->module~dtfft_config module~dtfft_interface_vkfft_m dtfft_interface_vkfft_m module~dtfft_executor_vkfft_m->module~dtfft_interface_vkfft_m module~dtfft_interface_cuda dtfft_interface_cuda module~dtfft_interface_cuda->module~dtfft_parameters module~dtfft_interface_cuda->module~dtfft_interface_cuda_runtime module~dtfft_interface_cuda->module~dtfft_utils module~dtfft_interface_cuda_runtime->module~dtfft_parameters module~dtfft_interface_cuda_runtime->module~dtfft_utils module~dtfft_interface_cufft->module~dtfft_parameters module~dtfft_interface_cufft->module~dtfft_utils module~dtfft_interface_nccl->module~dtfft_parameters module~dtfft_interface_nccl->module~dtfft_utils module~dtfft_interface_nvrtc dtfft_interface_nvrtc module~dtfft_interface_nvrtc->module~dtfft_parameters module~dtfft_interface_nvrtc->module~dtfft_interface_cuda_runtime module~dtfft_interface_nvrtc->module~dtfft_utils module~dtfft_interface_nvshmem->module~dtfft_parameters module~dtfft_interface_nvshmem->module~dtfft_utils module~dtfft_interface_vkfft_m->module~dtfft_parameters module~dtfft_interface_vkfft_m->module~dtfft_utils module~dtfft_nvrtc_kernel->module~dtfft_parameters module~dtfft_nvrtc_kernel->module~dtfft_interface_cuda module~dtfft_nvrtc_kernel->module~dtfft_interface_cuda_runtime module~dtfft_nvrtc_kernel->module~dtfft_interface_nvrtc module~dtfft_nvrtc_kernel->module~dtfft_utils module~dtfft_nvrtc_kernel->module~dtfft_interface_nvtx module~dtfft_pencil->module~dtfft_parameters module~dtfft_pencil->module~dtfft_interface_cuda_runtime module~dtfft_pencil->module~dtfft_utils module~dtfft_plan->module~dtfft_parameters module~dtfft_plan->module~dtfft_abstract_executor module~dtfft_plan->module~dtfft_abstract_transpose_plan module~dtfft_plan->module~dtfft_config module~dtfft_plan->module~dtfft_executor_cufft_m module~dtfft_plan->module~dtfft_executor_fftw_m module~dtfft_plan->module~dtfft_executor_mkl_m module~dtfft_plan->module~dtfft_executor_vkfft_m module~dtfft_plan->module~dtfft_interface_cuda_runtime module~dtfft_plan->module~dtfft_interface_nvshmem module~dtfft_plan->module~dtfft_nvrtc_kernel module~dtfft_plan->module~dtfft_pencil module~dtfft_transpose_plan_cuda dtfft_transpose_plan_cuda module~dtfft_plan->module~dtfft_transpose_plan_cuda module~dtfft_transpose_plan_host dtfft_transpose_plan_host module~dtfft_plan->module~dtfft_transpose_plan_host module~dtfft_plan->module~dtfft_utils module~dtfft_plan->module~dtfft_interface_nvtx module~dtfft_transpose_handle_cuda dtfft_transpose_handle_cuda module~dtfft_transpose_handle_cuda->module~dtfft_parameters module~dtfft_transpose_handle_cuda->module~dtfft_abstract_backend module~dtfft_transpose_handle_cuda->module~dtfft_backend_cufftmp_m module~dtfft_transpose_handle_cuda->module~dtfft_backend_mpi module~dtfft_transpose_handle_cuda->module~dtfft_backend_nccl_m module~dtfft_transpose_handle_cuda->module~dtfft_interface_cuda_runtime module~dtfft_transpose_handle_cuda->module~dtfft_nvrtc_kernel module~dtfft_transpose_handle_cuda->module~dtfft_pencil module~dtfft_transpose_handle_cuda->module~dtfft_utils module~dtfft_transpose_handle_cuda->module~dtfft_interface_nvtx module~dtfft_transpose_handle_host dtfft_transpose_handle_host module~dtfft_transpose_handle_host->module~dtfft_parameters module~dtfft_transpose_handle_host->module~dtfft_pencil module~dtfft_transpose_handle_host->module~dtfft_interface_nvtx module~dtfft_transpose_plan_cuda->module~dtfft_parameters module~dtfft_transpose_plan_cuda->module~dtfft_abstract_backend module~dtfft_transpose_plan_cuda->module~dtfft_abstract_transpose_plan module~dtfft_transpose_plan_cuda->module~dtfft_config module~dtfft_transpose_plan_cuda->module~dtfft_interface_cuda module~dtfft_transpose_plan_cuda->module~dtfft_interface_cuda_runtime module~dtfft_transpose_plan_cuda->module~dtfft_interface_nvrtc module~dtfft_transpose_plan_cuda->module~dtfft_nvrtc_kernel module~dtfft_transpose_plan_cuda->module~dtfft_pencil module~dtfft_transpose_plan_cuda->module~dtfft_transpose_handle_cuda module~dtfft_transpose_plan_cuda->module~dtfft_utils module~dtfft_transpose_plan_cuda->module~dtfft_interface_nvtx module~dtfft_transpose_plan_host->module~dtfft_parameters module~dtfft_transpose_plan_host->module~dtfft_abstract_transpose_plan module~dtfft_transpose_plan_host->module~dtfft_pencil module~dtfft_transpose_plan_host->module~dtfft_transpose_handle_host module~dtfft_transpose_plan_host->module~dtfft_utils module~dtfft_transpose_plan_host->module~dtfft_interface_nvtx module~dtfft_utils->module~dtfft_parameters module~dtfft_interface_mkl_m->module~dtfft_utils module~dtfft_interface_nvtx->module~dtfft_utils

Variables

Type Visibility Attributes Name Initial
integer(kind=int32), public, parameter :: DTFFT_VERSION_MAJOR = 2

dtFFT Major Version

integer(kind=int32), public, parameter :: DTFFT_VERSION_MINOR = 0

dtFFT Minor Version

integer(kind=int32), public, parameter :: DTFFT_VERSION_PATCH = 0

dtFFT Patch Version

integer(kind=int32), public, parameter :: DTFFT_VERSION_CODE = 200000

dtFFT Version Code. Can be used in Version comparison

type(dtfft_execute_t), public, parameter :: DTFFT_EXECUTE_FORWARD = dtfft_execute_t(11)

Perform XYZ –> YXZ –> ZXY plan execution (Forward)

type(dtfft_execute_t), public, parameter :: DTFFT_EXECUTE_BACKWARD = dtfft_execute_t(12)

Perform ZXY –> YXZ –> XYZ plan execution (Backward)

type(dtfft_transpose_t), public, parameter :: DTFFT_TRANSPOSE_X_TO_Y = dtfft_transpose_t(+1)

Perform single transposition, from X aligned to Y aligned

type(dtfft_transpose_t), public, parameter :: DTFFT_TRANSPOSE_Y_TO_X = dtfft_transpose_t((-1))

Perform single transposition, from Y aligned to X aligned

type(dtfft_transpose_t), public, parameter :: DTFFT_TRANSPOSE_X_TO_Z = dtfft_transpose_t(+3)

Perform single transposition, from X aligned to Z aligned

type(dtfft_transpose_t), public, parameter :: DTFFT_TRANSPOSE_Y_TO_Z = dtfft_transpose_t(+2)

Perform single transposition, from Y aligned to Z aligned

type(dtfft_transpose_t), public, parameter :: DTFFT_TRANSPOSE_Z_TO_Y = dtfft_transpose_t((-2))

Perform single transposition, from Z aligned to Y aligned

type(dtfft_transpose_t), public, parameter :: DTFFT_TRANSPOSE_Z_TO_X = dtfft_transpose_t((-3))

Perform single transposition, from Z aligned to X aligned

character(len=*), public, parameter :: TRANSPOSE_NAMES(-3:3) = ["Z2X", "Z2Y", "Y2X", "NUL", "X2Y", "Y2Z", "X2Z"]

String representation of dtfft_transpose_t

type(dtfft_executor_t), public, parameter :: DTFFT_EXECUTOR_NONE = dtfft_executor_t(0)

Do not setup any executor. If this type is provided, then execute method should not be called. Use transpose method instead

type(dtfft_executor_t), public, parameter :: DTFFT_EXECUTOR_FFTW3 = dtfft_executor_t(1)

FFTW3 executor

type(dtfft_executor_t), public, parameter :: DTFFT_EXECUTOR_MKL = dtfft_executor_t(2)

MKL executor

type(dtfft_executor_t), public, parameter :: DTFFT_EXECUTOR_CUFFT = dtfft_executor_t(3)

cuFFT GPU executor

type(dtfft_executor_t), public, parameter :: DTFFT_EXECUTOR_VKFFT = dtfft_executor_t(4)

VkFFT GPU executor

integer(kind=int8), public, parameter :: FFT_FORWARD = (-1)

Forward c2c transform

integer(kind=int8), public, parameter :: FFT_BACKWARD = (+1)

Backward c2c transform

type(dtfft_effort_t), public, parameter :: DTFFT_ESTIMATE = dtfft_effort_t(0)

Estimate flag. dtFFT will use default decomposition provided by MPI_Dims_create

type(dtfft_effort_t), public, parameter :: DTFFT_MEASURE = dtfft_effort_t(+1)

Measure flag. dtFFT will run transpose routines to find the best grid decomposition. Passing this flag and MPI Communicator with Cartesian topology to plan%create makes dtFFT do nothing.

type(dtfft_effort_t), public, parameter :: DTFFT_PATIENT = dtfft_effort_t(+2)

Patient flag. Same as DTFFT_MEASURE, but different MPI datatypes will also be tested

type(dtfft_precision_t), public, parameter :: DTFFT_SINGLE = dtfft_precision_t(0)

Use single precision

type(dtfft_precision_t), public, parameter :: DTFFT_DOUBLE = dtfft_precision_t(+1)

Use double precision

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DCT_1 = dtfft_r2r_kind_t(+3)

DCT-I (Logical N=2*(n-1), inverse is DTFFT_DCT_1)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DCT_2 = dtfft_r2r_kind_t(+5)

DCT-II (Logical N=2*n, inverse is DTFFT_DCT_3)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DCT_3 = dtfft_r2r_kind_t(+4)

DCT-III (Logical N=2*n, inverse is DTFFT_DCT_2)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DCT_4 = dtfft_r2r_kind_t(+6)

DCT-IV (Logical N=2*n, inverse is DTFFT_DCT_4)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DST_1 = dtfft_r2r_kind_t(+7)

DST-I (Logical N=2*(n+1), inverse is DTFFT_DST_1)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DST_2 = dtfft_r2r_kind_t(+9)

DST-II (Logical N=2*n, inverse is DTFFT_DST_3)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DST_3 = dtfft_r2r_kind_t(+8)

DST-III (Logical N=2*n, inverse is DTFFT_DST_2)

type(dtfft_r2r_kind_t), public, parameter :: DTFFT_DST_4 = dtfft_r2r_kind_t(+10)

DST-IV (Logical N=2*n, inverse is DTFFT_DST_4)

integer(kind=int64), public, parameter :: DOUBLE_COMPLEX_STORAGE_SIZE = storage_size((1._real64, 1._real64))/8_int64

Number of bytes to store single double precision complex element

integer(kind=int64), public, parameter :: COMPLEX_STORAGE_SIZE = storage_size((1._real32, 1._real32))/8_int64

Number of bytes to store single float precision complex element

integer(kind=int64), public, parameter :: DOUBLE_STORAGE_SIZE = storage_size(1._real64)/8_int64

Number of bytes to store single double precision real element

integer(kind=int64), public, parameter :: FLOAT_STORAGE_SIZE = storage_size(1._real32)/8_int64

Number of bytes to store single single precision real element

integer(kind=int32), public, parameter :: COLOR_CREATE = int(Z'00FAB53C')

Color for plan.create

integer(kind=int32), public, parameter :: COLOR_EXECUTE = int(Z'00E25DFC')

Color for plan.execute

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE = int(Z'00B175BD')

Color for plan.transpose

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_XY = int(Z'005DFCCA')

Color for DTFFT_TRANSPOSE_X_TO_Y

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_YX = int(Z'0076A797')

Color for DTFFT_TRANSPOSE_Y_TO_X

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_YZ = int(Z'00E3CF9F')

Color for DTFFT_TRANSPOSE_Y_TO_Z

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_ZY = int(Z'008C826A')

Color for DTFFT_TRANSPOSE_Z_TO_Y

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_XZ = int(Z'00546F66')

Color for DTFFT_TRANSPOSE_X_TO_Z

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_ZX = int(Z'007A6D7D')

Color for DTFFT_TRANSPOSE_Z_TO_X

integer(kind=int32), public, parameter :: COLOR_FFT = int(Z'00FCD05D')

Color for FFT

integer(kind=int32), public, parameter :: COLOR_AUTOTUNE = int(Z'006075FF')

Color for Autotune

integer(kind=int32), public, parameter :: COLOR_AUTOTUNE2 = int(Z'0056E874')

Color for Autotune2

integer(kind=int32), public, parameter :: COLOR_DESTROY = int(Z'00000000')

Color for plan.destroy

integer(kind=int32), public, parameter :: COLOR_TRANSPOSE_PALLETTE(-3:3) = [COLOR_TRANSPOSE_ZX, COLOR_TRANSPOSE_ZY, COLOR_TRANSPOSE_YX, 0, COLOR_TRANSPOSE_XY, COLOR_TRANSPOSE_YZ, COLOR_TRANSPOSE_XZ]

Color pallete for plan.transpose

integer(kind=int32), public, parameter :: DTFFT_SUCCESS = 0

Successful execution

integer(kind=int32), public, parameter :: DTFFT_ERROR_MPI_FINALIZED = (-1)

MPI_Init is not called or MPI_Finalize has already been called

integer(kind=int32), public, parameter :: DTFFT_ERROR_PLAN_NOT_CREATED = 1

Plan not created

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_TRANSPOSE_TYPE = 2

Invalid transpose_type provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_N_DIMENSIONS = 3

Invalid Number of dimensions provided. Valid options are 2 and 3

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_DIMENSION_SIZE = 4

One or more provided dimension sizes <= 0

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_COMM_TYPE = 5

Invalid communicator type provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_PRECISION = 6

Invalid precision parameter provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_EFFORT = 7

Invalid effort parameter provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_EXECUTOR = 8

Invalid executor parameter provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_COMM_DIMS = 9

Number of dimensions in provided Cartesian communicator > Number of dimension passed to create subroutine

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_COMM_FAST_DIM = 10

Passed Cartesian communicator with number of processes in 1st (fastest varying) dimension > 1

integer(kind=int32), public, parameter :: DTFFT_ERROR_MISSING_R2R_KINDS = 11

For R2R plan, kinds parameter must be passed if executor != DTFFT_EXECUTOR_NONE

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_R2R_KINDS = 12

Invalid values detected in kinds parameter

integer(kind=int32), public, parameter :: DTFFT_ERROR_R2C_TRANSPOSE_PLAN = 13

Transpose plan is not supported in R2C, use R2R or C2C plan instead

integer(kind=int32), public, parameter :: DTFFT_ERROR_INPLACE_TRANSPOSE = 14

Inplace transpose is not supported

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_AUX = 15

Invalid aux buffer provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_DIM = 16

Invalid dim passed to plan.get_pencil

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_USAGE = 17

Invalid API Usage.

integer(kind=int32), public, parameter :: DTFFT_ERROR_PLAN_IS_CREATED = 18

Trying to create already created plan

integer(kind=int32), public, parameter :: DTFFT_ERROR_ALLOC_FAILED = 19

Internal allocation failed

integer(kind=int32), public, parameter :: DTFFT_ERROR_FREE_FAILED = 20

Internal memory free failed

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_ALLOC_BYTES = 21

Invalid alloc_bytes provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_DLOPEN_FAILED = 22

dlopen failed

integer(kind=int32), public, parameter :: DTFFT_ERROR_DLSYM_FAILED = 23

dlsym failed

integer(kind=int32), public, parameter :: DTFFT_ERROR_R2C_TRANSPOSE_CALLED = 24

Calling to transpose method for R2C plan is not allowed

integer(kind=int32), public, parameter :: DTFFT_ERROR_R2R_FFT_NOT_SUPPORTED = 101

Selected executor do not support R2R FFTs

integer(kind=int32), public, parameter :: DTFFT_ERROR_GPU_INVALID_STREAM = 201

Invalid stream provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_GPU_INVALID_BACKEND = 202

Invalid GPU backend provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_GPU_NOT_SET = 203

Multiple MPI Processes located on same host share same GPU which is not supported

integer(kind=int32), public, parameter :: DTFFT_ERROR_VKFFT_R2R_2D_PLAN = 204

When using R2R FFT and executor type is vkFFT and plan uses Z-slab optimization, it is required that types of R2R transform are same in X and Y directions

integer(kind=int32), public, parameter :: DTFFT_ERROR_GPU_BACKENDS_DISABLED = 205

Passed effort == DTFFT_PATIENT but all GPU Backends has been disabled by dtfft_config_t */

integer(kind=int32), public, parameter :: DTFFT_ERROR_NOT_DEVICE_PTR = 300

One of pointers passed to plan.execute or plan.transpose cannot be accessed from device

integer(kind=int32), public, parameter :: DTFFT_ERROR_NOT_NVSHMEM_PTR = 301

One of pointers passed to plan.execute or plan.transpose is not an NVSHMEM pointer

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_PLATFORM = 400

Invalid platform provided

integer(kind=int32), public, parameter :: DTFFT_ERROR_INVALID_PLATFORM_EXECUTOR_TYPE = 401

Invalid executor provided for selected platform

integer(kind=int32), public, parameter :: VARIABLE_NOT_SET = -111

Default value when environ is not set

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_MPI_DATATYPE = dtfft_backend_t(21)

Backend that uses MPI datatypes Not really recommended to use, since it is a million times slower than other backends Left here just to show how slow MPI Datatypes are for GPU usage

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_MPI_P2P = dtfft_backend_t(22)

MPI peer-to-peer algorithm

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_MPI_A2A = dtfft_backend_t(23)

MPI backend using MPI_Alltoallv

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_NCCL = dtfft_backend_t(24)

NCCL backend

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_MPI_P2P_PIPELINED = dtfft_backend_t(26)

MPI peer-to-peer algorithm with overlapping data copying and unpacking

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_NCCL_PIPELINED = dtfft_backend_t(27)

NCCL backend with overlapping data copying and unpacking

type(dtfft_backend_t), public, parameter :: DTFFT_BACKEND_CUFFTMP = dtfft_backend_t(25)

cuFFTMp backend

type(dtfft_backend_t), public, parameter :: BACKEND_NOT_SET = dtfft_backend_t(VARIABLE_NOT_SET)

Backend is not used

type(dtfft_backend_t), public, parameter :: VALID_GPU_BACKENDS(*) = [DTFFT_BACKEND_MPI_DATATYPE, DTFFT_BACKEND_MPI_P2P, DTFFT_BACKEND_MPI_A2A, DTFFT_BACKEND_MPI_P2P_PIPELINED, DTFFT_BACKEND_NCCL_PIPELINED, DTFFT_BACKEND_NCCL, DTFFT_BACKEND_CUFFTMP]

List of valid GPU backends

type(dtfft_stream_t), public, parameter :: NULL_STREAM = dtfft_stream_t(c_null_ptr)
type(dtfft_platform_t), public, parameter :: DTFFT_PLATFORM_HOST = dtfft_platform_t(1)

Host platform

type(dtfft_platform_t), public, parameter :: DTFFT_PLATFORM_CUDA = dtfft_platform_t(2)

CUDA platform

type(dtfft_platform_t), public, parameter :: PLATFORM_NOT_SET = dtfft_platform_t(VARIABLE_NOT_SET)
type(dtfft_execute_t), private, parameter :: VALID_EXECUTE_TYPES(*) = [DTFFT_EXECUTE_FORWARD, DTFFT_EXECUTE_BACKWARD]

Valid execute types

type(dtfft_transpose_t), private, parameter :: VALID_TRANSPOSE_TYPES(*) = [DTFFT_TRANSPOSE_X_TO_Y, DTFFT_TRANSPOSE_Y_TO_X, DTFFT_TRANSPOSE_Y_TO_Z, DTFFT_TRANSPOSE_Z_TO_Y, DTFFT_TRANSPOSE_X_TO_Z, DTFFT_TRANSPOSE_Z_TO_X]

Types of transpose that are valid to pass to transpose method

type(dtfft_executor_t), private, parameter :: VALID_EXECUTORS(*) = [DTFFT_EXECUTOR_NONE, DTFFT_EXECUTOR_FFTW3, DTFFT_EXECUTOR_MKL, DTFFT_EXECUTOR_CUFFT, DTFFT_EXECUTOR_VKFFT]

List of valid executors

type(dtfft_executor_t), private, parameter :: HOST_EXECUTORS(*) = [DTFFT_EXECUTOR_NONE, DTFFT_EXECUTOR_FFTW3, DTFFT_EXECUTOR_MKL]

List of host executors

type(dtfft_executor_t), private, parameter :: CUDA_EXECUTORS(*) = [DTFFT_EXECUTOR_NONE, DTFFT_EXECUTOR_CUFFT, DTFFT_EXECUTOR_VKFFT]

List of CUDA executors

type(dtfft_effort_t), private, parameter :: VALID_EFFORTS(*) = [DTFFT_ESTIMATE, DTFFT_MEASURE, DTFFT_PATIENT]

Valid effort flags

type(dtfft_precision_t), private, parameter :: VALID_PRECISIONS(*) = [DTFFT_SINGLE, DTFFT_DOUBLE]

Valid precision flags

type(dtfft_r2r_kind_t), private, parameter :: VALID_R2R_KINDS(*) = [DTFFT_DCT_1, DTFFT_DCT_2, DTFFT_DCT_3, DTFFT_DCT_4, DTFFT_DST_1, DTFFT_DST_2, DTFFT_DST_3, DTFFT_DST_4]

Array of valid R2R kinds

integer(kind=int8), private, parameter :: VALID_DIMENSIONS(*) = [2_int8, 3_int8]

Valid dimensions for plan.create

integer(kind=int32), private, parameter :: VALID_COMM_TYPES(*) = [MPI_UNDEFINED, MPI_CART]

Valid communicator types for plan.create

type(dtfft_backend_t), private, parameter :: PIPELINED_BACKENDS(*) = [DTFFT_BACKEND_MPI_P2P_PIPELINED, DTFFT_BACKEND_NCCL_PIPELINED]

List of pipelined backends

type(dtfft_backend_t), private, parameter :: MPI_BACKENDS(*) = [DTFFT_BACKEND_MPI_P2P, DTFFT_BACKEND_MPI_A2A, DTFFT_BACKEND_MPI_P2P_PIPELINED]

List of MPI backends

type(dtfft_backend_t), private, parameter :: NCCL_BACKENDS(*) = [DTFFT_BACKEND_NCCL, DTFFT_BACKEND_NCCL_PIPELINED]

List of NCCL backends

type(dtfft_backend_t), private, parameter :: NVSHMEM_BACKENDS(*) = [DTFFT_BACKEND_CUFFTMP]

List of NVSHMEM-based backends

type(dtfft_platform_t), private, parameter :: VALID_PLATFORMS(*) = [DTFFT_PLATFORM_HOST, DTFFT_PLATFORM_CUDA]

Valid platforms


Interfaces

public interface dtfft_get_version

Get dtFFT version

  • private function dtfft_get_version_current() bind(C)

    Returns the current version code

    Arguments

    None

    Return Value integer(kind=c_int32_t)

  • private function dtfft_get_version_required(major, minor, patch)

    Returns the version code required by the user

    Arguments

    Type IntentOptional Attributes Name
    integer(kind=int32), intent(in) :: major

    Major version

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

    Minor version

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

    Patch version

    Return Value integer(kind=int32)

public interface operator(==)

  • private pure elemental function execute_type_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_execute_t), intent(in) :: left
    type(dtfft_execute_t), intent(in) :: right

    Return Value logical

  • private pure elemental function transpose_type_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_transpose_t), intent(in) :: left
    type(dtfft_transpose_t), intent(in) :: right

    Return Value logical

  • private pure elemental function executor_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_executor_t), intent(in) :: left
    type(dtfft_executor_t), intent(in) :: right

    Return Value logical

  • private pure elemental function effort_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_effort_t), intent(in) :: left
    type(dtfft_effort_t), intent(in) :: right

    Return Value logical

  • private pure elemental function precision_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_precision_t), intent(in) :: left
    type(dtfft_precision_t), intent(in) :: right

    Return Value logical

  • private pure elemental function r2r_kind_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_r2r_kind_t), intent(in) :: left
    type(dtfft_r2r_kind_t), intent(in) :: right

    Return Value logical

  • private pure elemental function platform_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_platform_t), intent(in) :: left
    type(dtfft_platform_t), intent(in) :: right

    Return Value logical

  • private pure elemental function gpu_backend_eq(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_backend_t), intent(in) :: left
    type(dtfft_backend_t), intent(in) :: right

    Return Value logical

public interface operator(/=)

  • private pure elemental function execute_type_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_execute_t), intent(in) :: left
    type(dtfft_execute_t), intent(in) :: right

    Return Value logical

  • private pure elemental function transpose_type_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_transpose_t), intent(in) :: left
    type(dtfft_transpose_t), intent(in) :: right

    Return Value logical

  • private pure elemental function executor_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_executor_t), intent(in) :: left
    type(dtfft_executor_t), intent(in) :: right

    Return Value logical

  • private pure elemental function effort_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_effort_t), intent(in) :: left
    type(dtfft_effort_t), intent(in) :: right

    Return Value logical

  • private pure elemental function precision_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_precision_t), intent(in) :: left
    type(dtfft_precision_t), intent(in) :: right

    Return Value logical

  • private pure elemental function r2r_kind_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_r2r_kind_t), intent(in) :: left
    type(dtfft_r2r_kind_t), intent(in) :: right

    Return Value logical

  • private pure elemental function platform_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_platform_t), intent(in) :: left
    type(dtfft_platform_t), intent(in) :: right

    Return Value logical

  • private pure elemental function gpu_backend_ne(left, right) result(res)

    Arguments

    Type IntentOptional Attributes Name
    type(dtfft_backend_t), intent(in) :: left
    type(dtfft_backend_t), intent(in) :: right

    Return Value logical

public interface dtfft_stream_t

Creates dtfft_stream_t from integer(cuda_stream_kind)

  • private function stream_from_int64(cuda_stream) result(stream)

    Creates dtfft_stream_t from integer(cuda_stream_kind)

    Arguments

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

    CUDA stream

    Return Value type(dtfft_stream_t)

    dtfft Stream


Derived Types

type, public, bind(C) ::  dtfft_execute_t

Type that is used during call to execute method

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_transpose_t

Type that is used during call to transpose method

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_executor_t

Type that specifies external FFT executor

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_effort_t

Type that specifies effort that dtFFT should use when creating plan

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_precision_t

Type that specifies precision of dtFFT plan

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_r2r_kind_t

Type that specifies various kinds of R2R FFTs

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_backend_t

Type that specifies various GPU Backend present in dtFFT

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value

type, public, bind(C) ::  dtfft_stream_t

dtFFT stream representation.

Components

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

Actual stream

Constructor

Creates dtfft_stream_t from integer(cuda_stream_kind)

private function stream_from_int64 (cuda_stream)

Creates dtfft_stream_t from integer(cuda_stream_kind)

type, public, bind(C) ::  dtfft_platform_t

Type that specifies runtime platform, e.g. Host, CUDA, HIP

Components

Type Visibility Attributes Name Initial
integer(kind=c_int32_t), public :: val

Internal value


Functions

public pure elemental function is_valid_execute_type(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_execute_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_transpose_type(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_transpose_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_executor(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_executor_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_effort(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_effort_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_precision(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_precision_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_r2r_kind(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_r2r_kind_t), intent(in) :: param

Return Value logical

public pure elemental function is_host_executor(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_executor_t), intent(in) :: param

Return Value logical

public pure elemental function is_cuda_executor(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_executor_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_platform(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_platform_t), intent(in) :: param

Return Value logical

public pure elemental function is_valid_dimension(param) result(res)

Arguments

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

Return Value logical

public pure elemental function is_valid_comm_type(param) result(res)

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: param

Return Value logical

public pure function dtfft_get_error_string(error_code) result(error_string)

Gets the string description of an error code

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: error_code

Error code

Return Value character(len=:), allocatable

Error string

public pure elemental function is_valid_gpu_backend(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: param

Return Value logical

public pure elemental function is_backend_pipelined(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: param

Return Value logical

public pure elemental function is_backend_mpi(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: param

Return Value logical

public pure elemental function is_backend_nccl(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: param

Return Value logical

public pure elemental function is_backend_nvshmem(param) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: param

Return Value logical

public function dtfft_get_backend_string(backend) result(string)

Gets the string description of a GPU backend

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: backend

GPU backend

Return Value character(len=:), allocatable

Backend string

public function dtfft_get_cuda_stream(stream) result(cuda_stream)

Returns the CUDA stream from dtfft_stream_t

Arguments

Type IntentOptional Attributes Name
type(dtfft_stream_t), intent(in) :: stream

dtfft stream

Return Value integer(kind=int64)

CUDA stream

private pure elemental function execute_type_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_execute_t), intent(in) :: left
type(dtfft_execute_t), intent(in) :: right

Return Value logical

private pure elemental function transpose_type_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_transpose_t), intent(in) :: left
type(dtfft_transpose_t), intent(in) :: right

Return Value logical

private pure elemental function executor_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_executor_t), intent(in) :: left
type(dtfft_executor_t), intent(in) :: right

Return Value logical

private pure elemental function effort_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_effort_t), intent(in) :: left
type(dtfft_effort_t), intent(in) :: right

Return Value logical

private pure elemental function precision_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_precision_t), intent(in) :: left
type(dtfft_precision_t), intent(in) :: right

Return Value logical

private pure elemental function r2r_kind_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_r2r_kind_t), intent(in) :: left
type(dtfft_r2r_kind_t), intent(in) :: right

Return Value logical

private pure elemental function platform_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_platform_t), intent(in) :: left
type(dtfft_platform_t), intent(in) :: right

Return Value logical

private pure elemental function execute_type_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_execute_t), intent(in) :: left
type(dtfft_execute_t), intent(in) :: right

Return Value logical

private pure elemental function transpose_type_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_transpose_t), intent(in) :: left
type(dtfft_transpose_t), intent(in) :: right

Return Value logical

private pure elemental function executor_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_executor_t), intent(in) :: left
type(dtfft_executor_t), intent(in) :: right

Return Value logical

private pure elemental function effort_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_effort_t), intent(in) :: left
type(dtfft_effort_t), intent(in) :: right

Return Value logical

private pure elemental function precision_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_precision_t), intent(in) :: left
type(dtfft_precision_t), intent(in) :: right

Return Value logical

private pure elemental function r2r_kind_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_r2r_kind_t), intent(in) :: left
type(dtfft_r2r_kind_t), intent(in) :: right

Return Value logical

private pure elemental function platform_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_platform_t), intent(in) :: left
type(dtfft_platform_t), intent(in) :: right

Return Value logical

private function dtfft_get_version_current() bind(C)

Returns the current version code

Arguments

None

Return Value integer(kind=c_int32_t)

private function dtfft_get_version_required(major, minor, patch)

Returns the version code required by the user

Arguments

Type IntentOptional Attributes Name
integer(kind=int32), intent(in) :: major

Major version

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

Minor version

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

Patch version

Return Value integer(kind=int32)

private pure elemental function gpu_backend_eq(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: left
type(dtfft_backend_t), intent(in) :: right

Return Value logical

private pure elemental function gpu_backend_ne(left, right) result(res)

Arguments

Type IntentOptional Attributes Name
type(dtfft_backend_t), intent(in) :: left
type(dtfft_backend_t), intent(in) :: right

Return Value logical

private function stream_from_int64(cuda_stream) result(stream)

Creates dtfft_stream_t from integer(cuda_stream_kind)

Arguments

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

CUDA stream

Return Value type(dtfft_stream_t)

dtfft Stream