Highly Efficient FFT for Exascale: HeFFTe v2.4
Loading...
Searching...
No Matches
Collaboration diagram for Backend oneAPI:

Namespaces

namespace  heffte::oapi
 SYCL/DPC++ specific methods, vector-like container, error checking, etc.
 
namespace  heffte::data_scaling
 Specialization for the CPU case.
 

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::event_chainer
 Helper class to chain a series of compute calls with sycl::event. 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.
 
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.
 
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.
 
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.
 
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.
 
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.
 

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.