blob: 117c5795331db309cb86f019d4ec79545576e4fa [file] [log] [blame]
~~
~~ Licensed to the Apache Software Foundation (ASF) under one or more
~~ contributor license agreements. See the NOTICE file distributed with
~~ this work for additional information regarding copyright ownership.
~~ The ASF licenses this file to You under the Apache License, Version 2.0
~~ (the "License"); you may not use this file except in compliance with
~~ the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing, software
~~ distributed under the License is distributed on an "AS IS" BASIS,
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~ See the License for the specific language governing permissions and
~~ limitations under the License.
~~
-----------------------------
The Apache Commons RNG User Guide
-----------------------------
1. Purpose
<<<Commons RNG>>> provides generators of "pseudo-randomness", i.e. the
generators produce deterministic sequences of bytes, currently in chunks
of 32 (a.k.a. <<<int>>>) or 64 bits (a.k.a. <<<long>>>), depending on the
implementation.
The goal was to provide an API that is simple and unencumbered with old
design decisions.
The design is clean and its rationale is explained in the code and Javadoc
(as well as in the extensive discussions on the "Apache Commons" project's
mailing list).
The code evolved during several months in order to accommodate the
requirements gathered from the design issues identified in the
<<<org.apache.commons.math3.random>>> package and the explicit design
goal of {{{./why_not_java_random.html}severing ties}} to <<<java.util.Random>>>.
The library is divided into modules:
* {{{../commons-rng-client-api/apidocs/org/apache/commons/rng/package-summary.html}Client API}} (requires Java 6)
This module provides the
{{{../commons-rng-client-api/apidocs/org/apache/commons/rng/RestorableUniformRandomProvider.html}interface}}
to be passed as argument to a procedure that needs to access to a sequence of random numbers.
* {{{../commons-rng-core/apidocs/org/apache/commons/rng/core/package-summary.html}Core}} (requires Java 6)
This module contains the implementations of several generators of pseudo-random sequences of numbers.
Code in this module is intended to be internal to this library and no user code should access it
directly.
With the advent of {{{http://openjdk.java.net/projects/jigsaw/}Java modularization}}, it is possible
that future releases of the library will enforce access through the
{{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/RandomSource.html}RandomSource}}
factory.
* {{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/package-summary.html}Simple}} (requires Java 6)
This module provides factory methods for creating instances of all the generators implemented
in the <<<commons-rng-core>>> module.
* {{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/package-summary.html}Sampling}} (requires Java 6)
This module provides implementations that generate a sequence of numbers according to some
specified probability distribution, and utilities to sample from a generic collection of items.
It is an example of usage of the API provided in the <<<commons-rng-client-api>>> module.
* Examples
This module provides miscellaneous complete applications that illustrate usage of the library.
Please note that this module is not part of the library's API; no compatibility should be expected
in successive releases of "Commons RNG".
As of version 1.1, the following modules are provided:
** <<<examples-jmh>>>: JMH benchmarking (requires Java 8)
This module uses the {{{http://openjdk.java.net/projects/code-tools/jmh/}JMH micro-benchmark framework}}
in order to assess the relative performance of the generators (see tables below).
** <<<examples-stress>>>: Stress testing (requires Java 8)
This module implements a wrapper that calls external tools that can assess the quality of
the generators by submitting their output to a battery of "stress tests" (see tables below).
** <<<examples-sampling>>>: Probability density (requires Java 8)
This module contains the code that generates the data used to produce the probability density
plots shown in {{{./dist_density_approx.html}this userguide}}.
** <<<examples-jpms>>>: JPMS integration (requires Java 9)
This module implements a dummy application that shows how to use the artefacts (produced
from the maven modules described above) as Java modules ({{{https://en.wikipedia.org/wiki/Java_Platform_Module_System}JPMS}}).
** <<<examples-quadrature>>>: Quadrature (requires Java 8)
This module contains an application that estimates the number 𝞹 using quasi-Montecarlo integration.
[]
[]
2. Usage overview
Please refer to the generated documentation (of the appropriate module)
for details on the API illustrated by the following examples.
* Random number generator objects are instantiated through factory
methods defined in <<<RandomSource>>>, an <<<enum>>> that declares
{{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/RandomSource.html#enum.constant.detail}all the available implementations}}.
+--------------------------+
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
UniformRandomProvider rng = RandomSource.create(RandomSource.MT);
+--------------------------+
* A generator will return a randomly selected element from a range
of possible values of some Java (primitive) type.
+--------------------------+
boolean isOn = rng.nextBoolean(); // "true" or "false".
+--------------------------+
+--------------------------+
int n = rng.nextInt(); // Integer.MIN_VALUE <= n <= Integer.MAX_VALUE.
int m = rng.nextInt(max); // 0 <= m < max.
+--------------------------+
+--------------------------+
long n = rng.nextLong(); // Long.MIN_VALUE <= n <= Long.MAX_VALUE.
long m = rng.nextLong(max); // 0 <= m < max.
+--------------------------+
+--------------------------+
float x = rng.nextFloat(); // 0 <= x < 1.
+--------------------------+
+--------------------------+
double x = rng.nextDouble(); // 0 <= x < 1.
+--------------------------+
* A generator will fill a given <<<byte>>> array with random values.
+--------------------------+
byte[] a = new byte[47];
// The elements of "a" are replaced with random values from the interval [-128, 127].
rng.nextBytes(a);
+--------------------------+
+--------------------------+
byte[] a = new byte[47];
// Replace 3 elements of the array (at indices 15, 16 and 17) with random values.
rng.nextBytes(a, 15, 3);
+--------------------------+
* In order to generate reproducible sequences, generators must be instantiated with a user-defined seed.
+--------------------------+
UniformRandomProvider rng = RandomSource.create(RandomSource.SPLIT_MIX_64, 5776);
+--------------------------+
If no seed is passed, a random seed is generated implicitly.
Convenience methods are provided for explicitly generating random seeds of the various types.
+--------------------------+
int seed = RandomSource.createInt();
+--------------------------+
+--------------------------+
long seed = RandomSource.createLong();
+--------------------------+
+--------------------------+
int[] seed = RandomSource.createIntArray(128); // Length of returned array is 128.
+--------------------------+
+--------------------------+
long[] seed = RandomSource.createLongArray(128); // Length of returned array is 128.
+--------------------------+
* Any of the following types can be passed to the <<<create>>> method as the "seed" argument:
** <<<int>>> or <<<Integer>>>
** <<<long>>> or <<<Long>>>
** <<<int[]>>>
** <<<long[]>>>
** <<<byte[]>>>
[]
+--------------------------+
UniformRandomProvider rng = RandomSource.create(RandomSource.ISAAC, 5776);
+--------------------------+
+--------------------------+
UniformRandomProvider rng = RandomSource.create(RandomSource.ISAAC, new int[] { 6, 7, 7, 5, 6, 1, 0, 2 });
+--------------------------+
+--------------------------+
UniformRandomProvider rng = RandomSource.create(RandomSource.ISAAC, new long[] { 0x638a3fd83bc0e851L, 0x9730fd12c75ae247L });
+--------------------------+
Note however that, upon initialization, the underlying generation algorithm
** may not use all the information contents of the seed,
** may use a procedure (using the given seed as input) for further filling its internal state
(in order to avoid a too uniform initial state).
[]
In both cases, the behavior is not standard but should not change between releases of the library
(bugs notwithstanding).
Each RNG implementation has a single "native" seed; when the seed argument passed
to the <<<create>>> method is not of the native type, it is automatically converted.
The conversion preserves the information contents but is otherwise not specified (i.e.
different releases of the library may use different conversion procedures).
Hence, if reproducibility of the generated sequences across successive releases of the
library is necessary, users should ensure that they use native seeds.
+--------------------------+
long seed = 9246234616L;
if (!RandomSource.TWO_CMRES.isNativeSeed(seed)) {
throw new IllegalArgumentException("Seed is not native");
}
+--------------------------+
For each available implementation, the native seed type is specified in the
{{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/RandomSource.html#enum.constant.detail}Javadoc}}.
* Whenever a random source implementation is parameterized, the custom arguments
are passed after the seed.
+--------------------------+
int seed = 96912062;
int first = 7; // Subcycle identifier.
int second = 4; // Subcycle identifier.
UniformRandomProvider rng = RandomSource.create(RandomSource.TWO_CMRES_SELECT, seed, first, second);
+--------------------------+
In the above example, valid "subcycle identifiers" are in the interval [0, 13].
* The current state of a generator can be
{{{../commons-rng-client-api/apidocs/org/apache/commons/rng/RestorableUniformRandomProvider.html#saveState--}saved}}
and
{{{../commons-rng-client-api/apidocs/org/apache/commons/rng/RestorableUniformRandomProvider.html#restoreState-org.apache.commons.rng.RandomProviderState-}restored}}
later on.
+--------------------------+
import org.apache.commons.rng.RestorableUniformRandomProvider;
import org.apache.commons.rng.RandomProviderState;
RestorableUniformRandomProvider rng = RandomSource.create(RandomSource.WELL_512_A);
RandomProviderState state = rng.saveState();
double x = rng.nextDouble();
rng.restoreState(state);
double y = rng.nextDouble(); // x == y.
+--------------------------+
* The <<<UniformRandomProvider>>> objects returned from the <<<create>>> methods do not
implement the <<<java.io.Serializable>>> interface.
However, users can easily set up a custom serialization scheme if the random source
is known at both ends of the communication channel.
This would be useful namely to save the state to persistent storage, and restore it
such that the sequence will continue from where it left off.
+--------------------------+
import org.apache.commons.rng.RestorableUniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
import org.apache.commons.rng.core.RandomProviderDefaultState;
RandomSource source = RandomSource.MT_64; // Known source identifier.
RestorableUniformRandomProvider rngOrig = RandomSource.create(source); // Original RNG instance.
// Save and serialize state.
RandomProviderState stateOrig = rngOrig.saveState(rngOrig);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(((RandomProviderDefaultState) stateOrig).getState());
// Deserialize state.
ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
ObjectInputStream ois = new ObjectInputStream(bis);
RandomProviderState stateNew = new RandomProviderDefaultState((byte[]) ois.readObject());
RestorableUniformRandomProvider rngNew = RandomSource.create(source); // New RNG instance from the same "source".
// Restore original state on the new instance.
rngNew.restoreState(stateNew);
+--------------------------+
* The <<<JumpableUniformRandomProvider>>> interface allows creation of a copy of the generator and
advances the state of the current generator a large number of steps in a single jump. This can
be used to create a set of generators that will not overlap in their output sequence for the
length of the jump for use in parallel computations.
+--------------------------+
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.JumpableUniformRandomProvider;
import org.apache.commons.rng.simple.RandomSource;
RandomSource source = RandomSource.XO_RO_SHI_RO_128_SS; // Known to be jumpable.
JumpableUniformRandomProvider master = (JumpableUniformRandomProvider) RandomSource.create(source);
// For use in parallel
UniformRandomProvider[] rngs = new UniformRandomProvider[10];
for (int i = 0; i < rngs.length; i++) {
rngs[i] = master.jump();
}
+--------------------------+
In the above example, the source is known to implement the <<<JumpableUniformRandomProvider>>> interface.
Not all generators support this functionality. You can determine if a <<<RandomSource>>> is
jumpable without creating one using the instance methods <<<isJumpable()>>> and <<<isLongJumpable()>>>.
+--------------------------+
import org.apache.commons.rng.simple.RandomSource;
public void initialise(RandomSource source) {
if (!source.isJumpable()) {
throw new IllegalArgumentException("Require a jumpable random source");
}
// ...
}
+--------------------------+
* Generation of {{{./dist_density_approx.html}random deviates}} for various
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/distribution/package-summary.html}distributions}}.
+--------------------------+
import org.apache.commons.rng.sampling.distribution.ContinuousSampler;
import org.apache.commons.rng.sampling.distribution.GaussianSampler;
import org.apache.commons.rng.sampling.distribution.MarsagliaNormalizedGaussianSampler;
ContinuousSampler sampler = GaussianSampler.of(MarsagliaNormalizedGaussianSampler.of(RandomSource.create(RandomSource.MT_64)),
45.6, 2.3);
double random = sampler.sample();
+--------------------------+
+--------------------------+
import org.apache.commons.rng.sampling.distribution.DiscreteSampler;
import org.apache.commons.rng.sampling.distribution.RejectionInversionZipfSampler;
DiscreteSampler sampler = RejectionInversionZipfSampler.of(RandomSource.create(RandomSource.ISAAC),
5, 1.2);
int random = sampler.sample();
+--------------------------+
* The <<<SharedStateSampler>>> interface allows creation of a copy of the sampler using a new
generator. The samplers share only their immutable state and can be used in parallel computations.
+--------------------------+
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.sampling.distribution.MarsagliaTsangWangDiscreteSampler;
import org.apache.commons.rng.sampling.distribution.SharedStateDiscreteSampler;
import org.apache.commons.rng.simple.RandomSource;
RandomSource source = RandomSource.PCG_XSH_RR_32;
double[] probabilities = {0.1, 0.2, 0.3, 0.4};
SharedStateDiscreteSampler sampler1 = MarsagliaTsangWangDiscreteSampler.Enumerated.of(RandomSource.create(source),
probabilities);
// For use in parallel
SharedStateDiscreteSampler sampler2 = sampler1.withUniformRandomProvider(RandomSource.create(source));
+--------------------------+
All samplers support the <<<SharedStateSampler>>> interface.
* {{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/PermutationSampler.html}Permutation}},
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/CombinationSampler.html}Combination}},
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/CollectionSampler.html}sampling from a <<<Collection>>>}}
and shuffling utilities.
+--------------------------+
import org.apache.commons.rng.sampling.PermutationSampler;
import org.apache.commons.rng.sampling.CombinationSampler;
// 3 elements from the (0, 1, 2, 3, 4, 5) tuplet.
int n = 6;
int k = 3;
// If the order of the elements matters.
PermutationSampler permutationSampler = new PermutationSampler(RandomSource.create(RandomSource.KISS),
n, k);
// n! / (n - k)! = 120 permutations.
int[] permutation = permutationSampler.sample();
// If the order of the elements does not matter.
CombinationSampler combinationSampler = new CombinationSampler(RandomSource.create(RandomSource.KISS),
n, k);
// n! / (k! (n - k)!) = 20 combinations.
int[] combination = combinationSampler.sample();
+--------------------------+
+--------------------------+
import java.util.HashSet;
import org.apache.commons.rng.sampling.CollectionSampler;
HashSet<String> list = new HashSet<String>();
list.add("Apache");
list.add("Commons");
list.add("RNG");
CollectionSampler<String> sampler = new CollectionSampler<String>(RandomSource.create(RandomSource.MWC_256),
list, 1);
String word = sampler.sample();
+--------------------------+
+--------------------------+
import java.util.Arrays;
import java.util.List;
import org.apache.commons.rng.UniformRandomProvider;
import org.apache.commons.rng.sampling.ListSampler;
List<String> list = Arrays.asList("Apache", "Commons", "RNG");
UniformRandomProvider rng = RandomSource.create(RandomSource.PCG_XSH_RS_32);
// Get 2 random items
int k = 2;
List<String> sample = ListSampler.sample(rng, list, k);
// Shuffle the list
ListSampler.shuffle(rng, list)
+--------------------------+
[]
3. Library layout
The API for client code consists of classes and interfaces defined in package
{{{../commons-rng-client-api/apidocs/org/apache/commons/rng/package-summary.html}org.apache.commons.rng}}.
* Interface <<<UniformRandomProvider>>> provides access to a sequence of
random values uniformly distributed within some range.
* Interfaces <<<RestorableUniformRandomProvider>>> and <<<RandomProviderState>>>
provide the "save/restore" API.
* Interfaces <<<JumpableUniformRandomProvider>>> and <<<LongJumpableUniformRandomProvider>>>
provide the "copy and jump" API for parallel computations.
[]
The API for instantiating generators is defined in package
{{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/package-summary.html}org.apache.commons.rng.simple}}.
* Enum <<<RandomSource>>> determines which algorithm to use for generating the
sequence of random values.
[]
The <<<org.apache.commons.rng.simple.internal>>> package contains classes
for supporting initialization (a.k.a. "seeding") of the generators.
They must not be used directly in applications, as all the necessary utilities
are accessible through methods defined in <<<RandomSource>>>.
* <<<ProviderBuilder>>>: contains methods for instantiating the concrete
RNG implementations based on the source identifier; it also takes care
of calling the appropriate classes for seed type conversion.
* <<<SeedFactory>>>: contains factory methods for generating random seeds.
* <<<SeedConverter>>>: interface for classes that transform between
supported seed types.
* Various classes that implement <<<SeedConverter>>> in order to transform
from caller's seed to "native" seed.
[]
The {{{../commons-rng-core/apidocs/org/apache/commons/rng/core/package-summary.html}org.apache.commons.rng.core}}
package contains the implementation of the algorithms for the generation of
pseudo-random sequences.
Applications should not directly import or use classes defined in this package:
all generators can be instantiated through the <<<RandomSource>>> factory.
* Class <<<RandomProviderDefaultState>>> implements the <<<RandomProviderState>>>
interface to enable "save/restore" for all <<<RestorableUniformRandomProvider>>>
instances created through the <<<RandomSource>>> factory methods.
* <<<BaseProvider>>>: base class for all concrete RNG implementations;
it contains higher-level algorithms <<<nextInt(int n)>>> and <<<nextLong(long n)>>>
common to all implementations.
* <<<org.apache.commons.rng.core.util>>>
** <<<NumberFactory>>>: contains utilities for interpreting and combining
the output (<<<int>>> or <<<long>>>) of the underlying source of
randomness into the requested output, i.e. one of the Java primitive
types supported by <<<UniformRandomProvider>>>.
[]
* <<<org.apache.commons.rng.core.source32>>>
** <<<RandomIntSource>>>: describes an algorithm that generates randomness in
32-bits chunks (a.k.a Java <<<int>>>).
** <<<IntProvider>>>: base class for concrete classes that implement <<<RandomIntSource>>>.
** Concrete RNG algorithms that are subclasses of <<<IntProvider>>>.
[]
* <<<org.apache.commons.rng.core.source64>>>
** <<<RandomLongSource>>>: describes an algorithm that generates randomness in
64-bits chunks (a.k.a Java <<<long>>>).
** <<<LongProvider>>>: base class for concrete classes that implement <<<RandomLongSource>>>.
** Concrete RNG algorithms that are subclasses of <<<LongProvider>>>.
[]
[]
4. Performance
This section reports
{{{../commons-rng-examples/examples-jmh/apidocs/org/apache/commons/rng/jmh/package-summary.html}performance benchmarks}} of the RNG implementations.
All runs were performed on a platform with the following characteristics:
* CPU: Intel(R) Xeon(R) CPU E5-1680 v3 @ 3.20GHz
* Java version: 1.8.0_222 (build 1.8.0_222-8u222-b10-1ubuntu1~16.04.1-b10)
* JVM: OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
[]
Performance was measured using the
{{{http://openjdk.java.net/projects/code-tools/jmh/}Java Micro-benchmark Harness (JMH)}}.
In these tables:
* The first column is the RNG identifier (see {{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/RandomSource.html}RandomSource}})
* <Lower> is <better>.
[]
* 4.1 Generating primitive values
The following table indicates the performance for generating:
* a sequence of true/false values (a.k.a. Java type <<<boolean>>>)
* a sequence of 64-bit floating point numbers (a.k.a. Java type <<<double>>>)
* a sequence of 64-bit integers (a.k.a. Java type <<<long>>>)
* a sequence of 32-bit floating point numbers (a.k.a. Java type <<<float>>>)
* a sequence of 32-bit integers (a.k.a. Java type <<<int>>>)
[]
Scores are normalized to the score of <<<RandomSource.JDK>>>.
Note that the core implementations use all the bits from the random source. For example a native generator of 32-bit <<<int>>> values requires 1 generation call per 32 <<<boolean>>> values; a native generator of 64-bit <<<long>>> values requires 1 generation call per 2 <<<int>>> values. This implementation is fast for all generators but requires a high quality random source. See the {{{a5._Quality}Quality}} section.
*-----------------------*---------*---------*---------*---------*---------*
|| RNG identifier || <<<boolean>>> || <<<double>>> || <<<long>>> || <<<float>>> || <<<int>>> |
*-----------------------+---------:---------:---------:---------:---------:
| JDK | 1.00000 | 1.00000 | 1.00000 | 1.00000 | 1.00000 |
*-----------------------+---------:---------:---------:---------:---------:
| WELL_512_A | 1.22135 | 0.63756 | 0.60684 | 0.90953 | 0.79363 |
*-----------------------+---------:---------:---------:---------:---------:
| WELL_1024_A | 1.22536 | 0.63199 | 0.61213 | 0.91580 | 0.71210 |
*-----------------------+---------:---------:---------:---------:---------:
| WELL_19937_A | 1.27715 | 0.95424 | 0.91068 | 1.09435 | 1.11319 |
*-----------------------+---------:---------:---------:---------:---------:
| WELL_19937_C | 1.27868 | 1.05484 | 0.94517 | 1.21650 | 1.12486 |
*-----------------------+---------:---------:---------:---------:---------:
| WELL_44497_A | 1.28431 | 1.05087 | 0.97923 | 1.18770 | 1.14345 |
*-----------------------+---------:---------:---------:---------:---------:
| WELL_44497_B | 1.29366 | 1.09522 | 1.03174 | 1.28343 | 1.21057 |
*-----------------------+---------:---------:---------:---------:---------:
| MT | 1.34824 | 0.49765 | 0.43397 | 0.68068 | 0.60217 |
*-----------------------+---------:---------:---------:---------:---------:
| ISAAC | 0.97850 | 0.54703 | 0.49186 | 0.59288 | 0.51175 |
*-----------------------+---------:---------:---------:---------:---------:
| SPLIT_MIX_64 | 1.14891 | 0.13411 | 0.09746 | 0.27066 | 0.20567 |
*-----------------------+---------:---------:---------:---------:---------:
| XOR_SHIFT_1024_S | 1.14255 | 0.18260 | 0.14336 | 0.33799 | 0.25541 |
*-----------------------+---------:---------:---------:---------:---------:
| TWO_CMRES | 1.14709 | 0.18246 | 0.15193 | 0.33651 | 0.29568 |
*-----------------------+---------:---------:---------:---------:---------:
| MT_64 | 1.16541 | 0.27305 | 0.23295 | 0.47006 | 0.37093 |
*-----------------------+---------:---------:---------:---------:---------:
| MWC_256 | 1.14802 | 0.25419 | 0.21431 | 0.35105 | 0.26027 |
*-----------------------+---------:---------:---------:---------:---------:
| KISS | 1.21902 | 0.41307 | 0.41465 | 0.53279 | 0.42893 |
*-----------------------+---------:---------:---------:---------:---------:
| XOR_SHIFT_1024_S_PHI | 1.14458 | 0.18517 | 0.14383 | 0.32811 | 0.25110 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_64_S | 1.13170 | 0.18987 | 0.13436 | 0.22981 | 0.18354 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_64_SS | 1.14729 | 0.24748 | 0.17767 | 0.28196 | 0.21002 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_128_PLUS | 1.15035 | 0.26150 | 0.18227 | 0.31113 | 0.25720 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_128_SS | 1.15228 | 0.32567 | 0.25913 | 0.39303 | 0.28834 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_128_PLUS | 1.16473 | 0.10786 | 0.08123 | 0.21719 | 0.17516 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_128_SS | 1.14305 | 0.13467 | 0.10081 | 0.26687 | 0.20151 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_256_PLUS | 1.13274 | 0.13942 | 0.10975 | 0.27536 | 0.21673 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_256_SS | 1.13733 | 0.17227 | 0.12742 | 0.30620 | 0.23934 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_512_PLUS | 1.14604 | 0.25573 | 0.19287 | 0.38956 | 0.34018 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_512_SS | 1.14679 | 0.26977 | 0.22337 | 0.41464 | 0.35788 |
*-----------------------+---------:---------:---------:---------:---------:
| PCG_XSH_RR_32 | 0.93987 | 0.30306 | 0.26355 | 0.38115 | 0.20150 |
*-----------------------+---------:---------:---------:---------:---------:
| PCG_XSH_RS_32 | 0.93948 | 0.24078 | 0.18863 | 0.26774 | 0.20346 |
*-----------------------+---------:---------:---------:---------:---------:
| PCG_RXS_M_XS_64 | 1.14968 | 0.13220 | 0.11337 | 0.27695 | 0.21406 |
*-----------------------+---------:---------:---------:---------:---------:
| PCG_MCG_XSH_RR_32 | 1.09668 | 0.29003 | 0.28306 | 0.35251 | 0.18246 |
*-----------------------+---------:---------:---------:---------:---------:
| PCG_MCG_XSH_RS_32 | 0.94494 | 0.22776 | 0.17786 | 0.24978 | 0.17817 |
*-----------------------+---------:---------:---------:---------:---------:
| MSWS | 1.11994 | 0.17966 | 0.15163 | 0.22052 | 0.15654 |
*-----------------------+---------:---------:---------:---------:---------:
| SFC_32 | 1.16818 | 0.28341 | 0.19159 | 0.31184 | 0.26237 |
*-----------------------+---------:---------:---------:---------:---------:
| SFC_64 | 1.14182 | 0.14043 | 0.11612 | 0.30155 | 0.23111 |
*-----------------------+---------:---------:---------:---------:---------:
| JSF_32 | 1.15687 | 0.24286 | 0.16946 | 0.28196 | 0.23416 |
*-----------------------+---------:---------:---------:---------:---------:
| JSF_64 | 1.13157 | 0.13346 | 0.10875 | 0.27424 | 0.21291 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_128_PP | 1.14795 | 0.29165 | 0.21145 | 0.35185 | 0.27282 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_128_PP | 1.13511 | 0.12115 | 0.09061 | 0.24181 | 0.18749 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_256_PP | 1.14166 | 0.15008 | 0.11580 | 0.29205 | 0.22667 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_SHI_RO_512_PP | 1.14859 | 0.26896 | 0.21928 | 0.39196 | 0.34223 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_1024_PP | 1.06705 | 0.19035 | 0.16039 | 0.32584 | 0.26999 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_1024_S | 1.09278 | 0.18145 | 0.14870 | 0.32135 | 0.27322 |
*-----------------------+---------:---------:---------:---------:---------:
| XO_RO_SHI_RO_1024_SS | 1.07087 | 0.20239 | 0.17359 | 0.34873 | 0.28468 |
*-----------------------+---------:---------:---------:---------:---------:
Notes:
The <<<RandomSource.JDK>>> generator uses thread-safe (synchronized) <<<int>>> generation which has a performance overhead (see the <<<int>>> generation results). For the <<<boolean>>> generation the synchronization occurs 1 in 32 calls and the resulting performance is good. However the output will be low quality and this generator should not be used. See the {{{a5._Quality}Quality}} section for details.
The speed of <<<boolean>>> generation is related to the speed that the generator can be loaded to memory and used to generate a new value. This favours those with a small state such as the linear congruential based generators (<<<JDK>>>, <<<PCG>>>) and those that batch compute values into an array (<<<ISAAC>>>). A RNG to compute boolean samples should be chosen based on the {{{a5._Quality}quality}} of the output.
* 4.2 Generating Gaussian samples
The following table compares the
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/distribution/BoxMullerNormalizedGaussianSampler.html}BoxMullerNormalizedGaussianSampler}},
{{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/distribution/MarsagliaNormalizedGaussianSampler.html}MarsagliaNormalizedGaussianSampler}},
and {{{../commons-rng-sampling/apidocs/org/apache/commons/rng/sampling/distribution/ZigguratNormalizedGaussianSampler.html}ZigguratNormalizedGaussianSampler}}.
Each score is normalized to the score of {{{https://docs.oracle.com/javase/8/docs/api/java/util/Random.html#nextGaussian--}nextGaussian()}} method of <<<java.util.Random>>> which internally uses the Box-Muller algorithm.
*-----------------------*---------*----------*---------*
|| RNG identifier || <<<BoxMullerNormalizedGaussianSampler>>> || <<<MarsagliaNormalizedGaussianSampler>>> || <<<ZigguratNormalizedGaussianSampler>>> |
*-----------------------+---------:----------:---------:
| JDK | 0.77877 | 0.73264 | 0.36637 |
*-----------------------+---------:---------:---------:
| WELL_512_A | 0.74445 | 0.56462 | 0.28636 |
*-----------------------+---------:---------:---------:
| WELL_1024_A | 0.77007 | 0.59756 | 0.29257 |
*-----------------------+---------:---------:---------:
| WELL_19937_A | 0.82748 | 0.69269 | 0.33740 |
*-----------------------+---------:---------:---------:
| WELL_19937_C | 0.84789 | 0.73891 | 0.36717 |
*-----------------------+---------:---------:---------:
| WELL_44497_A | 0.87112 | 0.70183 | 0.36227 |
*-----------------------+---------:---------:---------:
| WELL_44497_B | 0.87857 | 0.72934 | 0.38255 |
*-----------------------+---------:---------:---------:
| MT | 0.67691 | 0.47800 | 0.26109 |
*-----------------------+---------:---------:---------:
| ISAAC | 0.68059 | 0.46536 | 0.27033 |
*-----------------------+---------:---------:---------:
| SPLIT_MIX_64 | 0.58001 | 0.32004 | 0.17078 |
*-----------------------+---------:---------:---------:
| XOR_SHIFT_1024_S | 0.57795 | 0.33331 | 0.17935 |
*-----------------------+---------:---------:---------:
| TWO_CMRES | 0.62947 | 0.35806 | 0.17582 |
*-----------------------+---------:---------:---------:
| MT_64 | 0.62248 | 0.38571 | 0.21970 |
*-----------------------+---------:---------:---------:
| MWC_256 | 0.59030 | 0.36393 | 0.18993 |
*-----------------------+---------:---------:---------:
| KISS | 0.65810 | 0.45252 | 0.23848 |
*-----------------------+---------:---------:---------:
| XOR_SHIFT_1024_S_PHI | 0.57803 | 0.33260 | 0.17968 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_64_S | 0.58363 | 0.34124 | 0.17522 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_64_SS | 0.59167 | 0.35355 | 0.19744 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_128_PLUS | 0.59485 | 0.34544 | 0.19495 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_128_SS | 0.60230 | 0.38200 | 0.20840 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_128_PLUS | 0.56040 | 0.30974 | 0.15410 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_128_SS | 0.55593 | 0.32892 | 0.16156 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_256_PLUS | 0.56583 | 0.31493 | 0.15552 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_256_SS | 0.57781 | 0.32193 | 0.17085 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_512_PLUS | 0.58922 | 0.36533 | 0.19035 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_512_SS | 0.58811 | 0.33545 | 0.19263 |
*-----------------------+---------:---------:---------:
| PCG_XSH_RR_32 | 0.60552 | 0.41318 | 0.21311 |
*-----------------------+---------:---------:---------:
| PCG_XSH_RS_32 | 0.59166 | 0.35733 | 0.18407 |
*-----------------------+---------:---------:---------:
| PCG_RXS_M_XS_64 | 0.57445 | 0.32554 | 0.16350 |
*-----------------------+---------:---------:---------:
| PCG_MCG_XSH_RR_32 | 0.60252 | 0.41204 | 0.21687 |
*-----------------------+---------:---------:---------:
| PCG_MCG_XSH_RS_32 | 0.58558 | 0.35372 | 0.18327 |
*-----------------------+---------:---------:---------:
| MSWS | 0.58084 | 0.34002 | 0.17617 |
*-----------------------+---------:---------:---------:
| SFC_32 | 0.59413 | 0.35255 | 0.18698 |
*-----------------------+---------:---------:---------:
| SFC_64 | 0.55220 | 0.32147 | 0.16161 |
*-----------------------+---------:---------:---------:
| JSF_32 | 0.59929 | 0.34080 | 0.18532 |
*-----------------------+---------:---------:---------:
| JSF_64 | 0.56529 | 0.31836 | 0.15325 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_128_PP | 0.59851 | 0.35367 | 0.19666 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_128_PP | 0.56427 | 0.31718 | 0.15767 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_256_PP | 0.57554 | 0.31834 | 0.16573 |
*-----------------------+---------:---------:---------:
| XO_SHI_RO_512_PP | 0.59131 | 0.36728 | 0.19869 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_1024_PP | 0.58844 | 0.33181 | 0.18223 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_1024_S | 0.57474 | 0.32710 | 0.17992 |
*-----------------------+---------:---------:---------:
| XO_RO_SHI_RO_1024_SS | 0.58185 | 0.33993 | 0.18551 |
*-----------------------+---------:---------:---------:
Notes:
The reference <<<java.util.Random>>> nextGaussian() method uses synchronized method calls per sample. The <<<RandomSource.JDK>>> RNG will use synchronized method calls when generating numbers for the <<<BoxMullerNormalizedGaussianSampler>>> but the calls to obtain the samples are not synchronized, hence the observed difference. All the other RNGs are not synchronized.
5. Quality
This section reports results of
{{{../commons-rng-examples/apidocs/org/apache/commons/rng/examples/stress/package-summary.html}performing "stress tests"}}
that aim at detecting failures of an implementation to produce sequences of numbers
that follow a uniform distribution.
Three different test suites were used:
* {{{http://www.phy.duke.edu/~rgb/General/dieharder.php}Dieharder v3.31.1}}
* {{{http://pracrand.sourceforge.net/}PractRand v0.94}}
* {{{http://simul.iro.umontreal.ca/testu01/tu01.html}TestU01 v1.2.3}}
[]
Note that the <Dieharder> and <TestU01> test suites accept 32-bit integer values. Any generator of 64-bit <<<long>>> values has the upper and lower 32-bits passed to the test suite. <PractRand> supports 64-bit generators.
The first column is the RNG identifier (see {{{../commons-rng-simple/apidocs/org/apache/commons/rng/simple/RandomSource.html}RandomSource}}). The remaining columns contain the results of separate runs of the test suite using different random seeds. Click on one of the entries of the comma-separated list in order to see the text report of the corresponding run.
The <Dieharder> and <TestU01> test suites contain many tests each requiring an approximately fixed size of random output; in the case of multiple tests different output is used for each test. <Dieharder> was run using the full set of tests. <TestU01> was run using BigCrush. The number in the table indicates the number of failed tests, i.e. tests reported as below the accepted threshold for considering the sequence as uniformly random; hence <lower> is <better>. Note: For <Dieharder> the flawed "Diehard Sums Test" is {{{http://www.phy.duke.edu/~rgb/General/dieharder.php}ignored}} from the failure counts.
<PractRand> tests a length of the RNG output with all the selected tests; this is repeated with doubling lengths until a failure is detected or the maximum size is reached. <PractRand> was run using the core tests and smart folding. This is the default mode and comprises tests with little overlap in their characteristics and additional targeting testing of the lower bits of the output sequence. The limit for these results was 4 terabytes (4 TiB). A number in the table indicates the size in bytes of output where a failure occurred expressed as an exponent of 2; hence <higher> is <better>. A dash (<->) indicates no failure and is <best>.
Spurious failures are a failure in a single run of the test suite. These are to be expected as the tests use probability thresholds to determine if the output is non-random. Systematic failures where the RNG fails the same test in every run indicate a problem with the RNG output. The count of systematic failures for <Dieharder> and <TestU01> are shown in parentheses. The maximum output at which a failure always occurs for <PractRand> is shown in parentheses.
Any RNG with <no systematic failures> is highlighted in <<bold>>. Note that some RNGs fail <PractRand> on tests which target the lower bits. These are not suitable as all purpose generators but have utility in floating-point number generation where the lower bits are not used.
*-----------------*------------*---------------------*-------------*
|| RNG identifier || Dieharder || TestU01 (BigCrush) || PractRand ||
*-----------------+------------+---------------------+-------------+
| JDK | {{{../txt/userguide/stress/dh_1_1}4}}, {{{../txt/userguide/stress/dh_1_2}4}}, {{{../txt/userguide/stress/dh_1_3}4}}, {{{../txt/userguide/stress/dh_1_4}4}}, {{{../txt/userguide/stress/dh_1_5}4}} (4) | {{{../txt/userguide/stress/tu_1_1}50}}, {{{../txt/userguide/stress/tu_1_2}51}}, {{{../txt/userguide/stress/tu_1_3}52}}, {{{../txt/userguide/stress/tu_1_4}49}}, {{{../txt/userguide/stress/tu_1_5}51}} (48) | {{{../txt/userguide/stress/pr_1_1}20}}, {{{../txt/userguide/stress/pr_1_2}20}}, {{{../txt/userguide/stress/pr_1_3}20}} (1 MiB) |
*-----------------+------------+---------------------+-------------+
| WELL_512_A | {{{../txt/userguide/stress/dh_2_1}0}}, {{{../txt/userguide/stress/dh_2_2}0}}, {{{../txt/userguide/stress/dh_2_3}0}}, {{{../txt/userguide/stress/dh_2_4}0}}, {{{../txt/userguide/stress/dh_2_5}0}} | {{{../txt/userguide/stress/tu_2_1}6}}, {{{../txt/userguide/stress/tu_2_2}7}}, {{{../txt/userguide/stress/tu_2_3}8}}, {{{../txt/userguide/stress/tu_2_4}6}}, {{{../txt/userguide/stress/tu_2_5}6}} (6) | {{{../txt/userguide/stress/pr_2_1}24}}, {{{../txt/userguide/stress/pr_2_2}24}}, {{{../txt/userguide/stress/pr_2_3}24}} (16 MiB) |
*-----------------+------------+---------------------+-------------+
| WELL_1024_A | {{{../txt/userguide/stress/dh_3_1}0}}, {{{../txt/userguide/stress/dh_3_2}0}}, {{{../txt/userguide/stress/dh_3_3}0}}, {{{../txt/userguide/stress/dh_3_4}0}}, {{{../txt/userguide/stress/dh_3_5}0}} | {{{../txt/userguide/stress/tu_3_1}5}}, {{{../txt/userguide/stress/tu_3_2}4}}, {{{../txt/userguide/stress/tu_3_3}5}}, {{{../txt/userguide/stress/tu_3_4}5}}, {{{../txt/userguide/stress/tu_3_5}4}} (4) | {{{../txt/userguide/stress/pr_3_1}27}}, {{{../txt/userguide/stress/pr_3_2}27}}, {{{../txt/userguide/stress/pr_3_3}27}} (128 MiB) |
*-----------------+------------+---------------------+-------------+
| WELL_19937_A | {{{../txt/userguide/stress/dh_4_1}0}}, {{{../txt/userguide/stress/dh_4_2}1}}, {{{../txt/userguide/stress/dh_4_3}0}}, {{{../txt/userguide/stress/dh_4_4}0}}, {{{../txt/userguide/stress/dh_4_5}0}} | {{{../txt/userguide/stress/tu_4_1}2}}, {{{../txt/userguide/stress/tu_4_2}2}}, {{{../txt/userguide/stress/tu_4_3}3}}, {{{../txt/userguide/stress/tu_4_4}3}}, {{{../txt/userguide/stress/tu_4_5}3}} (2) | {{{../txt/userguide/stress/pr_4_1}39}}, {{{../txt/userguide/stress/pr_4_2}39}}, {{{../txt/userguide/stress/pr_4_3}39}} (512 GiB) |
*-----------------+------------+---------------------+-------------+
| WELL_19937_C | {{{../txt/userguide/stress/dh_5_1}0}}, {{{../txt/userguide/stress/dh_5_2}0}}, {{{../txt/userguide/stress/dh_5_3}0}}, {{{../txt/userguide/stress/dh_5_4}0}}, {{{../txt/userguide/stress/dh_5_5}0}} | {{{../txt/userguide/stress/tu_5_1}4}}, {{{../txt/userguide/stress/tu_5_2}2}}, {{{../txt/userguide/stress/tu_5_3}2}}, {{{../txt/userguide/stress/tu_5_4}2}}, {{{../txt/userguide/stress/tu_5_5}2}} (2) | {{{../txt/userguide/stress/pr_5_1}39}}, {{{../txt/userguide/stress/pr_5_2}39}}, {{{../txt/userguide/stress/pr_5_3}39}} (512 GiB) |
*-----------------+------------+---------------------+-------------+
| WELL_44497_A | {{{../txt/userguide/stress/dh_6_1}0}}, {{{../txt/userguide/stress/dh_6_2}0}}, {{{../txt/userguide/stress/dh_6_3}0}}, {{{../txt/userguide/stress/dh_6_4}0}}, {{{../txt/userguide/stress/dh_6_5}0}} | {{{../txt/userguide/stress/tu_6_1}3}}, {{{../txt/userguide/stress/tu_6_2}2}}, {{{../txt/userguide/stress/tu_6_3}2}}, {{{../txt/userguide/stress/tu_6_4}2}}, {{{../txt/userguide/stress/tu_6_5}3}} (2) | {{{../txt/userguide/stress/pr_6_1}42}}, {{{../txt/userguide/stress/pr_6_2}42}}, {{{../txt/userguide/stress/pr_6_3}42}} (4 TiB) |
*-----------------+------------+---------------------+-------------+
| WELL_44497_B | {{{../txt/userguide/stress/dh_7_1}0}}, {{{../txt/userguide/stress/dh_7_2}0}}, {{{../txt/userguide/stress/dh_7_3}0}}, {{{../txt/userguide/stress/dh_7_4}0}}, {{{../txt/userguide/stress/dh_7_5}0}} | {{{../txt/userguide/stress/tu_7_1}2}}, {{{../txt/userguide/stress/tu_7_2}2}}, {{{../txt/userguide/stress/tu_7_3}2}}, {{{../txt/userguide/stress/tu_7_4}2}}, {{{../txt/userguide/stress/tu_7_5}2}} (2) | {{{../txt/userguide/stress/pr_7_1}42}}, {{{../txt/userguide/stress/pr_7_2}42}}, {{{../txt/userguide/stress/pr_7_3}42}} (4 TiB) |
*-----------------+------------+---------------------+-------------+
| MT | {{{../txt/userguide/stress/dh_8_1}0}}, {{{../txt/userguide/stress/dh_8_2}0}}, {{{../txt/userguide/stress/dh_8_3}0}}, {{{../txt/userguide/stress/dh_8_4}0}}, {{{../txt/userguide/stress/dh_8_5}0}} | {{{../txt/userguide/stress/tu_8_1}2}}, {{{../txt/userguide/stress/tu_8_2}3}}, {{{../txt/userguide/stress/tu_8_3}2}}, {{{../txt/userguide/stress/tu_8_4}2}}, {{{../txt/userguide/stress/tu_8_5}3}} (2) | {{{../txt/userguide/stress/pr_8_1}38}}, {{{../txt/userguide/stress/pr_8_2}38}}, {{{../txt/userguide/stress/pr_8_3}38}} (256 GiB) |
*-----------------+------------+---------------------+-------------+
| <<ISAAC>> | {{{../txt/userguide/stress/dh_9_1}0}}, {{{../txt/userguide/stress/dh_9_2}0}}, {{{../txt/userguide/stress/dh_9_3}0}}, {{{../txt/userguide/stress/dh_9_4}0}}, {{{../txt/userguide/stress/dh_9_5}0}} | {{{../txt/userguide/stress/tu_9_1}1}}, {{{../txt/userguide/stress/tu_9_2}1}}, {{{../txt/userguide/stress/tu_9_3}0}}, {{{../txt/userguide/stress/tu_9_4}0}}, {{{../txt/userguide/stress/tu_9_5}1}} | {{{../txt/userguide/stress/pr_9_1}-}}, {{{../txt/userguide/stress/pr_9_2}-}}, {{{../txt/userguide/stress/pr_9_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<SPLIT_MIX_64>> | {{{../txt/userguide/stress/dh_10_1}0}}, {{{../txt/userguide/stress/dh_10_2}0}}, {{{../txt/userguide/stress/dh_10_3}0}}, {{{../txt/userguide/stress/dh_10_4}0}}, {{{../txt/userguide/stress/dh_10_5}0}} | {{{../txt/userguide/stress/tu_10_1}0}}, {{{../txt/userguide/stress/tu_10_2}0}}, {{{../txt/userguide/stress/tu_10_3}0}}, {{{../txt/userguide/stress/tu_10_4}1}}, {{{../txt/userguide/stress/tu_10_5}0}} | {{{../txt/userguide/stress/pr_10_1}-}}, {{{../txt/userguide/stress/pr_10_2}-}}, {{{../txt/userguide/stress/pr_10_3}-}} |
*-----------------+------------+---------------------+-------------+
| XOR_SHIFT_1024_S | {{{../txt/userguide/stress/dh_11_1}0}}, {{{../txt/userguide/stress/dh_11_2}0}}, {{{../txt/userguide/stress/dh_11_3}0}}, {{{../txt/userguide/stress/dh_11_4}0}}, {{{../txt/userguide/stress/dh_11_5}0}} | {{{../txt/userguide/stress/tu_11_1}1}}, {{{../txt/userguide/stress/tu_11_2}0}}, {{{../txt/userguide/stress/tu_11_3}0}}, {{{../txt/userguide/stress/tu_11_4}0}}, {{{../txt/userguide/stress/tu_11_5}2}} | {{{../txt/userguide/stress/pr_11_1}31}}, {{{../txt/userguide/stress/pr_11_2}31}}, {{{../txt/userguide/stress/pr_11_3}31}} (2 GiB) |
*-----------------+------------+---------------------+-------------+
| TWO_CMRES | {{{../txt/userguide/stress/dh_12_1}2}}, {{{../txt/userguide/stress/dh_12_2}2}}, {{{../txt/userguide/stress/dh_12_3}2}}, {{{../txt/userguide/stress/dh_12_4}2}}, {{{../txt/userguide/stress/dh_12_5}2}} (2) | {{{../txt/userguide/stress/tu_12_1}0}}, {{{../txt/userguide/stress/tu_12_2}1}}, {{{../txt/userguide/stress/tu_12_3}0}}, {{{../txt/userguide/stress/tu_12_4}0}}, {{{../txt/userguide/stress/tu_12_5}0}} | {{{../txt/userguide/stress/pr_12_1}32}}, {{{../txt/userguide/stress/pr_12_2}32}}, {{{../txt/userguide/stress/pr_12_3}32}} (4 GiB) |
*-----------------+------------+---------------------+-------------+
| MT_64 | {{{../txt/userguide/stress/dh_14_1}0}}, {{{../txt/userguide/stress/dh_14_2}0}}, {{{../txt/userguide/stress/dh_14_3}0}}, {{{../txt/userguide/stress/dh_14_4}0}}, {{{../txt/userguide/stress/dh_14_5}0}} | {{{../txt/userguide/stress/tu_14_1}2}}, {{{../txt/userguide/stress/tu_14_2}2}}, {{{../txt/userguide/stress/tu_14_3}2}}, {{{../txt/userguide/stress/tu_14_4}2}}, {{{../txt/userguide/stress/tu_14_5}2}} (2) | {{{../txt/userguide/stress/pr_14_1}39}}, {{{../txt/userguide/stress/pr_14_2}39}}, {{{../txt/userguide/stress/pr_14_3}39}} (512 GiB) |
*-----------------+------------+---------------------+-------------+
| <<MWC_256>> | {{{../txt/userguide/stress/dh_15_1}0}}, {{{../txt/userguide/stress/dh_15_2}0}}, {{{../txt/userguide/stress/dh_15_3}0}}, {{{../txt/userguide/stress/dh_15_4}0}}, {{{../txt/userguide/stress/dh_15_5}0}} | {{{../txt/userguide/stress/tu_15_1}0}}, {{{../txt/userguide/stress/tu_15_2}1}}, {{{../txt/userguide/stress/tu_15_3}1}}, {{{../txt/userguide/stress/tu_15_4}1}}, {{{../txt/userguide/stress/tu_15_5}0}} | {{{../txt/userguide/stress/pr_15_1}-}}, {{{../txt/userguide/stress/pr_15_2}-}}, {{{../txt/userguide/stress/pr_15_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<KISS>> | {{{../txt/userguide/stress/dh_16_1}0}}, {{{../txt/userguide/stress/dh_16_2}0}}, {{{../txt/userguide/stress/dh_16_3}0}}, {{{../txt/userguide/stress/dh_16_4}0}}, {{{../txt/userguide/stress/dh_16_5}0}} | {{{../txt/userguide/stress/tu_16_1}1}}, {{{../txt/userguide/stress/tu_16_2}1}}, {{{../txt/userguide/stress/tu_16_3}0}}, {{{../txt/userguide/stress/tu_16_4}0}}, {{{../txt/userguide/stress/tu_16_5}0}} | {{{../txt/userguide/stress/pr_16_1}-}}, {{{../txt/userguide/stress/pr_16_2}-}}, {{{../txt/userguide/stress/pr_16_3}-}} |
*-----------------+------------+---------------------+-------------+
| XOR_SHIFT_1024_S_PHI | {{{../txt/userguide/stress/dh_17_1}0}}, {{{../txt/userguide/stress/dh_17_2}0}}, {{{../txt/userguide/stress/dh_17_3}0}}, {{{../txt/userguide/stress/dh_17_4}0}}, {{{../txt/userguide/stress/dh_17_5}0}} | {{{../txt/userguide/stress/tu_17_1}0}}, {{{../txt/userguide/stress/tu_17_2}2}}, {{{../txt/userguide/stress/tu_17_3}0}}, {{{../txt/userguide/stress/tu_17_4}0}}, {{{../txt/userguide/stress/tu_17_5}1}} | {{{../txt/userguide/stress/pr_17_1}33}}, {{{../txt/userguide/stress/pr_17_2}33}}, {{{../txt/userguide/stress/pr_17_3}33}} (8 GiB) |
*-----------------+------------+---------------------+-------------+
| XO_RO_SHI_RO_64_S | {{{../txt/userguide/stress/dh_18_1}0}}, {{{../txt/userguide/stress/dh_18_2}0}}, {{{../txt/userguide/stress/dh_18_3}0}}, {{{../txt/userguide/stress/dh_18_4}0}}, {{{../txt/userguide/stress/dh_18_5}0}} | {{{../txt/userguide/stress/tu_18_1}1}}, {{{../txt/userguide/stress/tu_18_2}2}}, {{{../txt/userguide/stress/tu_18_3}3}}, {{{../txt/userguide/stress/tu_18_4}1}}, {{{../txt/userguide/stress/tu_18_5}1}} (1) | {{{../txt/userguide/stress/pr_18_1}21}}, {{{../txt/userguide/stress/pr_18_2}21}}, {{{../txt/userguide/stress/pr_18_3}21}} (2 MiB) |
*-----------------+------------+---------------------+-------------+
| <<XO_RO_SHI_RO_64_SS>> | {{{../txt/userguide/stress/dh_19_1}0}}, {{{../txt/userguide/stress/dh_19_2}0}}, {{{../txt/userguide/stress/dh_19_3}0}}, {{{../txt/userguide/stress/dh_19_4}0}}, {{{../txt/userguide/stress/dh_19_5}0}} | {{{../txt/userguide/stress/tu_19_1}0}}, {{{../txt/userguide/stress/tu_19_2}1}}, {{{../txt/userguide/stress/tu_19_3}0}}, {{{../txt/userguide/stress/tu_19_4}0}}, {{{../txt/userguide/stress/tu_19_5}0}} | {{{../txt/userguide/stress/pr_19_1}-}}, {{{../txt/userguide/stress/pr_19_2}-}}, {{{../txt/userguide/stress/pr_19_3}-}} |
*-----------------+------------+---------------------+-------------+
| XO_SHI_RO_128_PLUS | {{{../txt/userguide/stress/dh_20_1}0}}, {{{../txt/userguide/stress/dh_20_2}0}}, {{{../txt/userguide/stress/dh_20_3}0}}, {{{../txt/userguide/stress/dh_20_4}0}}, {{{../txt/userguide/stress/dh_20_5}0}} | {{{../txt/userguide/stress/tu_20_1}0}}, {{{../txt/userguide/stress/tu_20_2}0}}, {{{../txt/userguide/stress/tu_20_3}1}}, {{{../txt/userguide/stress/tu_20_4}0}}, {{{../txt/userguide/stress/tu_20_5}0}} | {{{../txt/userguide/stress/pr_20_1}24}}, {{{../txt/userguide/stress/pr_20_2}24}}, {{{../txt/userguide/stress/pr_20_3}24}} (16 MiB) |
*-----------------+------------+---------------------+-------------+
| <<XO_SHI_RO_128_SS>> | {{{../txt/userguide/stress/dh_21_1}0}}, {{{../txt/userguide/stress/dh_21_2}0}}, {{{../txt/userguide/stress/dh_21_3}0}}, {{{../txt/userguide/stress/dh_21_4}0}}, {{{../txt/userguide/stress/dh_21_5}0}} | {{{../txt/userguide/stress/tu_21_1}1}}, {{{../txt/userguide/stress/tu_21_2}0}}, {{{../txt/userguide/stress/tu_21_3}1}}, {{{../txt/userguide/stress/tu_21_4}0}}, {{{../txt/userguide/stress/tu_21_5}0}} | {{{../txt/userguide/stress/pr_21_1}-}}, {{{../txt/userguide/stress/pr_21_2}-}}, {{{../txt/userguide/stress/pr_21_3}-}} |
*-----------------+------------+---------------------+-------------+
| XO_RO_SHI_RO_128_PLUS | {{{../txt/userguide/stress/dh_22_1}0}}, {{{../txt/userguide/stress/dh_22_2}0}}, {{{../txt/userguide/stress/dh_22_3}0}}, {{{../txt/userguide/stress/dh_22_4}0}}, {{{../txt/userguide/stress/dh_22_5}0}} | {{{../txt/userguide/stress/tu_22_1}1}}, {{{../txt/userguide/stress/tu_22_2}0}}, {{{../txt/userguide/stress/tu_22_3}0}}, {{{../txt/userguide/stress/tu_22_4}0}}, {{{../txt/userguide/stress/tu_22_5}0}} | {{{../txt/userguide/stress/pr_22_1}25}}, {{{../txt/userguide/stress/pr_22_2}25}}, {{{../txt/userguide/stress/pr_22_3}25}} (32 MiB) |
*-----------------+------------+---------------------+-------------+
| <<XO_RO_SHI_RO_128_SS>> | {{{../txt/userguide/stress/dh_23_1}0}}, {{{../txt/userguide/stress/dh_23_2}0}}, {{{../txt/userguide/stress/dh_23_3}0}}, {{{../txt/userguide/stress/dh_23_4}0}}, {{{../txt/userguide/stress/dh_23_5}0}} | {{{../txt/userguide/stress/tu_23_1}1}}, {{{../txt/userguide/stress/tu_23_2}1}}, {{{../txt/userguide/stress/tu_23_3}1}}, {{{../txt/userguide/stress/tu_23_4}0}}, {{{../txt/userguide/stress/tu_23_5}0}} | {{{../txt/userguide/stress/pr_23_1}-}}, {{{../txt/userguide/stress/pr_23_2}-}}, {{{../txt/userguide/stress/pr_23_3}-}} |
*-----------------+------------+---------------------+-------------+
| XO_SHI_RO_256_PLUS | {{{../txt/userguide/stress/dh_24_1}0}}, {{{../txt/userguide/stress/dh_24_2}0}}, {{{../txt/userguide/stress/dh_24_3}0}}, {{{../txt/userguide/stress/dh_24_4}0}}, {{{../txt/userguide/stress/dh_24_5}0}} | {{{../txt/userguide/stress/tu_24_1}1}}, {{{../txt/userguide/stress/tu_24_2}0}}, {{{../txt/userguide/stress/tu_24_3}0}}, {{{../txt/userguide/stress/tu_24_4}0}}, {{{../txt/userguide/stress/tu_24_5}0}} | {{{../txt/userguide/stress/pr_24_1}27}}, {{{../txt/userguide/stress/pr_24_2}27}}, {{{../txt/userguide/stress/pr_24_3}27}} (128 MiB) |
*-----------------+------------+---------------------+-------------+
| <<XO_SHI_RO_256_SS>> | {{{../txt/userguide/stress/dh_25_1}0}}, {{{../txt/userguide/stress/dh_25_2}0}}, {{{../txt/userguide/stress/dh_25_3}0}}, {{{../txt/userguide/stress/dh_25_4}0}}, {{{../txt/userguide/stress/dh_25_5}0}} | {{{../txt/userguide/stress/tu_25_1}0}}, {{{../txt/userguide/stress/tu_25_2}0}}, {{{../txt/userguide/stress/tu_25_3}0}}, {{{../txt/userguide/stress/tu_25_4}0}}, {{{../txt/userguide/stress/tu_25_5}1}} | {{{../txt/userguide/stress/pr_25_1}-}}, {{{../txt/userguide/stress/pr_25_2}-}}, {{{../txt/userguide/stress/pr_25_3}-}} |
*-----------------+------------+---------------------+-------------+
| XO_SHI_RO_512_PLUS | {{{../txt/userguide/stress/dh_26_1}0}}, {{{../txt/userguide/stress/dh_26_2}0}}, {{{../txt/userguide/stress/dh_26_3}0}}, {{{../txt/userguide/stress/dh_26_4}0}}, {{{../txt/userguide/stress/dh_26_5}0}} | {{{../txt/userguide/stress/tu_26_1}0}}, {{{../txt/userguide/stress/tu_26_2}2}}, {{{../txt/userguide/stress/tu_26_3}0}}, {{{../txt/userguide/stress/tu_26_4}0}}, {{{../txt/userguide/stress/tu_26_5}0}} | {{{../txt/userguide/stress/pr_26_1}30}}, {{{../txt/userguide/stress/pr_26_2}30}}, {{{../txt/userguide/stress/pr_26_3}30}} (1 GiB) |
*-----------------+------------+---------------------+-------------+
| <<XO_SHI_RO_512_SS>> | {{{../txt/userguide/stress/dh_27_1}0}}, {{{../txt/userguide/stress/dh_27_2}0}}, {{{../txt/userguide/stress/dh_27_3}0}}, {{{../txt/userguide/stress/dh_27_4}0}}, {{{../txt/userguide/stress/dh_27_5}0}} | {{{../txt/userguide/stress/tu_27_1}0}}, {{{../txt/userguide/stress/tu_27_2}0}}, {{{../txt/userguide/stress/tu_27_3}0}}, {{{../txt/userguide/stress/tu_27_4}0}}, {{{../txt/userguide/stress/tu_27_5}0}} | {{{../txt/userguide/stress/pr_27_1}-}}, {{{../txt/userguide/stress/pr_27_2}-}}, {{{../txt/userguide/stress/pr_27_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_XSH_RR_32>> | {{{../txt/userguide/stress/dh_28_1}0}}, {{{../txt/userguide/stress/dh_28_2}0}}, {{{../txt/userguide/stress/dh_28_3}0}}, {{{../txt/userguide/stress/dh_28_4}0}}, {{{../txt/userguide/stress/dh_28_5}0}} | {{{../txt/userguide/stress/tu_28_1}0}}, {{{../txt/userguide/stress/tu_28_2}0}}, {{{../txt/userguide/stress/tu_28_3}0}}, {{{../txt/userguide/stress/tu_28_4}0}}, {{{../txt/userguide/stress/tu_28_5}0}} | {{{../txt/userguide/stress/pr_28_1}-}}, {{{../txt/userguide/stress/pr_28_2}-}}, {{{../txt/userguide/stress/pr_28_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_XSH_RS_32>> | {{{../txt/userguide/stress/dh_29_1}0}}, {{{../txt/userguide/stress/dh_29_2}0}}, {{{../txt/userguide/stress/dh_29_3}0}}, {{{../txt/userguide/stress/dh_29_4}0}}, {{{../txt/userguide/stress/dh_29_5}0}} | {{{../txt/userguide/stress/tu_29_1}0}}, {{{../txt/userguide/stress/tu_29_2}1}}, {{{../txt/userguide/stress/tu_29_3}2}}, {{{../txt/userguide/stress/tu_29_4}1}}, {{{../txt/userguide/stress/tu_29_5}0}} | {{{../txt/userguide/stress/pr_29_1}41}}, {{{../txt/userguide/stress/pr_29_2}-}}, {{{../txt/userguide/stress/pr_29_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_RXS_M_XS_64>> | {{{../txt/userguide/stress/dh_30_1}0}}, {{{../txt/userguide/stress/dh_30_2}0}}, {{{../txt/userguide/stress/dh_30_3}0}}, {{{../txt/userguide/stress/dh_30_4}0}}, {{{../txt/userguide/stress/dh_30_5}0}} | {{{../txt/userguide/stress/tu_30_1}0}}, {{{../txt/userguide/stress/tu_30_2}1}}, {{{../txt/userguide/stress/tu_30_3}0}}, {{{../txt/userguide/stress/tu_30_4}0}}, {{{../txt/userguide/stress/tu_30_5}0}} | {{{../txt/userguide/stress/pr_30_1}-}}, {{{../txt/userguide/stress/pr_30_2}-}}, {{{../txt/userguide/stress/pr_30_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_MCG_XSH_RR_32>> | {{{../txt/userguide/stress/dh_31_1}0}}, {{{../txt/userguide/stress/dh_31_2}0}}, {{{../txt/userguide/stress/dh_31_3}0}}, {{{../txt/userguide/stress/dh_31_4}0}}, {{{../txt/userguide/stress/dh_31_5}0}} | {{{../txt/userguide/stress/tu_31_1}0}}, {{{../txt/userguide/stress/tu_31_2}0}}, {{{../txt/userguide/stress/tu_31_3}0}}, {{{../txt/userguide/stress/tu_31_4}0}}, {{{../txt/userguide/stress/tu_31_5}0}} | {{{../txt/userguide/stress/pr_31_1}-}}, {{{../txt/userguide/stress/pr_31_2}-}}, {{{../txt/userguide/stress/pr_31_3}-}} |
*-----------------+------------+---------------------+-------------+
| PCG_MCG_XSH_RS_32 | {{{../txt/userguide/stress/dh_32_1}0}}, {{{../txt/userguide/stress/dh_32_2}0}}, {{{../txt/userguide/stress/dh_32_3}0}}, {{{../txt/userguide/stress/dh_32_4}0}}, {{{../txt/userguide/stress/dh_32_5}0}} | {{{../txt/userguide/stress/tu_32_1}2}}, {{{../txt/userguide/stress/tu_32_2}1}}, {{{../txt/userguide/stress/tu_32_3}0}}, {{{../txt/userguide/stress/tu_32_4}1}}, {{{../txt/userguide/stress/tu_32_5}0}} | {{{../txt/userguide/stress/pr_32_1}40}}, {{{../txt/userguide/stress/pr_32_2}41}}, {{{../txt/userguide/stress/pr_32_3}41}} (2 TiB) |
*-----------------+------------+---------------------+-------------+
| <<MSWS>> | {{{../txt/userguide/stress/dh_33_1}0}}, {{{../txt/userguide/stress/dh_33_2}0}}, {{{../txt/userguide/stress/dh_33_3}0}}, {{{../txt/userguide/stress/dh_33_4}0}}, {{{../txt/userguide/stress/dh_33_5}0}} | {{{../txt/userguide/stress/tu_33_1}0}}, {{{../txt/userguide/stress/tu_33_2}0}}, {{{../txt/userguide/stress/tu_33_3}0}}, {{{../txt/userguide/stress/tu_33_4}1}}, {{{../txt/userguide/stress/tu_33_5}2}} | {{{../txt/userguide/stress/pr_33_1}-}}, {{{../txt/userguide/stress/pr_33_2}-}}, {{{../txt/userguide/stress/pr_33_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<SFC_32>> | {{{../txt/userguide/stress/dh_34_1}0}}, {{{../txt/userguide/stress/dh_34_2}0}}, {{{../txt/userguide/stress/dh_34_3}0}}, {{{../txt/userguide/stress/dh_34_4}0}}, {{{../txt/userguide/stress/dh_34_5}0}} | {{{../txt/userguide/stress/tu_34_1}0}}, {{{../txt/userguide/stress/tu_34_2}0}}, {{{../txt/userguide/stress/tu_34_3}0}}, {{{../txt/userguide/stress/tu_34_4}1}}, {{{../txt/userguide/stress/tu_34_5}1}} | {{{../txt/userguide/stress/pr_34_1}-}}, {{{../txt/userguide/stress/pr_34_2}-}}, {{{../txt/userguide/stress/pr_34_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<SFC_64>> | {{{../txt/userguide/stress/dh_35_1}0}}, {{{../txt/userguide/stress/dh_35_2}0}}, {{{../txt/userguide/stress/dh_35_3}0}}, {{{../txt/userguide/stress/dh_35_4}0}}, {{{../txt/userguide/stress/dh_35_5}0}} | {{{../txt/userguide/stress/tu_35_1}0}}, {{{../txt/userguide/stress/tu_35_2}0}}, {{{../txt/userguide/stress/tu_35_3}0}}, {{{../txt/userguide/stress/tu_35_4}1}}, {{{../txt/userguide/stress/tu_35_5}2}} | {{{../txt/userguide/stress/pr_35_1}-}}, {{{../txt/userguide/stress/pr_35_2}-}}, {{{../txt/userguide/stress/pr_35_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<JSF_32>> | {{{../txt/userguide/stress/dh_36_1}0}}, {{{../txt/userguide/stress/dh_36_2}0}}, {{{../txt/userguide/stress/dh_36_3}0}}, {{{../txt/userguide/stress/dh_36_4}0}}, {{{../txt/userguide/stress/dh_36_5}0}} | {{{../txt/userguide/stress/tu_36_1}0}}, {{{../txt/userguide/stress/tu_36_2}0}}, {{{../txt/userguide/stress/tu_36_3}0}}, {{{../txt/userguide/stress/tu_36_4}1}}, {{{../txt/userguide/stress/tu_36_5}2}} | {{{../txt/userguide/stress/pr_36_1}-}}, {{{../txt/userguide/stress/pr_36_2}-}}, {{{../txt/userguide/stress/pr_36_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<JSF_64>> | {{{../txt/userguide/stress/dh_37_1}0}}, {{{../txt/userguide/stress/dh_37_2}0}}, {{{../txt/userguide/stress/dh_37_3}0}}, {{{../txt/userguide/stress/dh_37_4}0}}, {{{../txt/userguide/stress/dh_37_5}0}} | {{{../txt/userguide/stress/tu_37_1}0}}, {{{../txt/userguide/stress/tu_37_2}0}}, {{{../txt/userguide/stress/tu_37_3}2}}, {{{../txt/userguide/stress/tu_37_4}0}}, {{{../txt/userguide/stress/tu_37_5}0}} | {{{../txt/userguide/stress/pr_37_1}-}}, {{{../txt/userguide/stress/pr_37_2}-}}, {{{../txt/userguide/stress/pr_37_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<XO_SHI_RO_128_PP>> | {{{../txt/userguide/stress/dh_38_1}0}}, {{{../txt/userguide/stress/dh_38_2}0}}, {{{../txt/userguide/stress/dh_38_3}0}}, {{{../txt/userguide/stress/dh_38_4}0}}, {{{../txt/userguide/stress/dh_38_5}0}} | {{{../txt/userguide/stress/tu_38_1}0}}, {{{../txt/userguide/stress/tu_38_2}0}}, {{{../txt/userguide/stress/tu_38_3}0}}, {{{../txt/userguide/stress/tu_38_4}1}}, {{{../txt/userguide/stress/tu_38_5}1}} | {{{../txt/userguide/stress/pr_38_1}-}}, {{{../txt/userguide/stress/pr_38_2}-}}, {{{../txt/userguide/stress/pr_38_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<XO_RO_SHI_RO_128_PP>> | {{{../txt/userguide/stress/dh_39_1}0}}, {{{../txt/userguide/stress/dh_39_2}0}}, {{{../txt/userguide/stress/dh_39_3}0}}, {{{../txt/userguide/stress/dh_39_4}0}}, {{{../txt/userguide/stress/dh_39_5}0}} | {{{../txt/userguide/stress/tu_39_1}0}}, {{{../txt/userguide/stress/tu_39_2}0}}, {{{../txt/userguide/stress/tu_39_3}0}}, {{{../txt/userguide/stress/tu_39_4}0}}, {{{../txt/userguide/stress/tu_39_5}0}} | {{{../txt/userguide/stress/pr_39_1}-}}, {{{../txt/userguide/stress/pr_39_2}-}}, {{{../txt/userguide/stress/pr_39_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<XO_SHI_RO_256_PP>> | {{{../txt/userguide/stress/dh_40_1}0}}, {{{../txt/userguide/stress/dh_40_2}0}}, {{{../txt/userguide/stress/dh_40_3}0}}, {{{../txt/userguide/stress/dh_40_4}0}}, {{{../txt/userguide/stress/dh_40_5}0}} | {{{../txt/userguide/stress/tu_40_1}0}}, {{{../txt/userguide/stress/tu_40_2}1}}, {{{../txt/userguide/stress/tu_40_3}1}}, {{{../txt/userguide/stress/tu_40_4}0}}, {{{../txt/userguide/stress/tu_40_5}1}} | {{{../txt/userguide/stress/pr_40_1}-}}, {{{../txt/userguide/stress/pr_40_2}-}}, {{{../txt/userguide/stress/pr_40_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<XO_SHI_RO_512_PP>> | {{{../txt/userguide/stress/dh_41_1}0}}, {{{../txt/userguide/stress/dh_41_2}0}}, {{{../txt/userguide/stress/dh_41_3}0}}, {{{../txt/userguide/stress/dh_41_4}0}}, {{{../txt/userguide/stress/dh_41_5}0}} | {{{../txt/userguide/stress/tu_41_1}0}}, {{{../txt/userguide/stress/tu_41_2}0}}, {{{../txt/userguide/stress/tu_41_3}1}}, {{{../txt/userguide/stress/tu_41_4}0}}, {{{../txt/userguide/stress/tu_41_5}0}} | {{{../txt/userguide/stress/pr_41_1}-}}, {{{../txt/userguide/stress/pr_41_2}-}}, {{{../txt/userguide/stress/pr_41_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<XO_RO_SHI_RO_1024_PP>> | {{{../txt/userguide/stress/dh_42_1}0}}, {{{../txt/userguide/stress/dh_42_2}0}}, {{{../txt/userguide/stress/dh_42_3}0}}, {{{../txt/userguide/stress/dh_42_4}0}}, {{{../txt/userguide/stress/dh_42_5}0}} | {{{../txt/userguide/stress/tu_42_1}0}}, {{{../txt/userguide/stress/tu_42_2}0}}, {{{../txt/userguide/stress/tu_42_3}3}}, {{{../txt/userguide/stress/tu_42_4}0}}, {{{../txt/userguide/stress/tu_42_5}1}} | {{{../txt/userguide/stress/pr_42_1}-}}, {{{../txt/userguide/stress/pr_42_2}-}}, {{{../txt/userguide/stress/pr_42_3}-}} |
*-----------------+------------+---------------------+-------------+
| XO_RO_SHI_RO_1024_S | {{{../txt/userguide/stress/dh_43_1}0}}, {{{../txt/userguide/stress/dh_43_2}0}}, {{{../txt/userguide/stress/dh_43_3}0}}, {{{../txt/userguide/stress/dh_43_4}1}}, {{{../txt/userguide/stress/dh_43_5}0}} | {{{../txt/userguide/stress/tu_43_1}0}}, {{{../txt/userguide/stress/tu_43_2}1}}, {{{../txt/userguide/stress/tu_43_3}0}}, {{{../txt/userguide/stress/tu_43_4}0}}, {{{../txt/userguide/stress/tu_43_5}0}} | {{{../txt/userguide/stress/pr_43_1}33}}, {{{../txt/userguide/stress/pr_43_2}33}}, {{{../txt/userguide/stress/pr_43_3}33}} (8 GiB) |
*-----------------+------------+---------------------+-------------+
| <<XO_RO_SHI_RO_1024_SS>> | {{{../txt/userguide/stress/dh_44_1}0}}, {{{../txt/userguide/stress/dh_44_2}0}}, {{{../txt/userguide/stress/dh_44_3}0}}, {{{../txt/userguide/stress/dh_44_4}0}}, {{{../txt/userguide/stress/dh_44_5}0}} | {{{../txt/userguide/stress/tu_44_1}0}}, {{{../txt/userguide/stress/tu_44_2}1}}, {{{../txt/userguide/stress/tu_44_3}0}}, {{{../txt/userguide/stress/tu_44_4}0}}, {{{../txt/userguide/stress/tu_44_5}0}} | {{{../txt/userguide/stress/pr_44_1}-}}, {{{../txt/userguide/stress/pr_44_2}-}}, {{{../txt/userguide/stress/pr_44_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_XSH_RR_32_OS>> | {{{../txt/userguide/stress/dh_45_1}0}}, {{{../txt/userguide/stress/dh_45_2}0}}, {{{../txt/userguide/stress/dh_45_3}0}}, {{{../txt/userguide/stress/dh_45_4}0}}, {{{../txt/userguide/stress/dh_45_5}0}} | {{{../txt/userguide/stress/tu_45_1}0}}, {{{../txt/userguide/stress/tu_45_2}0}}, {{{../txt/userguide/stress/tu_45_3}1}}, {{{../txt/userguide/stress/tu_45_4}0}}, {{{../txt/userguide/stress/tu_45_5}0}} | {{{../txt/userguide/stress/pr_45_1}-}}, {{{../txt/userguide/stress/pr_45_2}-}}, {{{../txt/userguide/stress/pr_45_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_XSH_RS_32_OS>> | {{{../txt/userguide/stress/dh_46_1}0}}, {{{../txt/userguide/stress/dh_46_2}0}}, {{{../txt/userguide/stress/dh_46_3}0}}, {{{../txt/userguide/stress/dh_46_4}0}}, {{{../txt/userguide/stress/dh_46_5}0}} | {{{../txt/userguide/stress/tu_46_1}0}}, {{{../txt/userguide/stress/tu_46_2}0}}, {{{../txt/userguide/stress/tu_46_3}1}}, {{{../txt/userguide/stress/tu_46_4}0}}, {{{../txt/userguide/stress/tu_46_5}0}} | {{{../txt/userguide/stress/pr_46_1}-}}, {{{../txt/userguide/stress/pr_46_2}-}}, {{{../txt/userguide/stress/pr_46_3}-}} |
*-----------------+------------+---------------------+-------------+
| <<PCG_RXS_M_XS_64_OS>> | {{{../txt/userguide/stress/dh_47_1}0}}, {{{../txt/userguide/stress/dh_47_2}0}}, {{{../txt/userguide/stress/dh_47_3}0}}, {{{../txt/userguide/stress/dh_47_4}0}}, {{{../txt/userguide/stress/dh_47_5}0}} | {{{../txt/userguide/stress/tu_47_1}0}}, {{{../txt/userguide/stress/tu_47_2}0}}, {{{../txt/userguide/stress/tu_47_3}0}}, {{{../txt/userguide/stress/tu_47_4}1}}, {{{../txt/userguide/stress/tu_47_5}2}} | {{{../txt/userguide/stress/pr_47_1}-}}, {{{../txt/userguide/stress/pr_47_2}-}}, {{{../txt/userguide/stress/pr_47_3}-}} |
*-----------------+------------+---------------------+-------------+
6. Dependencies
Apache Commons RNG requires JDK 1.6+ and has no runtime dependencies.