Device Support

Data Parallel C++ supports several types of devices:

  • Host device: Performs computations directly on the current CPU

  • CPU device: Performs computations on a CPU using OpenCL™

  • GPU device: Performs computations on a GPU

All Data Parallel C++ routines of Intel® oneMKL RNG support at least the Host and CPU devices. GPU devices are supported for the following engines:

  • oneapi::mkl::rng::mcg31m1

  • oneapi::mkl::rng::mcg59

  • oneapi::mkl::rng::mrg32k3a

  • oneapi::mkl::rng::mt19937

  • oneapi::mkl::rng::mt2203

  • oneapi::mkl::rng::philox4x32x10

  • oneapi::mkl::rng::sobol

GPU devices are supported for the following distributions:

Distributions with Host, CPU, and GPU Device Support

Statistics

Precision

Method

oneapi::mkl::rng::bernoulli

std::int32_t std::uint32_t

oneapi::mkl::rng::bernoulli_method::icdf

oneapi::mkl::rng::bits

std::uint32_t

oneapi::mkl::rng::exponential

float double

oneapi::mkl::rng::exponential_method::icdf oneapi::mkl::rng::exponential_method::icdf_accurate

oneapi::mkl::rng::cauchy

float double

oneapi::mkl::rng::cauchy_method::icdf

oneapi::mkl::rng::gumbel

float double

oneapi::mkl::rng::gumbel_method::icdf

oneapi::mkl::rng::gaussian

float double

oneapi::mkl::rng::gaussian_method::box_muller oneapi::mkl::rng::gaussian_method::box_muller2 oneapi::mkl::rng::gaussian_method::icdf

oneapi::mkl::rng::geometric

std::int32_t std::uint32_t

oneapi::mkl::rng::geometric_method::icdf

oneapi::mkl::rng::laplace

float double

oneapi::mkl::rng::laplace_method::icdf

oneapi::mkl::rng::lognormal

float double

oneapi::mkl::rng::lognormal_method::box_muller2 oneapi::mkl::rng::lognormal_method::icdf oneapi::mkl::rng::lognormal_method::box_muller2_accurate oneapi::mkl::rng::lognormal_method::icdf_accurate

oneapi::mkl::rng::poisson

std::int32_t std::uint32_t

mkl:rng::poisson_method::gaussian_icdf_based

oneapi::mkl::rng::rayleigh

float double

oneapi::mkl::rng::rayleigh_method::icdf oneapi::mkl::rng::rayleigh_method::icdf_accurate

oneapi::mkl::rng::uniform

float double std::int32_t

oneapi::mkl::rng::uniform_method::standard oneapi::mkl::rng::uniform_method::standard_accurate

oneapi::mkl::rng::uniform_bits

std::uint32_t std::uint64_t

oneapi::mkl::rng::weibull

float double

oneapi::mkl::rng::weibull_method::icdf oneapi::mkl::rng::weibull_method::icdf_accurate

Refer to Engines (Basic Random Number Generators) and Distribution Generators for more detailed descriptions of each routine.