45 MersenneTwister() =
default;
48 std::uint32_t
const& seed,
49 std::uint32_t
const& subsequence = 0,
50 std::uint32_t
const& offset = 0)
52 state((seed ^ subsequence) + offset)
57 using result_type = std::mt19937::result_type;
61 return std::mt19937::min();
66 return std::mt19937::max();
85 class TinyMersenneTwister
90 TinyMersenneTwister() =
default;
93 std::uint32_t
const& seed,
94 std::uint32_t
const& subsequence = 0,
95 std::uint32_t
const& offset = 0)
97 state((seed ^ subsequence) + offset)
128 std::random_device state;
131 RandomDevice() =
default;
133 ALPAKA_FN_HOST RandomDevice(std::uint32_t
const&, std::uint32_t
const& = 0, std::uint32_t
const& = 0)
138 using result_type = std::random_device::result_type;
142 return std::random_device::min();
147 return std::random_device::max();
157 namespace distribution::cpu
163 template<
typename TEngine>
166 return m_dist(engine);
170 std::normal_distribution<T> m_dist;
177 template<
typename TEngine>
180 return m_dist(engine);
184 std::uniform_real_distribution<T> m_dist;
191 template<
typename TEngine>
194 return m_dist(engine);
198 std::uniform_int_distribution<T> m_dist{
200 std::numeric_limits<T>::max()};
204 namespace distribution::trait
208 struct CreateNormalReal<
RandStdLib, T,
std::enable_if_t<std::is_floating_point_v<T>>>
218 struct CreateUniformReal<
RandStdLib, T,
std::enable_if_t<std::is_floating_point_v<T>>>
228 struct CreateUniformUint<
RandStdLib, T,
std::enable_if_t<std::is_integral_v<T>>>
237 namespace engine::trait
245 std::uint32_t
const& seed = 0,
246 std::uint32_t
const& subsequence = 0,
247 std::uint32_t
const& offset = 0) -> cpu::TinyMersenneTwister
249 return {seed, subsequence, offset};
258 std::uint32_t
const& seed = 0,
259 std::uint32_t
const& subsequence = 0,
260 std::uint32_t
const& offset = 0) -> cpu::MersenneTwister
262 return {seed, subsequence, offset};
271 std::uint32_t
const& seed = 0,
272 std::uint32_t
const& subsequence = 0,
273 std::uint32_t
const& offset = 0) -> cpu::RandomDevice
275 return {seed, subsequence, offset};
The standard library mersenne twister implementation.
The standard library rand device implementation.
"Tiny" state mersenne twister implementation
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto createNormalReal(TRand const &rand)
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto createUniformUint(TRand const &rand)
ALPAKA_NO_HOST_ACC_WARNING ALPAKA_FN_HOST_ACC auto createUniformReal(TRand const &rand)
TinyMersenneTwister RandStdLib
Tag used in class inheritance hierarchies that describes that a specific interface (TInterface) is im...
The CPU random number normal distribution.
ALPAKA_FN_HOST auto operator()(TEngine &engine) -> T
Implementation of std::UniformRandomBitGenerator for TinyMT32.
std::uint32_t result_type
static constexpr auto max() -> result_type
static constexpr auto min() -> result_type
static ALPAKA_FN_HOST auto createDefault(MersenneTwister const &, std::uint32_t const &seed=0, std::uint32_t const &subsequence=0, std::uint32_t const &offset=0) -> cpu::MersenneTwister
static ALPAKA_FN_HOST auto createDefault(RandomDevice const &, std::uint32_t const &seed=0, std::uint32_t const &subsequence=0, std::uint32_t const &offset=0) -> cpu::RandomDevice
static ALPAKA_FN_HOST auto createDefault(TinyMersenneTwister const &, std::uint32_t const &seed=0, std::uint32_t const &subsequence=0, std::uint32_t const &offset=0) -> cpu::TinyMersenneTwister
The random number default generator engine get trait.