The SPRNG Library

The Scalable Parallel Random Number Generators (SPRNG) Library Prof. Michael Mascagni Departments of Computer Science, Mathematics & Scientific Computing Florida State University, Tallahassee, FL 32306 USA E-mail: [email protected] URL: http://www.cs.fsu.edu/~mascagni

The SPRNG Library

Outline of the Talk Where to Get SPRNG How to Build SPRNG Testing SPRNG How SPRNG is Structured Specific Generator Details How to Use SPRNG Class Structure and Simple modes Random Number Parameters Usage Examples Usage Example - Default Interface Usage Example - Simple Interface

Other Parts of Interest in SPRNG Other Parts - Examples Folder Other Parts - Tests Folder SPRNG’s Future References

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I

Quick Start

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I

Quick Start Quick Reference

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I I

Quick Start Quick Reference User’s Guide

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I I I

Quick Start Quick Reference User’s Guide Reference Manual

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I I I I

Quick Start Quick Reference User’s Guide Reference Manual Examples

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

I

Run make

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

I

Run make

I

NB: Sometimes ’make’ has errors on some parts which can be ignored. In these cases, ’make -k’ can be used to continue compiling even if there are errors.

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

I

Run make

I

NB: Sometimes ’make’ has errors on some parts which can be ignored. In these cases, ’make -k’ can be used to continue compiling even if there are errors.

I

The MPI programs sometimes need special configuring.

The SPRNG Library How to Build SPRNG Testing SPRNG

Testing SPRNG

How to check the build I

Go to directory check, and run ./checksprng.

The SPRNG Library How to Build SPRNG Testing SPRNG

Testing SPRNG

How to check the build I

Go to directory check, and run ./checksprng.

I

This program checks to see if SPRNG has been correctly installed.

The SPRNG Library How to Build SPRNG Testing SPRNG

Testing SPRNG

How to check the build I

Go to directory check, and run ./checksprng.

I

This program checks to see if SPRNG has been correctly installed.

I

The check folder contains a single program which generates known sequences and checks this against a data file.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I

SRC - Source code for SPRNG.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed. check - contains executables ./checksprng and ./timesprng.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

I I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed. check - contains executables ./checksprng and ./timesprng. lib - contains SPRNG library libsprng after sucessful installation.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

I I

I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed. check - contains executables ./checksprng and ./timesprng. lib - contains SPRNG library libsprng after sucessful installation. include - SPRNG header files.

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I

