Developer Reference

  • 0.9
  • 09/09/2020
  • Public Content
Contents

Distribution Generators

oneMKL
VS
routines are used to generate random numbers with different types of distribution. Each function group is introduced below by the type of underlying distribution and contains a short description of its functionality, as well as specifications of the call sequence and the explanation of input and output parameters. Table
"Continuous Distribution Generators"
and Table
"Discrete Distribution Generators"
list the random number generator routines with data types and output distributions, and sets correspondence between data types of the generator routines and the basic random number generators.
Continuous Distribution Generators
Type of Distribution
Data Types
BRNG Data Type
Description
s
,
d
s
,
d
Uniform continuous distribution on the interval [
a,b
)
s
,
d
s
,
d
Normal (Gaussian) distribution
s
,
d
s
,
d
Normal (Gaussian) multivariate distribution
s
,
d
s
,
d
Exponential distribution
s
,
d
s
,
d
Laplace distribution (double exponential distribution)
s
,
d
s
,
d
Weibull distribution
s
,
d
s
,
d
Cauchy distribution
s
,
d
s
,
d
Rayleigh distribution
s
,
d
s
,
d
Lognormal distribution
s
,
d
s
,
d
Gumbel (extreme value) distribution
s
,
d
s
,
d
Gamma distribution
s
,
d
s
,
d
Beta distribution
s
,
d
s
,
d
Chi-Square distribution
 
Discrete Distribution Generators
Type of Distribution
Data Types
BRNG Data Type
Description
i
d
Uniform discrete distribution on the interval [
a,b
)
i
i
Underlying BRNG integer recurrence
i
i
Uniformly distributed bits in 32-bit chunks
i
i
Uniformly distributed bits in 64-bit chunks
i
s
Bernoulli distribution
i
s
Geometric distribution
i
d
Binomial distribution
i
d
Hypergeometric distribution
i
s
(for
VSL_RNG_METHOD_POISSON_POISNORM
)
s
(for distribution parameter
λ
27) and
d
(for
λ
< 27) (for
VSL_RNG_METHOD_POISSON_PTPE
)
Poisson distribution
i
s
Poisson distribution with varying mean
i
d
Negative binomial distribution, or Pascal distribution
i
d
Multinomial distribution

Modes of random number generation

The library provides two modes of random number generation, accurate and fast. Accurate generation mode is intended for the applications that are highly demanding to accuracy of calculations. When used in this mode, the generators produce random numbers lying completely within definitional domain for all values of the distribution parameters. For example, random numbers obtained from the generator of continuous distribution that is uniform on interval [
a
,
b
] belong to this interval irrespective of what
a
and
b
values may be. Fast mode provides high performance of generation and also guarantees that generated random numbers belong to the definitional domain except for some specific values of distribution parameters. The generation mode is set by specifying relevant value of the method parameter in generator routines. List of distributions that support accurate mode of generation is given in the table below.
Distribution Generators Supporting Accurate Mode
Type of Distribution
Data Types
s
,
d
s
,
d
s
,
d
s
,
d
s
,
d
s
,
d
s
,
d
See additional details about accurate and fast mode of random number generation in VS Notes.

New method names

The current version of
oneMKL
has a modified structure of VS RNG method names. (SeeRNG Naming Conventions for details.) The old names are kept for backward compatibility. The
tables below
set correspondence between the new and legacy method names for VS random number generators.
Method Names for Continuous Distribution Generators
RNG
Legacy Method Name
New Method Name
VSL_METHOD_SUNIFORM_STD
,
VSL_METHOD_DUNIFORM_STD
,
VSL_METHOD_SUNIFORM_STD_ACCURATE
,
VSL_METHOD_DUNIFORM_STD_ACCURATE
VSL_RNG_METHOD_UNIFORM_STD
,
VSL_RNG_METHOD_UNIFORM_STD_ACCURATE
VSL_METHOD_SGAUSSIAN_BOXMULLER
,
VSL_METHOD_SGAUSSIAN_BOXMULLER2
,
VSL_METHOD_SGAUSSIAN_ICDF
,
VSL_METHOD_DGAUSSIAN_BOXMULLER
,
VSL_METHOD_DGAUSSIAN_BOXMULLER2
,
VSL_METHOD_DGAUSSIAN_ICDF
VSL_RNG_METHOD_GAUSSIAN_BOXMULLER
,
VSL_RNG_METHOD_GAUSSIAN_BOXMULLER2
,
VSL_RNG_METHOD_GAUSSIAN_ICDF
VSL_METHOD_SGAUSSIANMV_BOXMULLER
,
VSL_METHOD_SGAUSSIANMV_BOXMULLER2
,
VSL_METHOD_SGAUSSIANMV_ICDF
,
VSL_METHOD_DGAUSSIANMV_BOXMULLER
,
VSL_METHOD_DGAUSSIANMV_BOXMULLER2
,
VSL_METHOD_DGAUSSIANMV_ICDF
VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER
,
VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2
,
VSL_RNG_METHOD_GAUSSIANMV_ICDF
VSL_METHOD_SEXPONENTIAL_ICDF
,
VSL_METHOD_DEXPONENTIAL_ICDF
,
VSL_METHOD_SEXPONENTIAL_ICDF_ACCURATE
,
VSL_METHOD_DEXPONENTIAL_ICDF_ACCURATE
VSL_RNG_METHOD_EXPONENTIAL_ICDF
,
VSL_RNG_METHOD_EXPONENTIAL_ICDF_ACCURATE
VSL_METHOD_SLAPLACE_ICDF
,
VSL_METHOD_DLAPLACEL_ICDF
VSL_RNG_METHOD_LAPLACE_ICDF
VSL_METHOD_SWEIBULL_ICDF
,
VSL_METHOD_DWEIBULL_ICDF
,
VSL_METHOD_SWEIBULL_ICDF_ACCURATE
,
VSL_METHOD_DWEIBULL_ICDF_ACCURATE
VSL_RNG_METHOD_WEIBULL_ICDF
,
VSL_RNG_METHOD_WEIBULL_ICDF_ACCURATE
VSL_METHOD_SCAUCHY_ICDF
,
VSL_METHOD_DCAUCHY_ICDF
VSL_RNG_METHOD_CAUCHY_ICDF
VSL_METHOD_SRAYLEIGH_ICDF
,