11 #ifndef EIGEN_CXX11_TENSOR_TENSOR_RANDOM_H
12 #define EIGEN_CXX11_TENSOR_TENSOR_RANDOM_H
21 #if defined(EIGEN_GPU_COMPILE_PHASE)
28 return random<uint64_t>();
36 *state = current * 6364136223846793005ULL + (stream << 1 | 1);
38 return static_cast<unsigned>((current ^ (current >> 22)) >> (22 + (current >> 61)));
43 return seed * 6364136223846793005ULL + 0xda3e39cb94b95bdbULL;
49 return static_cast<T>(rnd);
57 Eigen::half result = Eigen::numext::bit_cast<Eigen::half>(half_bits);
68 Eigen::bfloat16 result = Eigen::numext::bit_cast<Eigen::bfloat16>(half_bits);
82 result.raw = rnd & 0x7fffffu;
84 result.raw |= (
static_cast<uint32_t>(127) << 23);
86 return result.fp - 1.0f;
102 result.raw = (
static_cast<uint64_t>(rnd1) << 32) | rnd2;
104 result.raw |= (
static_cast<uint64_t>(1023) << 52);
106 return result.dp - 1.0;
120 template <
typename T>
128 #ifdef EIGEN_USE_SYCL
147 #ifdef EIGEN_USE_SYCL
148 m_exec_once = other.m_exec_once;
152 template <
typename Index>
154 #ifdef EIGEN_USE_SYCL
158 m_state += (
i * 6364136223846793005ULL);
162 T result = RandomToTypeUniform<T>(&
m_state,
i);
166 template <
typename Packet,
typename Index>
170 #ifdef EIGEN_USE_SYCL
173 m_state += (
i * 6364136223846793005ULL);
178 for (
int j = 0;
j < packetSize; ++
j) {
179 values[
j] = RandomToTypeUniform<T>(&
m_state,
i);
181 return internal::pload<Packet>(values);
186 #ifdef EIGEN_USE_SYCL
187 mutable bool m_exec_once;
191 template <
typename Scalar>
200 template <
typename T>
207 u = RandomToTypeUniform<T>(state, stream);
208 v =
T(1.7156) * (RandomToTypeUniform<T>(state, stream) -
T(0.5));
209 const T x = u -
T(0.449871);
211 q =
x *
x +
y * (
T(0.196) *
y -
T(0.25472) *
x);
212 }
while (
q >
T(0.27597) && (
q >
T(0.27846) ||
v *
v >
T(-4) *
numext::log(u) * u * u));
220 return std::complex<float>(RandomToTypeNormal<float>(state, stream), RandomToTypeNormal<float>(state, stream));
225 return std::complex<double>(RandomToTypeNormal<double>(state, stream), RandomToTypeNormal<double>(state, stream));
228 template <
typename T>
236 #ifdef EIGEN_USE_SYCL
252 #ifdef EIGEN_USE_SYCL
253 m_exec_once = other.m_exec_once;
257 template <
typename Index>
259 #ifdef EIGEN_USE_SYCL
262 m_state += (
i * 6364136223846793005ULL);
266 T result = RandomToTypeNormal<T>(&
m_state,
i);
270 template <
typename Packet,
typename Index>
274 #ifdef EIGEN_USE_SYCL
277 m_state += (
i * 6364136223846793005ULL);
282 for (
int j = 0;
j < packetSize; ++
j) {
283 values[
j] = RandomToTypeNormal<T>(&
m_state,
i);
285 return internal::pload<Packet>(values);
290 #ifdef EIGEN_USE_SYCL
291 mutable bool m_exec_once;
295 template <
typename Scalar>
Array< int, Dynamic, 1 > v
Definition: Array_initializer_list_vector_cxx11.cpp:1
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Eigen::Triplet< double > T
Definition: EigenUnitTest.cpp:11
#define EIGEN_UNROLL_LOOP
Definition: Macros.h:1298
#define EIGEN_DEVICE_FUNC
Definition: Macros.h:892
#define EIGEN_STRONG_INLINE
Definition: Macros.h:834
SCALAR Scalar
Definition: bench_gemm.cpp:45
Definition: TensorRandom.h:229
uint64_t m_state
Definition: TensorRandom.h:289
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NormalRandomGenerator(uint64_t seed=0)
Definition: TensorRandom.h:234
static constexpr bool PacketAccess
Definition: TensorRandom.h:231
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet packetOp(Index i) const
Definition: TensorRandom.h:271
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE NormalRandomGenerator(const NormalRandomGenerator &other)
Definition: TensorRandom.h:250
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T operator()(Index i) const
Definition: TensorRandom.h:258
dim3 threadIdx
Definition: gpu_common.h:16
dim3 blockDim
Definition: gpu_common.h:16
dim3 blockIdx
Definition: gpu_common.h:16
const Scalar & y
Definition: RandomImpl.h:36
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t get_random_seed()
Definition: TensorRandom.h:20
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T RandomToTypeNormal(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:201
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE float RandomToTypeUniform< float >(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:74
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE T RandomToTypeUniform(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:47
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE double RandomToTypeUniform< double >(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:90
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE uint64_t PCG_XSH_RS_state(uint64_t seed)
Definition: TensorRandom.h:41
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE unsigned PCG_XSH_RS_generator(uint64_t *state, uint64_t stream)
Definition: TensorRandom.h:32
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE T log(const T &x)
Definition: MathFunctions.h:1332
EIGEN_DEVICE_FUNC EIGEN_ALWAYS_INLINE std::enable_if_t< NumTraits< T >::IsSigned||NumTraits< T >::IsComplex, typename NumTraits< T >::Real > abs(const T &x)
Definition: MathFunctions.h:1355
EIGEN_DEVICE_FUNC const Scalar & q
Definition: SpecialFunctionsImpl.h:2019
std::uint16_t uint16_t
Definition: Meta.h:38
std::uint32_t uint32_t
Definition: Meta.h:40
std::uint64_t uint64_t
Definition: Meta.h:42
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
Definition: Eigen_Colamd.h:49
list x
Definition: plotDoE.py:28
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: BFloat16.h:101
Definition: XprHelper.h:205
@ PacketAccess
Definition: XprHelper.h:206
@ Cost
Definition: XprHelper.h:206
Definition: GenericPacketMath.h:134
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2
Definition: ZVector/PacketMath.h:50