10namespace alpaka::rand::engine::internal
25 template<
typename T_Params,
typename T_Impl>
26 class PhiloxBaseCommon :
public PhiloxStateless<T_Params>
29 using Counter =
typename PhiloxStateless<T_Params>::Counter;
30 using Key =
typename PhiloxStateless<T_Params>::Key;
32 using State = PhiloxState<Counter, Key, T_Impl>;
37 template<
typename TDistributionResultScalar>
38 using ResultContainer = Vec<TDistributionResultScalar, T_Params::counterSize>;
40 constexpr explicit PhiloxBaseCommon(State&& state) : state(std::move(state))
51 template<
typename T, auto N>
77 constexpr void skip4(uint64_t offset)
79 Counter& counter = this->state.counter;
80 Counter temp = counter;
81 counter[0] += low32Bits(offset);
82 counter[1] += high32Bits(offset) + (counter[0] < temp[0] ? 1 : 0);
83 counter[2] += (counter[0] < temp[1] ? 1u : 0u);
84 counter[3] += (counter[0] < temp[2] ? 1u : 0u);
93 constexpr void skipSubsequence(uint64_t subsequence)
95 Counter& counter = this->state.counter;
96 Counter temp = counter;
97 counter[2] += low32Bits(subsequence);
98 counter[3] += high32Bits(subsequence) + (counter[2] < temp[2] ? 1 : 0);
ALPAKA_FN_HOST_ACC Vec(T_1, T_Args...) -> Vec< T_1, uint32_t(sizeof...(T_Args)+1u), ArrayStorage< T_1, uint32_t(sizeof...(T_Args)+1u)> >