Highly Efficient FFT for Exascale: HeFFTe v2.3
Collaboration diagram for Backend oneAPI:

Classes

struct  heffte::backend::is_enabled< onemkl >
 Indicate that the oneMKL backend has been enabled. More...
 
struct  heffte::backend::is_enabled< onemkl_cos >
 Indicate that the oneMKL backend has been enabled. More...
 
struct  heffte::backend::is_enabled< onemkl_sin >
 Indicate that the oneMKL backend has been enabled. More...
 
struct  heffte::backend::device_instance< tag::gpu >
 The CUDA backend uses a CUDA stream. More...
 
struct  heffte::backend::buffer_traits< onemkl >
 Defines the location type-tag and the oneAPI container. More...
 
struct  heffte::backend::buffer_traits< onemkl_cos >
 Defines the location type-tag and the oneAPI container. More...
 
struct  heffte::backend::buffer_traits< onemkl_sin >
 Defines the location type-tag and the oneAPI container. More...
 
class  heffte::onemkl_executor
 Wrapper around the oneMKL API. More...
 
class  heffte::onemkl_executor_r2c
 Wrapper to oneMKL API for real-to-complex transform with shortening of the data. More...
 
struct  heffte::one_dim_backend< backend::onemkl >
 Helper struct that defines the types and creates instances of one-dimensional executors. More...
 
struct  heffte::one_dim_backend< backend::onemkl_cos >
 Helper struct that defines the types and creates instances of one-dimensional executors. More...
 
struct  heffte::one_dim_backend< backend::onemkl_sin >
 Helper struct that defines the types and creates instances of one-dimensional executors. More...
 
struct  heffte::default_plan_options< backend::onemkl >
 Sets the default options for the oneMKL backend. More...
 
struct  heffte::default_plan_options< backend::onemkl_cos >
 Sets the default options for the oneMKL backend. More...
 
struct  heffte::default_plan_options< backend::onemkl_sin >
 Sets the default options for the oneMKL backend. More...
 
struct  heffte::backend::onemkl
 Type-tag for the oneMKL backend. More...
 
struct  heffte::backend::onemkl_cos
 Type-tag for the Cosine Transform using the oneMKL backend. More...
 
struct  heffte::backend::onemkl_sin
 Type-tag for the Sine Transform using the oneMKL backend. More...
 

Functions

template<typename precision_type , typename index >
void heffte::oapi::convert (sycl::queue &stream, index num_entries, precision_type const source[], std::complex< precision_type > destination[])
 Convert real numbers to complex when both are located on the GPU device. More...
 
template<typename precision_type , typename index >
void heffte::oapi::convert (sycl::queue &stream, index num_entries, std::complex< precision_type > const source[], precision_type destination[])
 Convert complex numbers to real when both are located on the GPU device. More...
 
template<typename scalar_type , typename index >
void heffte::oapi::scale_data (sycl::queue &stream, index num_entries, scalar_type *data, double scale_factor)
 Scales real data (double or float) by the scaling factor.
 
template<typename scalar_type , typename index >
void heffte::oapi::direct_pack (sycl::queue &stream, index nfast, index nmid, index nslow, index line_stride, index plane_stide, scalar_type const source[], scalar_type destination[])
 Performs a direct-pack operation for data sitting on the GPU device. More...
 
template<typename scalar_type , typename index >
void heffte::oapi::direct_unpack (sycl::queue &stream, index nfast, index nmid, index nslow, index line_stride, index plane_stide, scalar_type const source[], scalar_type destination[])
 Performs a direct-unpack operation for data sitting on the GPU device. More...
 
template<typename scalar_type , typename index >
void heffte::oapi::transpose_unpack (sycl::queue &stream, index nfast, index nmid, index nslow, index line_stride, index plane_stide, index buff_line_stride, index buff_plane_stride, int map0, int map1, int map2, scalar_type const source[], scalar_type destination[])
 Performs a transpose-unpack operation for data sitting on the GPU device. More...
 
template<>
std::string heffte::backend::name< onemkl > ()
 Returns the human readable name of the oneMKL backend.
 
template<>
std::string heffte::backend::name< onemkl_cos > ()
 Returns the human readable name of the oneMKL backend.
 
template<>
std::string heffte::backend::name< onemkl_sin > ()
 Returns the human readable name of the oneMKL backend.
 

Variables

sycl::queue heffte::oapi::internal_sycl_queue
 Default queue to use in case the user does not provide one. More...
 

Detailed Description

Wrappers and template specializations related to the oneMKL backend. Requires CMake option:

-D Heffte_ENABLE_ONEAPI=ON

In addition to the oneMKL wrappers, this also includes a series of kernels for packing/unpacking/scaling the data, as well as a simple container that wraps around SYCL arrays for RAII style of resource management.

Function Documentation

◆ convert() [1/2]

template<typename precision_type , typename index >
void heffte::oapi::convert ( sycl::queue &  stream,
index  num_entries,
precision_type const  source[],
std::complex< precision_type >  destination[] 
)

Convert real numbers to complex when both are located on the GPU device.

Launches a SYCL/DPC++ kernel.

◆ convert() [2/2]

template<typename precision_type , typename index >
void heffte::oapi::convert ( sycl::queue &  stream,
index  num_entries,
std::complex< precision_type > const  source[],
precision_type  destination[] 
)

Convert complex numbers to real when both are located on the GPU device.

Launches a SYCL/DPC++ kernel.

◆ direct_pack()

template<typename scalar_type , typename index >
void heffte::oapi::direct_pack ( sycl::queue &  stream,
index  nfast,
index  nmid,
index  nslow,
index  line_stride,
index  plane_stide,
scalar_type const  source[],
scalar_type  destination[] 
)

Performs a direct-pack operation for data sitting on the GPU device.

Launches a SYCL/DPC++ kernel.

◆ direct_unpack()

template<typename scalar_type , typename index >
void heffte::oapi::direct_unpack ( sycl::queue &  stream,
index  nfast,
index  nmid,
index  nslow,
index  line_stride,
index  plane_stide,
scalar_type const  source[],
scalar_type  destination[] 
)

Performs a direct-unpack operation for data sitting on the GPU device.

Launches a SYCL/DPC++ kernel.

◆ transpose_unpack()

template<typename scalar_type , typename index >
void heffte::oapi::transpose_unpack ( sycl::queue &  stream,
index  nfast,
index  nmid,
index  nslow,
index  line_stride,
index  plane_stide,
index  buff_line_stride,
index  buff_plane_stride,
int  map0,
int  map1,
int  map2,
scalar_type const  source[],
scalar_type  destination[] 
)

Performs a transpose-unpack operation for data sitting on the GPU device.

Launches a SYCL/DPC++ kernel.

Variable Documentation

◆ internal_sycl_queue

sycl::queue heffte::oapi::internal_sycl_queue
extern

Default queue to use in case the user does not provide one.

The SYCL/DPC++ standard does not provide a default queue, unlike CUDA and ROCm. For API consistency, heFFTe will use this queue which will be shard by all objects created by the library. However, it is strongly recommended that the user provide their own queue in the constructor of the heffte::fft3d and heffte::fft3d_r2c objects.