PSCF v1.4.0
CudaVecRandom.h
1#ifndef PSCF_CUDA_RANDOM_H
2#define PSCF_CUDA_RANDOM_H
3
4#include "DeviceArray.h"
5
6#include <curand.h>
7
8/*
9* PSCF - Polymer Self-Consistent Field
10*
11* Copyright 2015 - 2025, The Regents of the University of Minnesota
12* Distributed under the terms of the GNU General Public License.
13*/
14
15namespace Pscf {
16
29 {
30
31 public:
32
37
41 virtual ~CudaVecRandom();
42
48 void setSeed(unsigned long long seed);
49
55 void uniform(DeviceArray<float>& data);
56
62 void uniform(DeviceArray<double>& data);
63
71 void uniform(DeviceArray<float>& data, float min, float max);
72
80 void uniform(DeviceArray<double>& data, double min, double max);
81
93 void normal(DeviceArray<float>& data,
94 float stddev, float mean = 0.0);
95
107 void normal(DeviceArray<double>& data,
108 double stddev, double mean = 0.0);
109
115 long seed();
116
117 private:
118
120 curandGenerator_t gen_;
121
123 unsigned long long seed_;
124
126 bool isInitialized_;
127
128 void errorCheck(curandStatus_t const & error);
129
130 };
131
132 /*
133 * Returns value of random seed (private member variable idum)
134 */
135 inline long CudaVecRandom::seed()
136 { return seed_; }
137
138}
139#endif
long seed()
Returns value of random seed (private member variable seed_).
void setSeed(unsigned long long seed)
Set value of random seed (private member variable seed_).
virtual ~CudaVecRandom()
Destructor.
void uniform(DeviceArray< float > &data)
Populate array with uniform random floats in (0, 1].
CudaVecRandom()
Constructor.
void normal(DeviceArray< float > &data, float stddev, float mean=0.0)
Populate array on device with normal-distributed random floats.
Dynamic array on the GPU device with aligned data.
Definition DeviceArray.h:96
PSCF package top-level namespace.