33 #define R123_USE_MULHILO64_MULHI_INTRIN 0
34 #define R123_USE_GNU_UINT128 1
39 #include <Random123/philox.h>
44 #if defined(CORENEURON_ENABLE_GPU)
45 #define CORENRN_RAN123_USE_UNIFIED_MEMORY true
47 #define CORENRN_RAN123_USE_UNIFIED_MEMORY false
79 inline std::size_t nrnran123_state_size() {
114 char which =
s->which_;
115 uint32_t rval{
s->r.v[
int{which++}]};
125 constexpr
double nrnran123_uint2dbl(uint32_t u) {
126 constexpr
double SHIFT32 = 1.0 / 4294967297.0;
129 return (
static_cast<double>(u) + 1.0) *
SHIFT32;
162 if (seq34 >
double(0XffffffffffLL)) {
167 unsigned long long x = ((
unsigned long long) seq34) & 0X3ffffffffLL;
168 char which = x & 0X3;
169 uint32_t seq = x >> 2;
186 w = (u1 * u1) + (u2 * u2);
CORENRN_HOST_DEVICE philox4x32_ctr_t coreneuron_random123_philox4x32_helper(coreneuron::nrnran123_State *s)
#define CORENRN_RAN123_USE_UNIFIED_MEMORY
nrn_pragma_acc(routine seq) nrn_pragma_omp(declare target) philox4x32_ctr_t coreneuron_random123_philox4x32_helper(coreneuron nrn_pragma_omp(end declare target) namespace coreneuron
Provide a helper function in global namespace that is declared target for OpenMP offloading to functi...
void declare(long subtype, Item *q, Item *qa)
void nrnran123_getids3(nrnran123_State *, std::uint32_t *id1, std::uint32_t *id2, std::uint32_t *id3)
void nrnran123_getids(nrnran123_State *s, std::uint32_t *id1, std::uint32_t *id2)
Get stream IDs from Random123 State object.
double nrnran123_uniform(nrnran123_State *)
double nrnran123_normal(nrnran123_State *)
double nrnran123_dblpick(nrnran123_State *)
nrnran123_State * nrnran123_newstream(std::uint32_t id1, std::uint32_t id2=0, std::uint32_t id3=0)
Construct a new Random123 stream based on the philox4x32 generator.
void nrnran123_setseq(nrnran123_State *s, std::uint32_t seq, char which)
Set a Random123 sequence for a sequnece ID and which selector.
std::uint32_t nrnran123_ipick(nrnran123_State *)
double nrnran123_negexp(nrnran123_State *)
void nrnran123_getseq(nrnran123_State *s, std::uint32_t *seq, char *which)
Get sequence number and selector from an nrnran123_State object.
static const double SHIFT32
THIS FILE IS AUTO GENERATED DONT MODIFY IT.
nrnran123_State * nrnran123_newstream3(uint32_t id1, uint32_t id2, uint32_t id3, bool use_unified_memory)
Allocate a new Random123 stream.
void nrnran123_set_globalindex(uint32_t gix)
void nrnran123_deletestream(nrnran123_State *s, bool use_unified_memory)
void nrnran123_destroy_global_state_on_device()
std::size_t nrnran123_instance_count()
void nrnran123_initialise_global_state_on_device()
uint32_t nrnran123_get_globalindex()
#define nrn_pragma_acc(x)