24template<
unsigned int N>
25static __host__ __device__ __inline__
unsigned int tea(
unsigned int val0,
unsigned int val1) {
26 unsigned int v0 = val0;
27 unsigned int v1 = val1;
30 for (
unsigned int n = 0; n < N; n++) {
32 v0 += ((v1 << 4) + 0xa341316c) ^ (v1 + s0) ^ ((v1 >> 5) + 0xc8013ea4);
33 v1 += ((v0 << 4) + 0xad90777d) ^ (v0 + s0) ^ ((v0 >> 5) + 0x7e95761e);
40static __host__ __device__ __inline__
unsigned int lcg(
unsigned int &prev) {
41 const unsigned int LCG_A = 1664525u;
42 const unsigned int LCG_C = 1013904223u;
43 prev = (LCG_A * prev + LCG_C);
44 return prev & 0x00FFFFFF;
48static __host__ __device__ __inline__
float rnd(
unsigned int &prev) {
49 return ((
float) lcg(prev) / (
float) 0x01000000);