Changeset 12b5e94a


Ignore:
Timestamp:
Feb 9, 2022, 10:59:05 PM (2 years ago)
Author:
Peter A. Buhr <pabuhr@…>
Branches:
ADT, ast-experimental, enum, forall-pointer-decay, master, pthread-emulation, qualifiedEnum
Children:
454b4e0
Parents:
7a15b7e
Message:

add fast PRNG code

Location:
libcfa/src
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/concurrency/thread.cfa

    r7a15b7e r12b5e94a  
    1010// Created On       : Tue Jan 17 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan 13 20:11:55 2022
    13 // Update Count     : 42
     12// Last Modified On : Sat Jan 15 14:34:58 2022
     13// Update Count     : 45
    1414//
    1515
     
    179179        GENERATOR( active_thread()->random_state );
    180180} // set_seed
    181 uint32_t prng( void ) { return GENERATOR( active_thread()->random_state ); } // [0,UINT_MAX]
     181
     182uint32_t prng( void ) {                                                                 // [0,UINT_MAX]
     183        uint32_t & state = active_thread()->random_state;
     184        return GENERATOR( state );
     185} // prng
    182186
    183187// Local Variables: //
  • libcfa/src/concurrency/thread.hfa

    r7a15b7e r12b5e94a  
    1010// Created On       : Tue Jan 17 12:27:26 2017
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan  6 16:40:16 2022
    13 // Update Count     : 7
     12// Last Modified On : Wed Feb  9 22:10:14 2022
     13// Update Count     : 14
    1414//
    1515
     
    130130T & join( T & this );
    131131
     132//----------
     133static inline {
     134        uint32_t prng( thread$ & th ) __attribute__(( warn_unused_result )) { return LCG( th.random_state ); } // [0,UINT_MAX]
     135        uint32_t prng( thread$ & th, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( th ) % u; } // [0,u)
     136        uint32_t prng( thread$ & th, uint32_t l, uint32_t u ) __attribute__(( warn_unused_result )) { return prng( th, u - l + 1 ) + l; } // [l,u]
     137} // prng
     138
    132139// Local Variables: //
    133140// mode: c //
  • libcfa/src/stdlib.cfa

    r7a15b7e r12b5e94a  
    1010// Created On       : Thu Jan 28 17:10:29 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan 13 21:38:30 2022
    13 // Update Count     : 593
     12// Last Modified On : Sat Jan 15 14:33:21 2022
     13// Update Count     : 595
    1414//
    1515
     
    226226
    227227uint32_t __global_random_seed;                                                  // sequential/concurrent
    228 uint32_t __global_random_state;                                         // sequential only
     228uint32_t __global_random_state;                                                 // sequential only
    229229
    230230void set_seed( PRNG & prng, uint32_t seed_ ) with( prng ) { state = seed = seed_; GENERATOR( state ); } // set seed
    231 uint32_t prng( PRNG & prng ) with( prng ) { callcnt += 1; return GENERATOR( state ); }
    232231
    233232void set_seed( uint32_t seed ) { __global_random_seed = seed; GENERATOR( __global_random_state ); }
  • libcfa/src/stdlib.hfa

    r7a15b7e r12b5e94a  
    1010// Created On       : Thu Jan 28 17:12:35 2016
    1111// Last Modified By : Peter A. Buhr
    12 // Last Modified On : Thu Jan 13 21:34:46 2022
    13 // Update Count     : 636
     12// Last Modified On : Sat Jan 15 09:57:28 2022
     13// Update Count     : 640
    1414//
    1515
     
    1818#include "bits/defs.hfa"                                                                // OPTIONAL_THREAD
    1919#include "bits/align.hfa"                                                               // libAlign
     20#include "bits/random.hfa"                                                              // prng
    2021
    2122#include <stdlib.h>                                                                             // *alloc, strto*, ato*
     
    410411
    411412void set_seed( PRNG & prng, uint32_t seed_ );
    412 uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )); // [0,UINT_MAX]
    413413static inline {
     414        uint32_t prng( PRNG & prng ) __attribute__(( warn_unused_result )) with( prng ) { callcnt += 1; return LCG( state ); } // [0,UINT_MAX]
    414415        void ?{}( PRNG & prng ) { set_seed( prng, rdtscl() ); } // random seed
    415416        void ?{}( PRNG & prng, uint32_t seed ) { set_seed( prng, seed ); } // fixed seed
Note: See TracChangeset for help on using the changeset viewer.