This is an automated email from the ASF dual-hosted git repository.
aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git
The following commit(s) were added to refs/heads/master by this push:
new b6d5f50 Ensure same samplers are tested in single and sequential
b6d5f50 is described below
commit b6d5f5047aff571ead614bef3241881a391caee6
Author: Alex Herbert <[email protected]>
AuthorDate: Wed Aug 25 09:40:28 2021 +0100
Ensure same samplers are tested in single and sequential
Use a base class to define the samplers.
---
.../distribution/ZigguratSamplerPerformance.java | 97 ++++++++++------------
1 file changed, 45 insertions(+), 52 deletions(-)
diff --git
a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/sampling/distribution/ZigguratSamplerPerformance.java
b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/sampling/distribution/ZigguratSamplerPerformance.java
index b8531ce..f681ecc 100644
---
a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/sampling/distribution/ZigguratSamplerPerformance.java
+++
b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/sampling/distribution/ZigguratSamplerPerformance.java
@@ -249,23 +249,9 @@ public class ZigguratSamplerPerformance {
/**
* The samplers to use for testing the ziggurat method.
- * Defines the RandomSource and the sampler type.
*/
@State(Scope.Benchmark)
- public static class Sources {
- /**
- * RNG providers.
- *
- * <p>Use different speeds.</p>
- *
- * @see <a
href="https://commons.apache.org/proper/commons-rng/userguide/rng.html">
- * Commons RNG user guide</a>
- */
- @Param({"XO_RO_SHI_RO_128_PP",
- "MWC_256",
- "JDK"})
- private String randomSourceName;
-
+ public abstract static class Sources {
/**
* The sampler type.
*/
@@ -280,25 +266,7 @@ public class ZigguratSamplerPerformance {
MOD_EXPONENTIAL2, MOD_EXPONENTIAL_SIMPLE_OVERHANGS,
MOD_EXPONENTIAL_INLINING,
MOD_EXPONENTIAL_LOOP, MOD_EXPONENTIAL_LOOP2,
MOD_EXPONENTIAL_RECURSION, MOD_EXPONENTIAL_INT_MAP,
MOD_EXPONENTIAL_512})
- private String type;
-
- /** The sampler. */
- private ContinuousSampler sampler;
-
- /**
- * @return the sampler.
- */
- public ContinuousSampler getSampler() {
- return sampler;
- }
-
- /** Instantiates sampler. */
- @Setup
- public void setup() {
- final RandomSource randomSource =
RandomSource.valueOf(randomSourceName);
- final UniformRandomProvider rng = randomSource.create();
- sampler = createSampler(type, rng);
- }
+ protected String type;
/**
* Creates the sampler.
@@ -353,6 +321,44 @@ public class ZigguratSamplerPerformance {
}
/**
+ * The samplers to use for testing the ziggurat method with single sample
generation.
+ * Defines the RandomSource and the sampler type.
+ */
+ @State(Scope.Benchmark)
+ public static class SingleSources extends Sources {
+ /**
+ * RNG providers.
+ *
+ * <p>Use different speeds.</p>
+ *
+ * @see <a
href="https://commons.apache.org/proper/commons-rng/userguide/rng.html">
+ * Commons RNG user guide</a>
+ */
+ @Param({"XO_RO_SHI_RO_128_PP",
+ "MWC_256",
+ "JDK"})
+ private String randomSourceName;
+
+ /** The sampler. */
+ private ContinuousSampler sampler;
+
+ /**
+ * @return the sampler.
+ */
+ public ContinuousSampler getSampler() {
+ return sampler;
+ }
+
+ /** Instantiates sampler. */
+ @Setup
+ public void setup() {
+ final RandomSource randomSource =
RandomSource.valueOf(randomSourceName);
+ final UniformRandomProvider rng = randomSource.create();
+ sampler = createSampler(type, rng);
+ }
+ }
+
+ /**
* The samplers to use for testing the ziggurat method with sequential
sample generation.
* Defines the RandomSource and the sampler type.
*
@@ -367,7 +373,7 @@ public class ZigguratSamplerPerformance {
* chosen using both sets of results.
*/
@State(Scope.Benchmark)
- public static class SequentialSources {
+ public static class SequentialSources extends Sources {
/**
* RNG providers.
*
@@ -382,19 +388,6 @@ public class ZigguratSamplerPerformance {
})
private String randomSourceName;
- /** The sampler type. */
- @Param({// Production versions
- GAUSSIAN_128, GAUSSIAN_256, MOD_GAUSSIAN, MOD_EXPONENTIAL,
- // Experimental Marsaglia exponential ziggurat sampler
- EXPONENTIAL,
- // Experimental McFarland Gaussian ziggurat samplers
- MOD_GAUSSIAN2, MOD_GAUSSIAN_SIMPLE_OVERHANGS,
MOD_GAUSSIAN_INLINING,
- MOD_GAUSSIAN_INLINING_SIMPLE_OVERHANGS, MOD_GAUSSIAN_INT_MAP,
MOD_GAUSSIAN_512,
- // Experimental McFarland Gaussian ziggurat samplers
- MOD_EXPONENTIAL_LOOP, MOD_EXPONENTIAL_LOOP2,
- MOD_EXPONENTIAL_RECURSION, MOD_EXPONENTIAL_INT_MAP,
MOD_EXPONENTIAL_512})
- private String type;
-
/** The size. */
@Param({"1", "2", "4", "8", "16", "32", "64"})
private int size;
@@ -414,8 +407,8 @@ public class ZigguratSamplerPerformance {
public void setup() {
final RandomSource randomSource =
RandomSource.valueOf(randomSourceName);
final UniformRandomProvider rng = randomSource.create();
- final ContinuousSampler s = Sources.createSampler(type, rng);
- sampler = createSampler(size, s);
+ final ContinuousSampler s = createSampler(type, rng);
+ sampler = createSequentialSampler(size, s);
}
/**
@@ -425,7 +418,7 @@ public class ZigguratSamplerPerformance {
* @param s the sampler to create the samples
* @return the sampler
*/
- private static ContinuousSampler createSampler(int size,
ContinuousSampler s) {
+ private static ContinuousSampler createSequentialSampler(int size,
ContinuousSampler s) {
// Create size samples
switch (size) {
case 1:
@@ -3681,7 +3674,7 @@ public class ZigguratSamplerPerformance {
* @return the sample value
*/
@Benchmark
- public double sample(Sources sources) {
+ public double sample(SingleSources sources) {
return sources.getSampler().sample();
}