1 #include <curand_kernel.h>
2 #define SQRT2 1.414213562373095f
3 #define ONE_OVER_SQRT2 0.707106781186547f
11 namespace mycuda_random {
14 __global__
void random_init( curandState_t *state,
const int seed,
const int n )
16 int tid = blockIdx.x*blockDim.x + threadIdx.x;
17 int nthreads = blockDim.x*gridDim.x;
19 for (
int i=tid; i<
n; i+=nthreads) {
20 curand_init( seed, i, 0, &state[tid] );
27 int tid = blockIdx.x*blockDim.x + threadIdx.x;
28 int nthreads = blockDim.x*gridDim.x;
30 curandState_t s = state[tid];
31 for (
int i=tid; i<
n; i+=nthreads) {
32 z[i] = curand_normal( &s );
48 int tid = blockIdx.x*blockDim.x + threadIdx.x;
49 int nthreads = blockDim.x*gridDim.x;
51 curandState_t s = state[tid];
52 for (
int i=tid; i<
n; i+=nthreads) {
53 z[i] = curand_uniform( &s );
66 return -
SQRT2*erfcinv( 2.0f*q );