Changeset 2210cfc for libcfa/src/stdlib.cfa
- Timestamp:
- Jan 10, 2022, 5:43:42 PM (2 years ago)
- Branches:
- ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
- Children:
- c52f033
- Parents:
- 4177592f
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
libcfa/src/stdlib.cfa
r4177592f r2210cfc 10 10 // Created On : Thu Jan 28 17:10:29 2016 11 11 // Last Modified By : Peter A. Buhr 12 // Last Modified On : Mon Jan 3 09:36:27202213 // Update Count : 5 1912 // Last Modified On : Mon Jan 10 17:07:21 2022 13 // Update Count : 572 14 14 // 15 15 16 16 #include "stdlib.hfa" 17 //#include "concurrency/kernel/fwd.hfa" 18 #include "concurrency/invoke.h" // random_state 17 19 18 20 //--------------------------------------- … … 221 223 //--------------------------------------- 222 224 223 static uint32_t seed = 0; // current seed224 static thread_local uint32_t state; // random state225 226 void set_seed( uint32_t seed_ ) { state = seed = seed_; }227 uint32_t get_seed() { return seed; }228 229 225 #define GENERATOR LCG 230 226 231 227 inline uint32_t MarsagliaXor( uint32_t & state ) { 232 if ( unlikely( seed == 0 ) ) set_seed( rdtscl() );233 else if ( unlikely( state == 0 ) ) state = seed;234 228 state ^= state << 6; 235 229 state ^= state >> 21; … … 239 233 240 234 inline uint32_t LCG( uint32_t & state ) { // linear congruential generator 241 if ( unlikely( seed == 0 ) ) set_seed( rdtscl() );242 else if ( unlikely( state == 0 ) ) state = seed;243 235 return state = 36969 * (state & 65535) + (state >> 16); // 36969 is NOT prime! 244 236 } // LCG 245 237 238 uint32_t __thread_seed = rdtscl(); // global thread seed 239 240 void set_seed( uint32_t seed ) { __thread_seed = seed; } 241 uint32_t get_seed() { return __thread_seed; } 246 242 uint32_t prng( PRNG & prng ) with( prng ) { callcnt += 1; return GENERATOR( state ); } 247 243 248 uint32_t prng( void ) { return GENERATOR( state ); }244 uint32_t prng( void ) { return GENERATOR( __thread_seed ); } // [0,UINT_MAX] 249 245 250 246 //---------------------------------------
Note: See TracChangeset
for help on using the changeset viewer.