A SCALABLE LIBRARY FOR PSEUDORANDOM NUMBER GENERATION ALGORITHM 806: SPRNG
ABOUT: PSEUDO-RANDOM LIBRARIES Many Libraries Parameterization – based libraries Erroneous => Real world applications New Library – SPRNG Purpose of SPRNG ?
INTRODUCTION Problems: Erroneous => Monte Carlo Applications High Performance Cycles Parallelism – More Complicates Solution: SPRNG – Scalable and Distributed Architecture
PARALLEL PSEUDORANDOM-NUMBER GENERATION Methods - Parameterization Linear Congruential Generators: Commonly used generator Linear Recursion : Periodic Sequence
PRIME MODULUS
Exponential Sum: Full period Partially period Upper Bounds: Equidistributed Parallel: Exponential Sum Correlation is :
Upper Bound: Open Questions: Choosing ‘m’ ? A. Fast modular multiplication or fast calculation of jth integer Good intrastream correlation also ensure good intrastream independence to performance ? Hence Such techniques are less attractive for parallel Pseudo random number generation.
LAGGED- FIBONACCI GENERATOR Previous: Varying parameters - recursion Now: Parameterized – Initial Value ALFG Equation: Popular : Serial and Scalable Parallel Machines Reasons: 1. Easy to implement 2. Cheap to compute It does well on statistical tests
Maximal Period : Template :
O(K*K) Template : Advantage: Optimal Disadvantage : No proof and improvement of this analytical is open challenge
Advantage: Good for Floating point However, care must be taken to maintain the uniqueness of the parallel streams
SPRNG Random Number streams to parallel processes Advantages: 1. Several, Distinct, Well tested, Scalable PRNGs 2. Initailization without Inter process communication 3. Reproducibility 4. Minimization of Interprocess correaltion 5. Uniformity 6. Integrated Test Suites 7. Extensibility
GENERATORS Additive lagged Fibonacci Multiplicative Lagged Fibonacci Prime Modules Multiplicative Congruential Power-of-two modules linear Congruential Combined Multiplicative Recursive generator
EXAMPLES Download: Definition : init_sprng routine int *init_sprng(int streamnum, int nstreams, int seed, int param)
#include #define SIMPLE_SPRNG/* simple interface */ #include "sprng.h" /* SPRNG header file */ using namespace std; int main() { double rn; int i; printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng();/* generate double precision random number */ printf("%f\n",rn); } return 0; }
EXECUTION $>./simple-simple Printing 3 random numbers in [0,1):
SPRNG TEST SUITE Intrastream Correlation Interstream Correlation Statistical Test
Example: test.lib nstreams ncombine seed param nblocks skip Ex: eqi-distance.lcg mpirun -np 2 equidistnce.lcg Result: mpirun -np 2 eqidist.lcg eqidistance.lcg KS value : KS value prob : Hence, It is b/w 2.5% and 97.5% It is passed
There are different tests that are described by Knuth are described in SPRNG library such as Collision tests Coupons Collector tests Equidistance tests Gap test Permutation tests Poker tests Serial test
PHYSICALLY BASED TESTS: Ising Model : Random Walk Test:
CONCLUSION Comprehensive Library Recursions are simple Reusable Extensibility Uniformity : C, C++, MPI and FORTRAN
REFERENCES ng/implement.shtml ng/implement.shtml how=s4.6 how=s4.6