SYCL Kernels API#
Supported C++ Standard Library APIs and Algorithms#
oneDPL defines a subset of the C++ Standard library APIs for use in SYCL kernels. These APIs can be employed in the kernels similarly to how they are employed in code for a typical CPU-based platform.
Random Number Generation#
oneDPL provides a subset of the standard C++ pseudo-random number generation functionality
suitable to use within SYCL kernels. The APIs are defined in the <oneapi/dpl/random>
header.
Supported functionality:#
- Engine class templates:
linear_congruential_engine
subtract_with_carry_engine
- Engine adaptor class templates:
discard_block_engine
- Engines and engine adaptors with predefined parameters:
minstd_rand0
minstd_rand
ranlux24_base
ranlux48_base
ranlux24
ranlux48
- Distribution class templates:
uniform_int_distribution
uniform_real_distribtuon
normal_distribution
exponential_distribution
bernoulli_distribution
geometric_distribution
weibull_distribuion
lognormal_distribution
cauchy_distribution
extreme_value_distribution
Additionally, sycl::vec<>
can be used as the result type for engines, engine adaptors, and distributions.
Limitations:#
The following deviations from the C++ Standard may apply:
random_device
andseed_seq
classes and related APIs in other classes are not required;operator>>()
,operator<<()
,operator==()
are not required;specifying the size of a random number engine’s state is not required;
distributions are only required to operate with floating point types applicable to supported SYCL devices.
Function Objects#
The oneDPL function objects are defined in the <oneapi/dpl/functional>
header.
namespace oneapi {
namespace dpl {
struct identity
{
template <typename T>
constexpr T&&
operator()(T&& t) const noexcept;
};
}
}
The oneapi::dpl::identity
class implements an identity operation. Its function operator
receives an instance of a type and returns the argument unchanged.