blob: 47edfa32a8824becd88c1c70698a2907b9949991 [file] [log] [blame]
#ifndef TH_CUDA_TENSOR_RANDOM_INC
#define TH_CUDA_TENSOR_RANDOM_INC
#include "THCTensor.h"
/* Generator */
typedef struct _Generator {
struct curandStateMtgp32* gen_states;
struct mtgp32_kernel_params *kernel_params;
int initf;
unsigned long initial_seed;
} Generator;
typedef struct THCudaRNGState {
/* One generator per GPU */
Generator* gen;
Generator* current_gen;
int num_devices;
} THCudaRNGState;
THC_API void THCRandom_init(THCudaRNGState* state, int num_devices, int current_device);
THC_API void THCRandom_shutdown(THCudaRNGState* state);
THC_API void THCRandom_setGenerator(THCudaRNGState* state, int device);
THC_API unsigned long THCRandom_seed(THCudaRNGState* state);
THC_API unsigned long THCRandom_seedAll(THCudaRNGState* state);
THC_API void THCRandom_manualSeed(THCudaRNGState* state, unsigned long the_seed_);
THC_API void THCRandom_manualSeedAll(THCudaRNGState* state, unsigned long the_seed_);
THC_API unsigned long THCRandom_initialSeed(THCudaRNGState* state);
THC_API void THCRandom_getRNGState(THCudaRNGState* state, THByteTensor *rng_state);
THC_API void THCRandom_setRNGState(THCudaRNGState* state, THByteTensor *rng_state);
THC_API void THCudaTensor_geometric(THCudaRNGState* state, THCudaTensor *self, double p);
THC_API void THCudaTensor_bernoulli(THCudaRNGState* state, THCudaTensor *self, double p);
THC_API void THCudaTensor_uniform(THCudaRNGState* state, THCudaTensor *self, double a, double b);
THC_API void THCudaTensor_normal(THCudaRNGState* state, THCudaTensor *self, double mean, double stdv);
THC_API void THCudaTensor_exponential(THCudaRNGState* state, THCudaTensor *self, double lambda);
THC_API void THCudaTensor_cauchy(THCudaRNGState* state, THCudaTensor *self, double median, double sigma);
THC_API void THCudaTensor_logNormal(THCudaRNGState* state, THCudaTensor *self, double mean, double stdv);
#endif