53#ifndef ROCRAND_THREEFRY4X32_20_H_
54#define ROCRAND_THREEFRY4X32_20_H_
56#include "rocrand/rocrand_threefry4_impl.h"
58#include <hip/hip_runtime.h>
60namespace rocrand_device
63class threefry4x32_20_engine :
public threefry_engine4_base<uint4, unsigned int, 20>
66 ROCRAND_DEPRECATED(
"Alias \"threefry4x32_20_state\" is deprecated. Use \"state_type\" instead.")
67 typedef threefry_engine4_base<uint4,
unsigned int, 20>::threefry_state_4 threefry4x32_20_state;
74 __forceinline__ __device__ __host__ threefry4x32_20_engine(const
unsigned long long seed = 0,
75 const
unsigned long long subsequence
77 const
unsigned long long offset = 0)
79 this->seed(seed, subsequence, offset);
87 __forceinline__ __device__ __host__
void seed(
const unsigned long long seed = 0,
88 const unsigned long long subsequence = 0,
89 const unsigned long long offset = 0)
91 m_state.counter = {0U, 0U, 0U, 0U};
92 m_state.result = {0U, 0U, 0U, 0U};
95 m_state.key = {
static_cast<unsigned int>(seed),
96 static_cast<unsigned int>(seed >> 16),
97 static_cast<unsigned int>(seed >> 32),
98 static_cast<unsigned int>(seed >> 48)};
100 this->discard_subsequence_impl(subsequence);
101 this->discard(offset);
102 m_state.result = this->threefry_rounds(m_state.counter, m_state.key);
108typedef rocrand_device::threefry4x32_20_engine rocrand_state_threefry4x32_20;
121__forceinline__ __device__ __host__
123 const unsigned long long subsequence,
124 const unsigned long long offset,
125 rocrand_state_threefry4x32_20* state)
127 *state = rocrand_state_threefry4x32_20(seed, subsequence, offset);
144__forceinline__ __device__ __host__
145unsigned int rocrand(rocrand_state_threefry4x32_20* state)
147 return state->next();
162__forceinline__ __device__ __host__
163uint4
rocrand4(rocrand_state_threefry4x32_20* state)
165 return state->next4();
__forceinline__ __device__ __host__ void rocrand_init(const uint4 seed, const unsigned int subsequence, rocrand_state_lfsr113 *state)
Initializes LFSR113 state.
Definition rocrand_lfsr113.h:239
__forceinline__ __device__ __host__ uint4 rocrand4(rocrand_state_philox4x32_10 *state)
Returns four uniformly distributed random unsigned int values from [0; 2^32 - 1] range.
Definition rocrand_philox4x32_10.h:379
__forceinline__ __device__ __host__ unsigned int rocrand(rocrand_state_lfsr113 *state)
Returns uniformly distributed random unsigned int value from [0; 2^32 - 1] range.
Definition rocrand_lfsr113.h:277