Host API
Macros
Enumerations
- curandDirectionVectorSet
-
CURAND choice of direction vector set.
- curandOrdering
-
CURAND ordering of results in memory.
- curandRngType
-
CURAND generator types.
- curandStatus
-
CURAND function call status types.
Functions
- curandStatus_t curandCreateGenerator(curandGenerator_t *generator, curandRngType_t rng_type)
-
Create new random number generator.
- curandStatus_t curandCreateGeneratorHost(curandGenerator_t *generator, curandRngType_t rng_type)
-
Create new host CPU random number generator.
- curandStatus_t curandCreatePoissonDistribution(double lambda, curandDiscreteDistribution_t *discrete_distribution)
-
Construct the histogram array for a Poisson distribution.
- curandStatus_t curandDestroyDistribution(curandDiscreteDistribution_t discrete_distribution)
-
Destroy the histogram array for a discrete distribution (e.g.
- curandStatus_t curandDestroyGenerator(curandGenerator_t generator)
-
Destroy an existing generator.
- curandStatus_t curandGenerate(curandGenerator_t generator, unsigned int *outputPtr, size_t num)
-
Generate 32-bit pseudo or quasirandom numbers.
- curandStatus_t curandGenerateBinomial(curandGenerator_t generator, unsigned int *outputPtr, size_t num, unsigned int n, double p)
- curandStatus_t curandGenerateBinomialMethod(curandGenerator_t generator, unsigned int *outputPtr, size_t num, unsigned int n, double p, curandMethod_t method)
- curandStatus_t curandGenerateLogNormal(curandGenerator_t generator, float *outputPtr, size_t n, float mean, float stddev)
-
Generate log-normally distributed floats.
- curandStatus_t curandGenerateLogNormalDouble(curandGenerator_t generator, double *outputPtr, size_t n, double mean, double stddev)
-
Generate log-normally distributed doubles.
- curandStatus_t curandGenerateLongLong(curandGenerator_t generator, unsigned long long *outputPtr, size_t num)
-
Generate 64-bit quasirandom numbers.
- curandStatus_t curandGenerateNormal(curandGenerator_t generator, float *outputPtr, size_t n, float mean, float stddev)
-
Generate normally distributed doubles.
- curandStatus_t curandGenerateNormalDouble(curandGenerator_t generator, double *outputPtr, size_t n, double mean, double stddev)
-
Generate normally distributed doubles.
- curandStatus_t curandGeneratePoisson(curandGenerator_t generator, unsigned int *outputPtr, size_t n, double lambda)
-
Generate Poisson-distributed unsigned ints.
- curandStatus_t curandGeneratePoissonMethod(curandGenerator_t generator, unsigned int *outputPtr, size_t n, double lambda, curandMethod_t method)
- curandStatus_t curandGenerateSeeds(curandGenerator_t generator)
-
Setup starting states.
- curandStatus_t curandGenerateUniform(curandGenerator_t generator, float *outputPtr, size_t num)
-
Generate uniformly distributed floats.
- curandStatus_t curandGenerateUniformDouble(curandGenerator_t generator, double *outputPtr, size_t num)
-
Generate uniformly distributed doubles.
- curandStatus_t curandGetDirectionVectors32(curandDirectionVectors32_t *vectors[], curandDirectionVectorSet_t set)
-
Get direction vectors for 32-bit quasirandom number generation.
- curandStatus_t curandGetDirectionVectors64(curandDirectionVectors64_t *vectors[], curandDirectionVectorSet_t set)
-
Get direction vectors for 64-bit quasirandom number generation.
- curandStatus_t curandGetProperty(libraryPropertyType type, int *value)
-
Return the value of the curand property.
- curandStatus_t curandGetScrambleConstants32(unsigned int **constants)
-
Get scramble constants for 32-bit scrambled Sobol' .
- curandStatus_t curandGetScrambleConstants64(unsigned long long **constants)
-
Get scramble constants for 64-bit scrambled Sobol' .
- curandStatus_t curandGetVersion(int *version)
-
Return the version number of the library.
- curandStatus_t curandSetGeneratorOffset(curandGenerator_t generator, unsigned long long offset)
-
Set the absolute offset of the pseudo or quasirandom number generator.
- curandStatus_t curandSetGeneratorOrdering(curandGenerator_t generator, curandOrdering_t order)
-
Set the ordering of results of the pseudo or quasirandom number generator.
- curandStatus_t curandSetPseudoRandomGeneratorSeed(curandGenerator_t generator, unsigned long long seed)
-
Set the seed value of the pseudo-random number generator.
- curandStatus_t curandSetQuasiRandomGeneratorDimensions(curandGenerator_t generator, unsigned int num_dimensions)
-
Set the number of dimensions.
- curandStatus_t curandSetStream(curandGenerator_t generator, cudaStream_t stream)
-
Set the current stream for CURAND kernel launches.
Macros
-
CURANDAPI
-
CURAND_VERSION
(CURAND_VER_MAJOR * 1000 + \
CURAND_VER_MINOR * 100 + \
CURAND_VER_PATCH)
-
CURAND_VER_BUILD 48
-
CURAND_VER_MAJOR 10
-
CURAND_VER_MINOR 4
-
CURAND_VER_PATCH 4
Enumerations
-
enum curandDirectionVectorSet
-
CURAND choice of direction vector set.
Values:
-
enumerator CURAND_DIRECTION_VECTORS_32_JOEKUO6
-
Specific set of 32-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions.
-
enumerator CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6
-
Specific set of 32-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions, and scrambled.
-
enumerator CURAND_DIRECTION_VECTORS_64_JOEKUO6
-
Specific set of 64-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions.
-
enumerator CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6
-
Specific set of 64-bit direction vectors generated from polynomials recommended by S. Joe and F. Y. Kuo, for up to 20,000 dimensions, and scrambled.
-
enumerator CURAND_DIRECTION_VECTORS_32_JOEKUO6
-
enum curandOrdering
-
CURAND ordering of results in memory.
Values:
-
enumerator CURAND_ORDERING_PSEUDO_BEST
-
Best ordering for pseudorandom results.
-
enumerator CURAND_ORDERING_PSEUDO_DEFAULT
-
Specific default thread sequence for pseudorandom results, same as CURAND_ORDERING_PSEUDO_BEST.
-
enumerator CURAND_ORDERING_PSEUDO_SEEDED
-
Specific seeding pattern for fast lower quality pseudorandom results.
-
enumerator CURAND_ORDERING_PSEUDO_LEGACY
-
Specific legacy sequence for pseudorandom results, guaranteed to remain the same for all cuRAND release.
-
enumerator CURAND_ORDERING_PSEUDO_DYNAMIC
-
Specific ordering adjusted to the device it is being executed on, provides the best performance.
-
enumerator CURAND_ORDERING_QUASI_DEFAULT
-
Specific n-dimensional ordering for quasirandom results.
-
enumerator CURAND_ORDERING_PSEUDO_BEST
-
enum curandRngType
-
CURAND generator types.
Values:
-
enumerator CURAND_RNG_TEST
-
enumerator CURAND_RNG_PSEUDO_DEFAULT
-
Default pseudorandom generator.
-
enumerator CURAND_RNG_PSEUDO_XORWOW
-
XORWOW pseudorandom generator.
-
enumerator CURAND_RNG_PSEUDO_MRG32K3A
-
MRG32k3a pseudorandom generator.
-
enumerator CURAND_RNG_PSEUDO_MTGP32
-
Mersenne Twister MTGP32 pseudorandom generator.
-
enumerator CURAND_RNG_PSEUDO_MT19937
-
Mersenne Twister MT19937 pseudorandom generator.
-
enumerator CURAND_RNG_PSEUDO_PHILOX4_32_10
-
PHILOX-4x32-10 pseudorandom generator.
-
enumerator CURAND_RNG_QUASI_DEFAULT
-
Default quasirandom generator.
-
enumerator CURAND_RNG_QUASI_SOBOL32
-
Sobol32 quasirandom generator.
-
enumerator CURAND_RNG_QUASI_SCRAMBLED_SOBOL32
-
Scrambled Sobol32 quasirandom generator.
-
enumerator CURAND_RNG_QUASI_SOBOL64
-
Sobol64 quasirandom generator.
-
enumerator CURAND_RNG_QUASI_SCRAMBLED_SOBOL64
-
Scrambled Sobol64 quasirandom generator.
-
enumerator CURAND_RNG_TEST
-
enum curandStatus
-
CURAND function call status types.
Values:
-
enumerator CURAND_STATUS_SUCCESS
-
No errors.
-
enumerator CURAND_STATUS_VERSION_MISMATCH
-
Header file and linked library version do not match.
-
enumerator CURAND_STATUS_NOT_INITIALIZED
-
Generator not initialized.
-
enumerator CURAND_STATUS_ALLOCATION_FAILED
-
Memory allocation failed.
-
enumerator CURAND_STATUS_TYPE_ERROR
-
Generator is wrong type.
-
enumerator CURAND_STATUS_OUT_OF_RANGE
-
Argument out of range.
-
enumerator CURAND_STATUS_LENGTH_NOT_MULTIPLE
-
Length requested is not a multple of dimension.
-
enumerator CURAND_STATUS_DOUBLE_PRECISION_REQUIRED
-
GPU does not have double precision required by MRG32k3a.
-
enumerator CURAND_STATUS_LAUNCH_FAILURE
-
Kernel launch failure.
-
enumerator CURAND_STATUS_PREEXISTING_FAILURE
-
Preexisting failure on library entry.
-
enumerator CURAND_STATUS_INITIALIZATION_FAILED
-
Initialization of CUDA failed.
-
enumerator CURAND_STATUS_ARCH_MISMATCH
-
Architecture mismatch, GPU does not support requested feature.
-
enumerator CURAND_STATUS_INTERNAL_ERROR
-
Internal library error.
-
enumerator CURAND_STATUS_SUCCESS
Functions
-
curandStatus_t curandCreateGenerator(curandGenerator_t *generator, curandRngType_t rng_type)
-
Create new random number generator.
Creates a new random number generator of type
rng_typeand returns it in*generator.Legal values for
rng_typeare:CURAND_RNG_PSEUDO_DEFAULT
CURAND_RNG_PSEUDO_XORWOW
CURAND_RNG_PSEUDO_MRG32K3A
CURAND_RNG_PSEUDO_MTGP32
CURAND_RNG_PSEUDO_MT19937
CURAND_RNG_PSEUDO_PHILOX4_32_10
CURAND_RNG_QUASI_DEFAULT
CURAND_RNG_QUASI_SOBOL32
CURAND_RNG_QUASI_SCRAMBLED_SOBOL32
CURAND_RNG_QUASI_SOBOL64
CURAND_RNG_QUASI_SCRAMBLED_SOBOL64
When
rng_typeis CURAND_RNG_PSEUDO_DEFAULT, the type chosen is CURAND_RNG_PSEUDO_XORWOW.
When
rng_typeis CURAND_RNG_QUASI_DEFAULT, the type chosen is CURAND_RNG_QUASI_SOBOL32.The default values for
rng_type= CURAND_RNG_PSEUDO_XORWOW are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_PSEUDO_MRG32K3A are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_PSEUDO_MTGP32 are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_PSEUDO_MT19937 are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULTThe default values for
rng_type= CURAND_RNG_PSEUDO_PHILOX4_32_10 are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SOBOL32 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SOBOL64 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SCRAMBBLED_SOBOL32 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
- Parameters
-
generator – - Pointer to generator
rng_type – - Type of generator to create
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED, if memory could not be allocated
CURAND_STATUS_INITIALIZATION_FAILED if there was a problem setting up the GPU
CURAND_STATUS_VERSION_MISMATCH if the header file version does not match the dynamically linked library version
CURAND_STATUS_TYPE_ERROR if the value for
rng_typeis invalidCURAND_STATUS_SUCCESS if generator was created successfully
-
curandStatus_t curandCreateGeneratorHost(curandGenerator_t *generator, curandRngType_t rng_type)
-
Create new host CPU random number generator.
Creates a new host CPU random number generator of type
rng_typeand returns it in*generator.Legal values for
rng_typeare:CURAND_RNG_PSEUDO_DEFAULT
CURAND_RNG_PSEUDO_XORWOW
CURAND_RNG_PSEUDO_MRG32K3A
CURAND_RNG_PSEUDO_MTGP32
CURAND_RNG_PSEUDO_MT19937
CURAND_RNG_PSEUDO_PHILOX4_32_10
CURAND_RNG_QUASI_DEFAULT
CURAND_RNG_QUASI_SOBOL32
CURAND_RNG_QUASI_SCRAMBLED_SOBOL32
CURAND_RNG_QUASI_SOBOL64
CURAND_RNG_QUASI_SCRAMBLED_SOBOL64
When
rng_typeis CURAND_RNG_PSEUDO_DEFAULT, the type chosen is CURAND_RNG_PSEUDO_XORWOW.
When
rng_typeis CURAND_RNG_QUASI_DEFAULT, the type chosen is CURAND_RNG_QUASI_SOBOL32.The default values for
rng_type= CURAND_RNG_PSEUDO_XORWOW are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_PSEUDO_MRG32K3A are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_PSEUDO_MTGP32 are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_PSEUDO_MT19937 are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULTThe default values for
rng_type= CURAND_RNG_PSEUDO_PHILOX4_32_10 are:seed= 0offset= 0ordering= CURAND_ORDERING_PSEUDO_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SOBOL32 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SOBOL64 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SCRAMBLED_SOBOL32 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
The default values for
rng_type= CURAND_RNG_QUASI_SCRAMBLED_SOBOL64 are:dimensions= 1offset= 0ordering= CURAND_ORDERING_QUASI_DEFAULT
- Parameters
-
generator – - Pointer to generator
rng_type – - Type of generator to create
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_INITIALIZATION_FAILED if there was a problem setting up the GPU
CURAND_STATUS_VERSION_MISMATCH if the header file version does not match the dynamically linked library version
CURAND_STATUS_TYPE_ERROR if the value for
rng_typeis invalidCURAND_STATUS_SUCCESS if generator was created successfully
-
curandStatus_t curandCreatePoissonDistribution(double lambda, curandDiscreteDistribution_t *discrete_distribution)
-
Construct the histogram array for a Poisson distribution.
Construct the histogram array for the Poisson distribution with lambda
lambda. For lambda greater than 2000, an approximation with a normal distribution is used.- Parameters
-
lambda – - lambda for the Poisson distribution
discrete_distribution – - pointer to the histogram in device memory
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision
CURAND_STATUS_INITIALIZATION_FAILED if there was a problem setting up the GPU
CURAND_STATUS_NOT_INITIALIZED if the distribution pointer was null
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_OUT_OF_RANGE if lambda is non-positive or greater than 400,000
CURAND_STATUS_SUCCESS if the histogram was generated successfully
-
curandStatus_t curandDestroyDistribution(curandDiscreteDistribution_t discrete_distribution)
-
Destroy the histogram array for a discrete distribution (e.g.
Poisson).
Destroy the histogram array for a discrete distribution created by curandCreatePoissonDistribution.
- Parameters
-
discrete_distribution – - pointer to device memory where the histogram is stored
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the histogram was never created
CURAND_STATUS_SUCCESS if the histogram was destroyed successfully
-
curandStatus_t curandDestroyGenerator(curandGenerator_t generator)
-
Destroy an existing generator.
Destroy an existing generator and free all memory associated with its state.
- Parameters
-
generator – - Generator to destroy
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_SUCCESS if generator was destroyed successfully
-
curandStatus_t curandGenerate(curandGenerator_t generator, unsigned int *outputPtr, size_t num)
-
Generate 32-bit pseudo or quasirandom numbers.
Use
generatorto generatenum32-bit results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 32-bit values with every bit random.
- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
num – - Number of random 32-bit values to generate
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_TYPE_ERROR if the generator is a 64 bit quasirandom generator. (use curandGenerateLongLong() with 64 bit quasirandom generators)
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGenerateBinomial(curandGenerator_t generator, unsigned int *outputPtr, size_t num, unsigned int n, double p)
-
curandStatus_t curandGenerateBinomialMethod(curandGenerator_t generator, unsigned int *outputPtr, size_t num, unsigned int n, double p, curandMethod_t method)
-
curandStatus_t curandGenerateLogNormal(curandGenerator_t generator, float *outputPtr, size_t n, float mean, float stddev)
-
Generate log-normally distributed floats.
Use
generatorto generatenfloat results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 32-bit floating point values with log-normal distribution based on an associated normal distribution with mean
meanand standard deviationstddev.Normally distributed results are generated from pseudorandom generators with a Box-Muller transform, and so require
nto be even. Quasirandom generators use an inverse cumulative distribution function to preserve dimensionality. The normally distributed results are transformed into log-normal distribution.There may be slight numerical differences between results generated on the GPU with generators created with curandCreateGenerator() and results calculated on the CPU with generators created with curandCreateGeneratorHost(). These differences arise because of differences in results for transcendental functions. In addition, future versions of CURAND may use newer versions of the CUDA math library, so different versions of CURAND may give slightly different numerical values.
- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
n – - Number of floats to generate
mean – - Mean of associated normal distribution
stddev – - Standard deviation of associated normal distribution
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension, or is not a multiple of two for pseudorandom generators
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGenerateLogNormalDouble(curandGenerator_t generator, double *outputPtr, size_t n, double mean, double stddev)
-
Generate log-normally distributed doubles.
Use
generatorto generatendouble results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 64-bit floating point values with log-normal distribution based on an associated normal distribution with mean
meanand standard deviationstddev.Normally distributed results are generated from pseudorandom generators with a Box-Muller transform, and so require
nto be even. Quasirandom generators use an inverse cumulative distribution function to preserve dimensionality. The normally distributed results are transformed into log-normal distribution.There may be slight numerical differences between results generated on the GPU with generators created with curandCreateGenerator() and results calculated on the CPU with generators created with curandCreateGeneratorHost(). These differences arise because of differences in results for transcendental functions. In addition, future versions of CURAND may use newer versions of the CUDA math library, so different versions of CURAND may give slightly different numerical values.
- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
n – - Number of doubles to generate
mean – - Mean of normal distribution
stddev – - Standard deviation of normal distribution
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension, or is not a multiple of two for pseudorandom generators
CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGenerateLongLong(curandGenerator_t generator, unsigned long long *outputPtr, size_t num)
-
Generate 64-bit quasirandom numbers.
Use
generatorto generatenum64-bit results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 64-bit values with every bit random.
- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
num – - Number of random 64-bit values to generate
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_TYPE_ERROR if the generator is not a 64 bit quasirandom generator
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGenerateNormal(curandGenerator_t generator, float *outputPtr, size_t n, float mean, float stddev)
-
Generate normally distributed doubles.
Use
generatorto generatenfloat results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 32-bit floating point values with mean
meanand standard deviationstddev.Normally distributed results are generated from pseudorandom generators with a Box-Muller transform, and so require
nto be even. Quasirandom generators use an inverse cumulative distribution function to preserve dimensionality.There may be slight numerical differences between results generated on the GPU with generators created with curandCreateGenerator() and results calculated on the CPU with generators created with curandCreateGeneratorHost(). These differences arise because of differences in results for transcendental functions. In addition, future versions of CURAND may use newer versions of the CUDA math library, so different versions of CURAND may give slightly different numerical values.
- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
n – - Number of floats to generate
mean – - Mean of normal distribution
stddev – - Standard deviation of normal distribution
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension, or is not a multiple of two for pseudorandom generators
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGenerateNormalDouble(curandGenerator_t generator, double *outputPtr, size_t n, double mean, double stddev)
-
Generate normally distributed doubles.
Use
generatorto generatendouble results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 64-bit floating point values with mean
meanand standard deviationstddev.Normally distributed results are generated from pseudorandom generators with a Box-Muller transform, and so require
nto be even. Quasirandom generators use an inverse cumulative distribution function to preserve dimensionality.There may be slight numerical differences between results generated on the GPU with generators created with curandCreateGenerator() and results calculated on the CPU with generators created with curandCreateGeneratorHost(). These differences arise because of differences in results for transcendental functions. In addition, future versions of CURAND may use newer versions of the CUDA math library, so different versions of CURAND may give slightly different numerical values.
- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
n – - Number of doubles to generate
mean – - Mean of normal distribution
stddev – - Standard deviation of normal distribution
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension, or is not a multiple of two for pseudorandom generators
CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGeneratePoisson(curandGenerator_t generator, unsigned int *outputPtr, size_t n, double lambda)
-
Generate Poisson-distributed unsigned ints.
Use
generatorto generatenunsigned int results into device memory atoutputPtr. The device memory must have been previously allocated and must be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 32-bit unsigned int point values with Poisson distribution, with lambda
lambda.- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
n – - Number of unsigned ints to generate
lambda – - lambda for the Poisson distribution
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension
CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU or sm does not support double precision
CURAND_STATUS_OUT_OF_RANGE if lambda is non-positive or greater than 400,000
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGeneratePoissonMethod(curandGenerator_t generator, unsigned int *outputPtr, size_t n, double lambda, curandMethod_t method)
-
curandStatus_t curandGenerateSeeds(curandGenerator_t generator)
-
Setup starting states.
Generate the starting state of the generator. This function is automatically called by generation functions such as curandGenerate() and curandGenerateUniform(). It can be called manually for performance testing reasons to separate timings for starting state generation and random number generation.
- Parameters
-
generator – - Generator to update
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_SUCCESS if the seeds were generated successfully
-
curandStatus_t curandGenerateUniform(curandGenerator_t generator, float *outputPtr, size_t num)
-
Generate uniformly distributed floats.
Use
generatorto generatenumfloat results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 32-bit floating point values between
0.0fand1.0f, excluding0.0fand including1.0f.- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
num – - Number of floats to generate
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGenerateUniformDouble(curandGenerator_t generator, double *outputPtr, size_t num)
-
Generate uniformly distributed doubles.
Use
generatorto generatenumdouble results into the device memory atoutputPtr. The device memory must have been previously allocated and be large enough to hold all the results. Launches are done with the stream set using curandSetStream(), or the null stream if no stream has been set.Results are 64-bit double precision floating point values between
0.0and1.0, excluding0.0and including1.0.- Parameters
-
generator – - Generator to use
outputPtr – - Pointer to device memory to store CUDA-generated results, or Pointer to host memory to store CPU-generated results
num – - Number of doubles to generate
- Returns
-
CURAND_STATUS_ALLOCATION_FAILED if memory could not be allocated
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_PREEXISTING_FAILURE if there was an existing error from a previous kernel launch
CURAND_STATUS_LAUNCH_FAILURE if the kernel launch failed for any reason
CURAND_STATUS_LENGTH_NOT_MULTIPLE if the number of output samples is not a multiple of the quasirandom dimension
CURAND_STATUS_DOUBLE_PRECISION_REQUIRED if the GPU does not support double precision
CURAND_STATUS_SUCCESS if the results were generated successfully
-
curandStatus_t curandGetDirectionVectors32(curandDirectionVectors32_t *vectors[], curandDirectionVectorSet_t set)
-
Get direction vectors for 32-bit quasirandom number generation.
Get a pointer to an array of direction vectors that can be used for quasirandom number generation. The resulting pointer will reference an array of direction vectors in host memory.
The array contains vectors for many dimensions. Each dimension has 32 vectors. Each individual vector is an unsigned int.
Legal values for
setare:CURAND_DIRECTION_VECTORS_32_JOEKUO6 (20,000 dimensions)
CURAND_SCRAMBLED_DIRECTION_VECTORS_32_JOEKUO6 (20,000 dimensions)
- Parameters
-
vectors – - Address of pointer in which to return direction vectors
set – - Which set of direction vectors to use
- Returns
-
CURAND_STATUS_OUT_OF_RANGE if the choice of set is invalid
CURAND_STATUS_SUCCESS if the pointer was set successfully
-
curandStatus_t curandGetDirectionVectors64(curandDirectionVectors64_t *vectors[], curandDirectionVectorSet_t set)
-
Get direction vectors for 64-bit quasirandom number generation.
Get a pointer to an array of direction vectors that can be used for quasirandom number generation. The resulting pointer will reference an array of direction vectors in host memory.
The array contains vectors for many dimensions. Each dimension has 64 vectors. Each individual vector is an unsigned long long.
Legal values for
setare:CURAND_DIRECTION_VECTORS_64_JOEKUO6 (20,000 dimensions)
CURAND_SCRAMBLED_DIRECTION_VECTORS_64_JOEKUO6 (20,000 dimensions)
- Parameters
-
vectors – - Address of pointer in which to return direction vectors
set – - Which set of direction vectors to use
- Returns
-
CURAND_STATUS_OUT_OF_RANGE if the choice of set is invalid
CURAND_STATUS_SUCCESS if the pointer was set successfully
-
curandStatus_t curandGetProperty(libraryPropertyType type, int *value)
-
Return the value of the curand property.
Return in
*valuethe number for the property described bytypeof the dynamically linked CURAND library.- Parameters
-
type – - CUDA library property
value – - integer value for the requested property
- Returns
-
CURAND_STATUS_SUCCESS if the property value was successfully returned
CURAND_STATUS_OUT_OF_RANGE if the property type is not recognized
-
curandStatus_t curandGetScrambleConstants32(unsigned int **constants)
-
Get scramble constants for 32-bit scrambled Sobol’ .
Get a pointer to an array of scramble constants that can be used for quasirandom number generation. The resulting pointer will reference an array of unsinged ints in host memory.
The array contains constants for many dimensions. Each dimension has a single unsigned int constant.
- Parameters
-
constants – - Address of pointer in which to return scramble constants
- Returns
-
CURAND_STATUS_SUCCESS if the pointer was set successfully
-
curandStatus_t curandGetScrambleConstants64(unsigned long long **constants)
-
Get scramble constants for 64-bit scrambled Sobol’ .
Get a pointer to an array of scramble constants that can be used for quasirandom number generation. The resulting pointer will reference an array of unsinged long longs in host memory.
The array contains constants for many dimensions. Each dimension has a single unsigned long long constant.
- Parameters
-
constants – - Address of pointer in which to return scramble constants
- Returns
-
CURAND_STATUS_SUCCESS if the pointer was set successfully
-
curandStatus_t curandGetVersion(int *version)
-
Return the version number of the library.
Return in
*versionthe version number of the dynamically linked CURAND library. The format is the same as CUDART_VERSION from the CUDA Runtime. The only supported configuration is CURAND version equal to CUDA Runtime version.- Parameters
-
version – - CURAND library version
- Returns
-
CURAND_STATUS_SUCCESS if the version number was successfully returned
-
curandStatus_t curandSetGeneratorOffset(curandGenerator_t generator, unsigned long long offset)
-
Set the absolute offset of the pseudo or quasirandom number generator.
Set the absolute offset of the pseudo or quasirandom number generator.
All values of offset are valid. The offset position is absolute, not relative to the current position in the sequence.
- Parameters
-
generator – - Generator to modify
offset – - Absolute offset position
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_SUCCESS if generator offset was set successfully
-
curandStatus_t curandSetGeneratorOrdering(curandGenerator_t generator, curandOrdering_t order)
-
Set the ordering of results of the pseudo or quasirandom number generator.
Set the ordering of results of the pseudo or quasirandom number generator.
Legal values of
orderfor pseudorandom generators are:CURAND_ORDERING_PSEUDO_DEFAULT
CURAND_ORDERING_PSEUDO_BEST
CURAND_ORDERING_PSEUDO_SEEDED
CURAND_ORDERING_PSEUDO_LEGACY
Legal values of
orderfor quasirandom generators are:CURAND_ORDERING_QUASI_DEFAULT
- Parameters
-
generator – - Generator to modify
order – - Ordering of results
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_OUT_OF_RANGE if the ordering is not valid
CURAND_STATUS_SUCCESS if generator ordering was set successfully
-
curandStatus_t curandSetPseudoRandomGeneratorSeed(curandGenerator_t generator, unsigned long long seed)
-
Set the seed value of the pseudo-random number generator.
Set the seed value of the pseudorandom number generator. All values of seed are valid. Different seeds will produce different sequences. Different seeds will often not be statistically correlated with each other, but some pairs of seed values may generate sequences which are statistically correlated.
- Parameters
-
generator – - Generator to modify
seed – - Seed value
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_TYPE_ERROR if the generator is not a pseudorandom number generator
CURAND_STATUS_SUCCESS if generator seed was set successfully
-
curandStatus_t curandSetQuasiRandomGeneratorDimensions(curandGenerator_t generator, unsigned int num_dimensions)
-
Set the number of dimensions.
Set the number of dimensions to be generated by the quasirandom number generator.
Legal values for
num_dimensionsare 1 to 20000.- Parameters
-
generator – - Generator to modify
num_dimensions – - Number of dimensions
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_OUT_OF_RANGE if num_dimensions is not valid
CURAND_STATUS_TYPE_ERROR if the generator is not a quasirandom number generator
CURAND_STATUS_SUCCESS if generator ordering was set successfully
-
curandStatus_t curandSetStream(curandGenerator_t generator, cudaStream_t stream)
-
Set the current stream for CURAND kernel launches.
Set the current stream for CURAND kernel launches. All library functions will use this stream until set again.
- Parameters
-
generator – - Generator to modify
stream – - Stream to use or ::NULL for null stream
- Returns
-
CURAND_STATUS_NOT_INITIALIZED if the generator was never created
CURAND_STATUS_SUCCESS if stream was set successfully