sfmt19937

The SIMD-oriented Mersenne Twister pseudorandom number generator.

Description

SIMD-oriented Fast Mersenne Twister pseudorandom number generator SFMT19937 [Saito08] with a period length equal to \(2 ^ {19937}-1\) of the produced sequence. The state of the engine contains the array of 156 128-bit integers.

Generation algorithm

\(w_n = w_0 A \oplus w_M B \oplus w_{n-2} C \oplus w_{n-1} D\)

Where \(w_0, w_M, w_{n-2}, ...\) are the 128-bit integers, and \(wA, wB, wC, wD\) operations are defined as follows:

\(wA = (w << 8) \oplus w\), left shift of 128-bit integer \(w\) by \(a\) followed by exclusive-or operation

\(wB = (w >> 8) \& mask\), right shift of each 32-bit integer in quadruple \(w\) by and-operator with quadruple of 32-bit masks \(mask = (0xBFFFFFF6, 0xDFFAFFFF, 0xDDFECB7F, 0xDFFFFFEF)\)

\(wC = (w >> 8) \oplus w\), right shift of 128-bit integer \(w\)

\(wD = (w << 8)\), left shift of each 32-bit integer in quadruple \(w\)

Integer output: \(r_{4n+k} = w_{n}(k)\), where \(w_{n}(k)\) is the k-th 32-bit integer in quadruple \(w_{n}, k = 0, 1, 2, 3\)

\(u_n = (int) r_n / 2^{32} + 1/2\)

class sfmt19937

Syntax

namespace oneapi::mkl::rng {
class sfmt19937 {
public:
    static constexpr std::uint32_t default_seed = 1;

    sfmt19937(sycl::queue queue, std::uint32_t seed = default_seed);

    sfmt19937(sycl::queue queue, std::initializer_list<std::uint32_t> seed);

    sfmt19937(const sfmt19937& other);

    sfmt19937(sfmt19937&& other);

    sfmt19937& operator=(const sfmt19937& other);

    sfmt19937& operator=(sfmt19937&& other);

    ~sfmt19937();
};
}

Class Members

Routine

Description

sfmt19937(sycl::queue queue, std::uint32_t seed = default_seed)

Constructor for common seed initialization of the engine

sfmt19937(sycl::queue queue, std::initializer_list<std::uint32_t> seed)

Constructor for extended seed initialization of the engine

sfmt19937(const sfmt19937& other)

Copy constructor

sfmt19937(sfmt19937&& other)

Move constructor

sfmt19937& operator=(const sfmt19937& other)

Copy assignment operator

sfmt19937& operator=(sfmt19937&& other)

Move assignment operator

Constructors

sfmt19937::sfmt19937(sycl::queue queue, std::uint32_t seed = default_seed)

Input Parameters

queue

Valid sycl::queue object, calls of the oneapi::mkl::rng::generate() routine submits kernels in this queue to obtain random numbers from a given engine.

seed

The initial conditions of the generator state. The initialization algorithm described in [Saito08].

sfmt19937::sfmt19937(sycl::queue queue, std::initializer_list<std::uint32_t> seed)

Input Parameters

queue

Valid sycl::queue object, calls of the oneapi::mkl::rng::generate() routine submits kernels in this queue to obtain random numbers from a given engine.

seed

The initial conditions of the generator state. The initialization algorithm described in [Saito08].

sfmt19937::sfmt19937(const sfmt19937& other)

Input Parameters

other

Valid sfmt19937 object. The queue and state of the other engine is copied and applied to the current engine.

sfmt19937::sfmt19937(sfmt19937&& other)

Input Parameters

other

Valid sfmt19937 object. The queue and state of the other engine is moved to the current engine.

sfmt19937::sfmt19937& operator=(const sfmt19937& other)

Input Parameters

other

Valid sfmt19937 object. The queue and state of the other engine is copied and applied to the current engine.

sfmt19937::sfmt19937& operator=(sfmt19937&& other)

Input Parameters

other

Valid sfmt19937 r-value object. The queue and state of the other engine is moved to the current engine.

Parent topic: Engines (Basic Random Number Generators)