You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2019/08/07 19:05:16 UTC

[commons-rng] branch master updated: Correct benchmark to separate random source and the distribution.

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 9fe757d  Correct benchmark to separate random source and the distribution.
9fe757d is described below

commit 9fe757de7078a063024c72e7178dfd970c334afc
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed Aug 7 20:05:11 2019 +0100

    Correct benchmark to separate random source and the distribution.
    
    This allows baselining the speed of the tested RNGs without any sampler
    creation.
---
 .../EnumeratedDistributionSamplersPerformance.java | 79 +++++++++++++---------
 1 file changed, 46 insertions(+), 33 deletions(-)

diff --git a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/distribution/EnumeratedDistributionSamplersPerformance.java b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/distribution/EnumeratedDistributionSamplersPerformance.java
index 2afa933..40664cc 100644
--- a/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/distribution/EnumeratedDistributionSamplersPerformance.java
+++ b/commons-rng-examples/examples-jmh/src/main/java/org/apache/commons/rng/examples/jmh/distribution/EnumeratedDistributionSamplersPerformance.java
@@ -56,13 +56,51 @@ import java.util.concurrent.TimeUnit;
 @Fork(value = 1, jvmArgs = {"-server", "-Xms128M", "-Xmx128M"})
 public class EnumeratedDistributionSamplersPerformance {
     /**
+     * The random sources to use for testing. This is a smaller list than all the possible
+     * random sources; the list is composed of generators of different speeds.
+     */
+    @State(Scope.Benchmark)
+    public static class LocalRandomSources {
+        /**
+         * 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({"WELL_44497_B",
+                "ISAAC",
+                "XO_RO_SHI_RO_128_PLUS",
+                })
+        private String randomSourceName;
+
+        /** RNG. */
+        private UniformRandomProvider generator;
+
+        /**
+         * @return the RNG.
+         */
+        public UniformRandomProvider getGenerator() {
+            return generator;
+        }
+
+        /** Create the random source. */
+        @Setup
+        public void setup() {
+            final RandomSource randomSource = RandomSource.valueOf(randomSourceName);
+            generator = RandomSource.create(randomSource);
+        }
+    }
+
+    /**
      * The {@link DiscreteSampler} samplers to use for testing. Creates the sampler for each
-     * {@link RandomSource} in the default {@link RandomSources}.
+     * random source.
      *
      * <p>This class is abstract. The probability distribution is created by implementations.</p>
      */
     @State(Scope.Benchmark)
-    public abstract static class SamplerSources {
+    public abstract static class SamplerSources extends LocalRandomSources {
         /**
          * A factory for creating DiscreteSampler objects.
          */
@@ -76,21 +114,6 @@ public class EnumeratedDistributionSamplersPerformance {
         }
 
         /**
-         * 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({
-                //"WELL_44497_B",
-                //"ISAAC",
-                "XO_RO_SHI_RO_128_PLUS",
-                })
-        private String randomSourceName;
-
-        /**
          * The sampler type.
          */
         @Param({"BinarySearchDiscreteSampler",
@@ -110,9 +133,6 @@ public class EnumeratedDistributionSamplersPerformance {
                 })
         private String samplerType;
 
-        /** RNG. */
-        private UniformRandomProvider generator;
-
         /** The factory. */
         private DiscreteSamplerFactory factory;
 
@@ -120,13 +140,6 @@ public class EnumeratedDistributionSamplersPerformance {
         private DiscreteSampler sampler;
 
         /**
-         * @return the RNG.
-         */
-        public UniformRandomProvider getGenerator() {
-            return generator;
-        }
-
-        /**
          * Gets the sampler.
          *
          * @return the sampler.
@@ -136,13 +149,13 @@ public class EnumeratedDistributionSamplersPerformance {
         }
 
         /** Create the distribution (per iteration as it may vary) and instantiates sampler. */
+        @Override
         @Setup(Level.Iteration)
         public void setup() {
-            final RandomSource randomSource = RandomSource.valueOf(randomSourceName);
-            generator = RandomSource.create(randomSource);
+            super.setup();
 
             final double[] probabilities = createProbabilities();
-            createSamplerFactory(generator, probabilities);
+            createSamplerFactory(getGenerator(), probabilities);
             sampler = factory.create();
         }
 
@@ -343,7 +356,7 @@ public class EnumeratedDistributionSamplersPerformance {
 
     /**
      * Define random probability distributions of known size for testing. These are random but
-     * the average cumulative probability function will be straight line given the increment
+     * the average cumulative probability function will be a straight line given the increment
      * average is 0.5.
      */
     @State(Scope.Benchmark)
@@ -378,7 +391,7 @@ public class EnumeratedDistributionSamplersPerformance {
     }
 
     /**
-     * Compute a sample by binary search of the cumulative probability distribution..
+     * Compute a sample by binary search of the cumulative probability distribution.
      */
     static final class BinarySearchDiscreteSampler
         implements DiscreteSampler {
@@ -504,7 +517,7 @@ public class EnumeratedDistributionSamplersPerformance {
      * @return the {@code int} value
      */
     @Benchmark
-    public int baselineNextDouble(SamplerSources sources) {
+    public int baselineNextDouble(LocalRandomSources sources) {
         return sources.getGenerator().nextDouble() < 0.5 ? 1 : 0;
     }