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..
Note: Currently skip-ahead and leap-frog methods are supported by the rand0, rand, mcg31m1, and mcg59 engines. The skip-ahead and leap-frog methods of splitting a stream are not yet implemented for the
mt19937
engine, but
mt19937
naturally provides parallel support during initialization. See the MT19937 section of the Notes for Intel® MKL Vector Statistic document listed in the introduction.
.

Product and Performance Information

1

Intel's compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice.

Notice revision #20110804