Changeset 5d1ebb9


Ignore:
Timestamp:
Jan 13, 2022, 9:42:08 PM (6 months ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
enum, forall-pointer-decay, master
Children:
75965a6
Parents:
919a6b2
Message:

remove thread_rand, remove consolidated random generators

Location:
libcfa/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/kernel/fwd.hfa

    r919a6b2 r5d1ebb9  
    7979                        return
    8080                        #if defined(__SIZEOF_INT128__)
    81                                 __lehmer64( kernelTLS().rand_seed );
     81                                lehmer64( kernelTLS().rand_seed );
    8282                        #else
    83                                 __xorshift64( kernelTLS().rand_seed );
     83                                xorshift_13_7_17( kernelTLS().rand_seed );
    8484                        #endif
    8585                }
    8686
    87                 #define M  (1_l64u << 48_l64u)
    88                 #define A  (25214903917_l64u)
    89                 #define AI (18446708753438544741_l64u)
    90                 #define C  (11_l64u)
    91                 #define D  (16_l64u)
    92 
    9387                static inline unsigned __tls_rand_fwd() {
    94                         kernelTLS().ready_rng.fwd_seed = (A * kernelTLS().ready_rng.fwd_seed + C) & (M - 1);
    95                         return kernelTLS().ready_rng.fwd_seed >> D;
     88                        return LCGBI_fwd( kernelTLS().ready_rng.fwd_seed );
    9689                }
    9790
    9891                static inline unsigned __tls_rand_bck() {
    99                         unsigned int r = kernelTLS().ready_rng.bck_seed >> D;
    100                         kernelTLS().ready_rng.bck_seed = AI * (kernelTLS().ready_rng.bck_seed - C) & (M - 1);
    101                         return r;
    102                 }
    103 
    104                 #undef M
    105                 #undef A
    106                 #undef AI
    107                 #undef C
    108                 #undef D
     92                        return LCGBI_bck( kernelTLS().ready_rng.bck_seed );
     93                }
    10994
    11095                static inline void __tls_rand_advance_bck(void) {
     
    140125                        }
    141126                }
    142 
    143                 extern uint64_t thread_rand();
    144127
    145128                // Semaphore which only supports a single thread
  • libcfa/src/concurrency/thread.cfa

    r919a6b2 r5d1ebb9  
    1010// Created On       : Tue Jan 17 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jan 12 18:46:48 2022
    13 // Update Count     : 36
     12// Last Modified On : Thu Jan 13 20:11:55 2022
     13// Update Count     : 42
    1414//
    1515
     
    2424#define __CFA_INVOKE_PRIVATE__
    2525#include "invoke.h"
    26 
    27 uint64_t thread_rand();
    2826
    2927extern uint32_t __global_random_seed;
     
    174172}
    175173
    176 uint64_t thread_rand() {
    177         disable_interrupts();
    178         uint64_t ret = __tls_rand();
    179         enable_interrupts();
    180         return ret;
    181 }
    182  
     174//-----------------------------------------------------------------------------
    183175#define GENERATOR LCG
    184 
    185 static inline uint32_t MarsagliaXor( uint32_t & state ) {
    186         uint32_t ret = state;
    187         state ^= state << 6;
    188         state ^= state >> 21;
    189         state ^= state << 7;
    190         return ret;
    191 } // MarsagliaXor
    192 
    193 static inline uint32_t LCG( uint32_t & state ) {                // linear congruential generator
    194         uint32_t ret = state;
    195         state = 36969 * (state & 65535) + (state >> 16);        // 36969 is NOT prime! No not change it!
    196         return ret;
    197 } // LCG
    198176
    199177void set_seed( uint32_t seed ) {
  • libcfa/src/stdlib.cfa

    r919a6b2 r5d1ebb9  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Wed Jan 12 18:52:41 2022
    13 // Update Count     : 582
     12// Last Modified On : Thu Jan 13 21:38:30 2022
     13// Update Count     : 593
    1414//
    1515
    1616#include "stdlib.hfa"
    17 //#include "concurrency/kernel/fwd.hfa"
     17#include "bits/random.hfa"
    1818#include "concurrency/invoke.h"                                                 // random_state
    1919
     
    223223//---------------------------------------
    224224
    225 // Pipelined to allow OoO overlap with reduced dependencies. Critically, return the current value, and compute and store
    226 // the next value.
    227 
    228225#define GENERATOR LCG
    229226
    230 static inline uint32_t MarsagliaXor( uint32_t & state ) {
    231         uint32_t ret = state;
    232         state ^= state << 6;
    233         state ^= state >> 21;
    234         state ^= state << 7;
    235         return ret;
    236 } // MarsagliaXor
    237 
    238 static inline uint32_t LCG( uint32_t & state ) {                // linear congruential generator
    239         uint32_t ret = state;
    240         state = 36969 * (state & 65535) + (state >> 16);        // 36969 is NOT prime! No not change it!
    241         return ret;
    242 } // LCG
    243 
    244227uint32_t __global_random_seed;                                                  // sequential/concurrent
    245 uint32_t __global_random_state;                                                 // sequential only
     228uint32_t __global_random_state;                                         // sequential only
    246229
    247230void set_seed( PRNG & prng, uint32_t seed_ ) with( prng ) { state = seed = seed_; GENERATOR( state ); } // set seed
Note: See TracChangeset for help on using the changeset viewer.