0: Modified Lagged-Fibonacci Generator (lfg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I

0: Modified Lagged-Fibonacci Generator (lfg) 1: 48-Bit Linear Congruential Generator w/Prime Addend (lcg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I

0: Modified Lagged-Fibonacci Generator (lfg) 1: 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 2: 64-Bit Linear Congruential Generator w/Prime Addend (lcg64)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I

0: 1: 2: 3:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I I

0: 1: 2: 3: 4:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg) Multiplicative Lagged-Fibonacci Generator (mlfg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I I I

0: 1: 2: 3: 4: 5:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg) Multiplicative Lagged-Fibonacci Generator (mlfg) Prime Modulus Linear Congruential Generator (pmlcg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I I I

I

0: 1: 2: 3: 4: 5:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg) Multiplicative Lagged-Fibonacci Generator (mlfg) Prime Modulus Linear Congruential Generator (pmlcg)

The number represents the type of generator in the Class interface

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I

zn = xn XOR yn

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I

zn = xn XOR yn xn = xn−k + xn−l (mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I

xn = axn−1 + p(mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I

xn = axn−1 + p(mod M) p is a prime addend

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

3. lcg64: 64-Bit Linear Congruential Generator w/Prime Addend

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

3. lcg64: 64-Bit Linear Congruential Generator w/Prime Addend I

The 48-bit LCG, except that the arithmetic is modulo 264

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

3. lcg64: 64-Bit Linear Congruential Generator w/Prime Addend I I

The 48-bit LCG, except that the arithmetic is modulo 264 The multipliers and prime addends for this generator are different from those for the 48-bit generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I

zn = xn + yn ∗ 232 (mod 264 )

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I

xn = xn−k ∗ xn−l (mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k.

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k. M is chosen to be 264

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k. M is chosen to be 264

6. pmlcg: Prime Modulus Linear Congruential Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k. M is chosen to be 264

6. pmlcg: Prime Modulus Linear Congruential Generator I

xn = a ∗ xn−1 (mod 261 − 1)

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Default Interface

Default Interface I

Sprng(int streamnum, int nstreams, int seed, int param) (Constructor)

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Default Interface

Default Interface I

Sprng(int streamnum, int nstreams, int seed, int param) (Constructor)

I

double sprng() - The next random number in [0,1) is returned

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Default Interface

Default Interface I

Sprng(int streamnum, int nstreams, int seed, int param) (Constructor)

I

double sprng() - The next random number in [0,1) is returned

I

int isprng() - The next random number in [0,231 ) is returned

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Simple Interface

Simple Interface I

int * init_sprng(int seed, int param, int rng_type = 0)

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Simple Interface

Simple Interface I

int * init_sprng(int seed, int param, int rng_type = 0)

I

double sprng() - The next random number in [0, 1) is returned

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Simple Interface

Simple Interface I

int * init_sprng(int seed, int param, int rng_type = 0)

I

double sprng() - The next random number in [0, 1) is returned

I

int isprng() - The next random number in [0, 231 ) is returned

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I

Modified Lagged Fibonacci Generator - 11

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3 Combined Multiple Recursive Generator - 3

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3 Combined Multiple Recursive Generator - 3 Multiplicative Lagged Fibonacci Generator - 11

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3 Combined Multiple Recursive Generator - 3 Multiplicative Lagged Fibonacci Generator - 11 Prime Modulus Linear Congruential Generator - 1

The SPRNG Library How to Use SPRNG Usage Examples

Usage Example - Default Interface Use Example - Default Interface #define PARAM SPRNG_LFG int gtype = 1; seed = make_sprng_seed(); Sprng *gen1; gen1 = SelectType(gtype); gen1->init_sprng(0,ngens,seed,PARAM); int random_int = gen1->isprng(); double random_float = gen1->get_rn_flt_simple(); gen1->free_sprng();

The SPRNG Library How to Use SPRNG Usage Examples

Usage Example - Simple Interface

Usage Example - Simple Interface #define PARAM SPRNG_LFG int gtype = 1; seed = make_sprng_seed(); gen = init_sprng(seed, PARAM, gtype); int random_int = isprng(); double random_float = get_rn_flt_simple();

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

convert.cpp - Used to be an example of converting old code to new, but mostly empty

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

I

convert.cpp - Used to be an example of converting old code to new, but mostly empty pi-simple.cpp - Compute pi using Monte Carlo integration

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

I I

convert.cpp - Used to be an example of converting old code to new, but mostly empty pi-simple.cpp - Compute pi using Monte Carlo integration spawn.cpp - Small sample program to get you started

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

I I I

convert.cpp - Used to be an example of converting old code to new, but mostly empty pi-simple.cpp - Compute pi using Monte Carlo integration spawn.cpp - Small sample program to get you started Fortran versions as well

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests

I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test

I

Other Tests

I

I I

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test Other Tests fft.cpp - FFT test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test Other Tests fft.cpp - FFT test metropolis.cpp - Metropolis Algorithm

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I I I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test Other Tests fft.cpp - FFT test metropolis.cpp - Metropolis Algorithm random_walk.cpp - Random Walk Algorithm

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I

Support for cycle splitting

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG 1. Shift-register generators via splitting (MT/Well)

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG 1. Shift-register generators via splitting (MT/Well) 2. New parameters for small-memory generators

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG 1. Shift-register generators via splitting (MT/Well) 2. New parameters for small-memory generators

I

Commercialization of SPRNG

The SPRNG Library References

References [M. Mascagni and H. Chi (2004)] Parallel Linear Congruential Generators with Sophie-Germain Moduli, Parallel Computing, 30: 1217–1231.

The SPRNG Library References

References [M. Mascagni and H. Chi (2004)] Parallel Linear Congruential Generators with Sophie-Germain Moduli, Parallel Computing, 30: 1217–1231. [M. Mascagni and A. Srinivasan (2004)] Parameterizing Parallel Multiplicative Lagged-Fibonacci Generators, Parallel Computing, 30: 899–916.

The SPRNG Library References

References [M. Mascagni and H. Chi (2004)] Parallel Linear Congruential Generators with Sophie-Germain Moduli, Parallel Computing, 30: 1217–1231. [M. Mascagni and A. Srinivasan (2004)] Parameterizing Parallel Multiplicative Lagged-Fibonacci Generators, Parallel Computing, 30: 899–916. [M. Mascagni and A. Srinivasan (2000)] Algorithm 806: SPRNG: A Scalable Library for Pseudorandom Number Generation, ACM Transactions on Mathematical Software, 26: 436–461.

The SPRNG Library References

Questions?

The SPRNG Library References

c Michael Mascagni, 2010

The Scalable Parallel Random Number Generators (SPRNG) Library Prof. Michael Mascagni Departments of Computer Science, Mathematics & Scientific Computing Florida State University, Tallahassee, FL 32306 USA E-mail: [email protected] URL: http://www.cs.fsu.edu/~mascagni

The SPRNG Library

Outline of the Talk Where to Get SPRNG How to Build SPRNG Testing SPRNG How SPRNG is Structured Specific Generator Details How to Use SPRNG Class Structure and Simple modes Random Number Parameters Usage Examples Usage Example - Default Interface Usage Example - Simple Interface

Other Parts of Interest in SPRNG Other Parts - Examples Folder Other Parts - Tests Folder SPRNG’s Future References

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I

Quick Start

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I

Quick Start Quick Reference

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I I

Quick Start Quick Reference User’s Guide

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I I I

Quick Start Quick Reference User’s Guide Reference Manual

The SPRNG Library Where to Get SPRNG

Where to Get SPRNG Where to Get SPRNG I

The main web site for SPRNG is located at URLs: http://sprng.cs.fsu.edu or http://www.sprng.org

I

Many versions available.

I

Latest version 4.0 which is C++ The 4.0 page gives info pages to 4.0 page info

I

I I I I I

Quick Start Quick Reference User’s Guide Reference Manual Examples

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

I

Run make

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

I

Run make

I

NB: Sometimes ’make’ has errors on some parts which can be ignored. In these cases, ’make -k’ can be used to continue compiling even if there are errors.

The SPRNG Library How to Build SPRNG

How to Build SPRNG How to Build SPRNG I

zcat sprng4.tar.gz | tar xovf -

I

cd sprng4

I

Run ./configure

I

Run make

I

NB: Sometimes ’make’ has errors on some parts which can be ignored. In these cases, ’make -k’ can be used to continue compiling even if there are errors.

I

The MPI programs sometimes need special configuring.

The SPRNG Library How to Build SPRNG Testing SPRNG

Testing SPRNG

How to check the build I

Go to directory check, and run ./checksprng.

The SPRNG Library How to Build SPRNG Testing SPRNG

Testing SPRNG

How to check the build I

Go to directory check, and run ./checksprng.

I

This program checks to see if SPRNG has been correctly installed.

The SPRNG Library How to Build SPRNG Testing SPRNG

Testing SPRNG

How to check the build I

Go to directory check, and run ./checksprng.

I

This program checks to see if SPRNG has been correctly installed.

I

The check folder contains a single program which generates known sequences and checks this against a data file.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I

SRC - Source code for SPRNG.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed. check - contains executables ./checksprng and ./timesprng.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

I I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed. check - contains executables ./checksprng and ./timesprng. lib - contains SPRNG library libsprng after sucessful installation.

The SPRNG Library How SPRNG is Structured

How SPRNG is Structured How SPRNG is Structured I Directories in SPRNG I I

I

I I

I

SRC - Source code for SPRNG. EXAMPLES - Examples of SPRNG usage. All MPI examples are placed in subdirectory mpisprng. If MPI is installed on your machine, then all MPI examples will be automatically installed. TESTS - Empirical and physical tests for SPRNG generators. All MPI tests are stored in subdirectory mpitests. If MPI is installed on your machine, then all MPI tests will be automatically installed. check - contains executables ./checksprng and ./timesprng. lib - contains SPRNG library libsprng after sucessful installation. include - SPRNG header files.

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I

0: Modified Lagged-Fibonacci Generator (lfg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I

0: Modified Lagged-Fibonacci Generator (lfg) 1: 48-Bit Linear Congruential Generator w/Prime Addend (lcg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I

0: Modified Lagged-Fibonacci Generator (lfg) 1: 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 2: 64-Bit Linear Congruential Generator w/Prime Addend (lcg64)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I

0: 1: 2: 3:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I I

0: 1: 2: 3: 4:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg) Multiplicative Lagged-Fibonacci Generator (mlfg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I I I

0: 1: 2: 3: 4: 5:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg) Multiplicative Lagged-Fibonacci Generator (mlfg) Prime Modulus Linear Congruential Generator (pmlcg)

The SPRNG Library How SPRNG is Structured

Predefined Generators

Types of generators I Types of generators I I I I I I

I

0: 1: 2: 3: 4: 5:

Modified Lagged-Fibonacci Generator (lfg) 48-Bit Linear Congruential Generator w/Prime Addend (lcg) 64-Bit Linear Congruential Generator w/Prime Addend (lcg64) Combined Multiple Recursive Generator (cmrg) Multiplicative Lagged-Fibonacci Generator (mlfg) Prime Modulus Linear Congruential Generator (pmlcg)

The number represents the type of generator in the Class interface

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I

zn = xn XOR yn

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I

zn = xn XOR yn xn = xn−k + xn−l (mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I

xn = axn−1 + p(mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I

xn = axn−1 + p(mod M) p is a prime addend

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

3. lcg64: 64-Bit Linear Congruential Generator w/Prime Addend

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

3. lcg64: 64-Bit Linear Congruential Generator w/Prime Addend I

The 48-bit LCG, except that the arithmetic is modulo 264

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 1. lfg: Modified-Lagged Fibonacci Generator (the default generator) I I I

zn = xn XOR yn xn = xn−k + xn−l (mod M) yn = yn−k + yn−l (mod M)

2. lcg: 48-Bit Linear Congruential Generator w/Prime Addend I I I I

xn = axn−1 + p(mod M) p is a prime addend a is the multiplier M for this generator is 248

3. lcg64: 64-Bit Linear Congruential Generator w/Prime Addend I I

The 48-bit LCG, except that the arithmetic is modulo 264 The multipliers and prime addends for this generator are different from those for the 48-bit generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I

zn = xn + yn ∗ 232 (mod 264 )

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I

xn = xn−k ∗ xn−l (mod M)

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k.

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k. M is chosen to be 264

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k. M is chosen to be 264

6. pmlcg: Prime Modulus Linear Congruential Generator

The SPRNG Library How SPRNG is Structured Specific Generator Details

Specific Generator Details 4. cmrg: Combined Multiple Recursive Generator I I

I

zn = xn + yn ∗ 232 (mod 264 ) xn is the sequence generated by the 64 bit Linear Congruential Generator yn is the sequence generated by the following prime modulus Multiple Recursive Generator

5. mlfg: Multiplicative Lagged-Fibonacci Generator I I

I

xn = xn−k ∗ xn−l (mod M) l and k are called the lags of the generator, with convention that l > k. M is chosen to be 264

6. pmlcg: Prime Modulus Linear Congruential Generator I

xn = a ∗ xn−1 (mod 261 − 1)

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Default Interface

Default Interface I

Sprng(int streamnum, int nstreams, int seed, int param) (Constructor)

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Default Interface

Default Interface I

Sprng(int streamnum, int nstreams, int seed, int param) (Constructor)

I

double sprng() - The next random number in [0,1) is returned

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Default Interface

Default Interface I

Sprng(int streamnum, int nstreams, int seed, int param) (Constructor)

I

double sprng() - The next random number in [0,1) is returned

I

int isprng() - The next random number in [0,231 ) is returned

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Simple Interface

Simple Interface I

int * init_sprng(int seed, int param, int rng_type = 0)

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Simple Interface

Simple Interface I

int * init_sprng(int seed, int param, int rng_type = 0)

I

double sprng() - The next random number in [0, 1) is returned

The SPRNG Library How to Use SPRNG Class Structure and Simple modes

Simple Interface

Simple Interface I

int * init_sprng(int seed, int param, int rng_type = 0)

I

double sprng() - The next random number in [0, 1) is returned

I

int isprng() - The next random number in [0, 231 ) is returned

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I

Modified Lagged Fibonacci Generator - 11

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3 Combined Multiple Recursive Generator - 3

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3 Combined Multiple Recursive Generator - 3 Multiplicative Lagged Fibonacci Generator - 11

The SPRNG Library How to Use SPRNG Random Number Parameters

Random Number Parameter

Random Number Parameters I Parameter is the number of predefined families defined I I I I I I

Modified Lagged Fibonacci Generator - 11 48 Bit Linear Congruential Generator - 7 64 Bit Linear Congruential Generator - 3 Combined Multiple Recursive Generator - 3 Multiplicative Lagged Fibonacci Generator - 11 Prime Modulus Linear Congruential Generator - 1

The SPRNG Library How to Use SPRNG Usage Examples

Usage Example - Default Interface Use Example - Default Interface #define PARAM SPRNG_LFG int gtype = 1; seed = make_sprng_seed(); Sprng *gen1; gen1 = SelectType(gtype); gen1->init_sprng(0,ngens,seed,PARAM); int random_int = gen1->isprng(); double random_float = gen1->get_rn_flt_simple(); gen1->free_sprng();

The SPRNG Library How to Use SPRNG Usage Examples

Usage Example - Simple Interface

Usage Example - Simple Interface #define PARAM SPRNG_LFG int gtype = 1; seed = make_sprng_seed(); gen = init_sprng(seed, PARAM, gtype); int random_int = isprng(); double random_float = get_rn_flt_simple();

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

convert.cpp - Used to be an example of converting old code to new, but mostly empty

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

I

convert.cpp - Used to be an example of converting old code to new, but mostly empty pi-simple.cpp - Compute pi using Monte Carlo integration

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

I I

convert.cpp - Used to be an example of converting old code to new, but mostly empty pi-simple.cpp - Compute pi using Monte Carlo integration spawn.cpp - Small sample program to get you started

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Examples Folder

Other Parts - Examples Folder

Other Parts - Examples Folder I Examples Folder Examples Folder I

I I I

convert.cpp - Used to be an example of converting old code to new, but mostly empty pi-simple.cpp - Compute pi using Monte Carlo integration spawn.cpp - Small sample program to get you started Fortran versions as well

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests

I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test

I

Other Tests

I

I I

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test Other Tests fft.cpp - FFT test

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test Other Tests fft.cpp - FFT test metropolis.cpp - Metropolis Algorithm

The SPRNG Library Other Parts of Interest in SPRNG Other Parts - Tests Folder

Other Parts - Tests Folder Other Parts - Tests Folder I Tests Folder I

Statistical Tests I

I I I I I I I

chisquare.cpp - Chi-Square and Kolmogorov-Smirnov Probability Functions collisions.cpp - Collision test coupon.cpp - Coupon test equidist.cpp - Equidistribution test Other Tests fft.cpp - FFT test metropolis.cpp - Metropolis Algorithm random_walk.cpp - Random Walk Algorithm

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I

Support for cycle splitting

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG 1. Shift-register generators via splitting (MT/Well)

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG 1. Shift-register generators via splitting (MT/Well) 2. New parameters for small-memory generators

The SPRNG Library SPRNG’s Future

SPRNG’s Future I

A Visual Studio compile is under development (for Windows!?)

I

There are several compiler warnings that need to be addressed with newer g++ versions

I

The class interface is not optimal for extension New architectural support for (and maintaining reproducibility as an option)

I

1. Multicore via Open/MP and eventually Open/CL 2. GPGPU support via CUDA and eventually Open/CL I I

Support for cycle splitting New generators for SPRNG 1. Shift-register generators via splitting (MT/Well) 2. New parameters for small-memory generators

I

Commercialization of SPRNG

The SPRNG Library References

References [M. Mascagni and H. Chi (2004)] Parallel Linear Congruential Generators with Sophie-Germain Moduli, Parallel Computing, 30: 1217–1231.

The SPRNG Library References

References [M. Mascagni and H. Chi (2004)] Parallel Linear Congruential Generators with Sophie-Germain Moduli, Parallel Computing, 30: 1217–1231. [M. Mascagni and A. Srinivasan (2004)] Parameterizing Parallel Multiplicative Lagged-Fibonacci Generators, Parallel Computing, 30: 899–916.

The SPRNG Library References

References [M. Mascagni and H. Chi (2004)] Parallel Linear Congruential Generators with Sophie-Germain Moduli, Parallel Computing, 30: 1217–1231. [M. Mascagni and A. Srinivasan (2004)] Parameterizing Parallel Multiplicative Lagged-Fibonacci Generators, Parallel Computing, 30: 899–916. [M. Mascagni and A. Srinivasan (2000)] Algorithm 806: SPRNG: A Scalable Library for Pseudorandom Number Generation, ACM Transactions on Mathematical Software, 26: 436–461.

The SPRNG Library References

Questions?

The SPRNG Library References

c Michael Mascagni, 2010