19 template<
typename TCounter,
typename TKey>
45 template<
typename TParams>
109 static_assert(TParams::counterSize == 4,
"Only counterSize is supported.");
113 for(
auto numShifts =
state.
position; numShifts > 0; --numShifts)
121 this->
skip4(offset / 4);
132 :
state{{0, 0, 0, 0}, {
low32Bits(seed),
high32Bits(seed)}, {0, 0, 0, 0}, 0}
134 this->skipSubsequence(subsequence);
ALPAKA_FN_HOST_ACC void advanceCounter(Counter &counter)
typename PhiloxStateless< TParams >::Counter Counter
typename PhiloxStateless< TParams >::Key Key
ALPAKA_FN_HOST_ACC void skip4(uint64_t offset)
ALPAKA_FN_HOST_ACC void advanceState()
ALPAKA_FN_HOST_ACC auto nextNumber()
typename Base::Counter Counter
Counter type.
ALPAKA_FN_HOST_ACC auto operator()()
ALPAKA_FN_HOST_ACC PhiloxSingle(uint64_t seed=0, uint64_t subsequence=0, uint64_t offset=0)
State state
Internal engine state.
ALPAKA_FN_HOST_ACC void skip(uint64_t offset)
Skips the next offset numbers.
typename Base::Key Key
Key type.
static ALPAKA_FN_HOST_ACC auto nRounds(Counter const &counter_in, Key const &key_in) -> Counter
#define ALPAKA_FN_HOST_ACC
The random number generator engine specifics.
constexpr ALPAKA_FN_HOST_ACC auto high32Bits(std::uint64_t const x) -> std::uint32_t
Get high 32 bits of a 64-bit number.
constexpr ALPAKA_FN_HOST_ACC auto low32Bits(std::uint64_t const x) -> std::uint32_t
Get low 32 bits of a 64-bit number.
Counter result
Intermediate result array.
std::uint32_t position
Pointer to the active intermediate result element.
Counter counter
Counter array.