Generator Types

Random number generators are created by passing a type to nvplRandCreateGenerator(). There are nine types of random number generators in NVPL RAND library, that fall into two categories:

  • pseudorandom number generators:

    • NVPL_RAND_RNG_PSEUDO_XORWOW, implemented using the XORWOW algorithm, a member of the xor-shift family of pseudorandom number generators [1].

    • NVPL_RAND_RNG_PSEUDO_MRG32K3A, a member of the Combined Multiple Recursive family of pseudorandom number generators [2].

    • NVPL_RAND_RNG_PSEUDO_PHILOX4_32_10, a member of Philox family, which is one of the three non-cryptographic Counter Based Random Number Generators presented on SC11 conference by D. E. Shaw Research [3].

    • NVPL_RAND_RNG_PSEUDO_PCG, implemented using the permuted congrential generation algorithm developed in 2014 by O’Neill [4].

    • NVPL_RAND_RNG_PSEUDO_MT19937, a member of the Mersenne Twister family of pseudorandom number generators [5].

Note

NVPL_RAND_RNG_PSEUDO_MT19937 supports only single-threaded random number generation.

  • quasirandom number generators [6]:

    • NVPL_RAND_RNG_QUASI_SOBOL32, a Sobol’ generator of 32-bit sequences.

    • NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL32, a scrambled Sobol’ generator of 32-bit sequences.

    • NVPL_RAND_RNG_QUASI_SOBOL64, a Sobol’ generator of 64-bit sequences.

    • NVPL_RAND_RNG_QUASI_SCRAMBLED_SOBOL64, a scrambled Sobol’ generator of 64-bit sequences.

All of the quasirandom variants generate sequences in up to 20,000 dimensions.