Host side helper to provide an abstraction over sycl::buffer to initialize and store engines’ states between DPC++ kernels.
template<Engine>
class engine_descriptor {
public:
engine_descriptor(sycl::queue& queue, sycl::range<1> range, std::uint64_t seed,
std::uint64_t offset);
engine_descriptor(sycl::queue& queue, sycl::range<1> range,
std::initializer_list<std::uint64_t> seed,
std::uint64_t offset);
engine_descriptor(sycl::queue& queue, sycl::range<1> range, std::uint64_t seed,
std::initializer_list<std::uint64_t> offset);
engine_descriptor(sycl::queue& queue, sycl::range<1> range,
std::initializer_list<std::uint64_t> seed,
std::initializer_list<std::uint64_t> offset);
engine_accessor<Engine> get_access(sycl::handler& cgh);
};
mkl_rng_sycl_device.hpp
engine_descriptor provides an abstraction over sycl::buffer to initialize and store engines’ states between SYCL kernels.
The constructor of the engine descriptor submits a parallel_for task to a given queue to initialize engines’ states:
Each engine is initialized as Engine {seed, id * offset} for scalar offset case, where id is a value from 0 to range.size().
Type | Description |
---|---|
Engine | Specify an engine which state is hold by engine descriptor. |
Name |
Type |
Description |
---|---|---|
queue |
sycl::queue& |
sycl::queue object. Task is submitted to this queue to initialize engines’ states directly on the device which is associated with queue. |
range |
sycl::range<1> |
Describes number of engines which are hold by this engine_descriptor object. |
seed |
std::uint64_t/std::initializer_list<std::uint64_t> |
Initial conditions of the engine state. |
offset |
std::uint64_t/std::initializer_list<std::uint64_t> |
Number of skipped elements, for initializer_list offset is calculated as: num_to_skip[0]+ num_to_skip[1]*264+ num_to_skip[2]* 2128+ … +num_to_skip[n-1]*264*(n-1). |