Developer Guide and Reference

Contents

Parallel Computation Support

One of the basic requirements for the random number sequences generated by the engines is their mutual independence and lack of inter-correlation. Even if you want random number samplings to be correlated, such correlation should be controllable. The Short Vector Random Number Generator (SVRNG) library provides two techniques: "skip-ahead" and "leap-frog".
Skip-ahead
The skip-ahead method splits the original sequence into
k
non-overlapping blocks, where
k
is the number of independent sequences. Each of the sequences generates random numbers only from the corresponding block of contiguous random numbers.
Block-Splitting Method
Leap-frog
The leap-frog method splits the original sequence into
k
disjoint subsequences in such a way that the first stream would generate the random numbers x
1
, x
k+1
, x
2k+1
, x
3k+1
, ..., the second stream would generate the random numbers x
2
, x
k+2
, x
2k+2
, x
3k+2
, ..., and, finally, the
k
-th stream would generate the random numbers x
k
, x
2k
, x
3k
, .... The multi-dimensional uniformity properties of each subsequence deteriorate seriously as
k
grows so this method is only useful if
k
is less than about 25.
Leapfrog Method
The following sequence outlines the typical usage model for creating independent sequences of random numbers in a parallel computation environment:
  • Create the original engine
  • Create a copy of the original engine in each thread
  • Apply one of techniques above to re-initialize the individual engines to provide an independent sequence on each thread
For detailed information on the use of SVRNG intrinsics in a parallel computation environment see the "Random Streams and RNGs in Parallel Computation" section of the
Notes for Intel® MKL Vector Statistic
document listed in the introduction..