diff --git a/validating/BadMicroBenchmark.java b/validating/BadMicroBenchmark.java index 4770d176..979a577e 100644 --- a/validating/BadMicroBenchmark.java +++ b/validating/BadMicroBenchmark.java @@ -5,7 +5,7 @@ import java.util.*; public class BadMicroBenchmark { - static final int SIZE = 20_000_000; + static final int SIZE = 250_000_000; public static void main(String[] args) { long[] la = new long[SIZE]; System.out.print("setAll: "); @@ -15,6 +15,6 @@ public class BadMicroBenchmark { } } /* Output: -setAll: 75 -parallelSetAll: 110 +setAll: 272 +parallelSetAll: 301 */ diff --git a/validating/BadMicroBenchmark2.java b/validating/BadMicroBenchmark2.java index 546e9500..3372b338 100644 --- a/validating/BadMicroBenchmark2.java +++ b/validating/BadMicroBenchmark2.java @@ -2,20 +2,33 @@ // (c)2016 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. -// Reversing the test order +// Relying on a common resource import java.util.*; public class BadMicroBenchmark2 { - static final int SIZE = 20_000_000; + // SIZE reduced to make it run faster: + static final int SIZE = 5_000_000; public static void main(String[] args) { long[] la = new long[SIZE]; + Random r = new Random(); System.out.print("parallelSetAll: "); - Time.it(() -> Arrays.parallelSetAll(la, n -> n)); + Time.it(() -> + Arrays.parallelSetAll(la, n -> r.nextLong())); System.out.print("setAll: "); - Time.it(() -> Arrays.setAll(la, n -> n)); + Time.it(() -> + Arrays.setAll(la, n -> r.nextLong())); + SplittableRandom sr = new SplittableRandom(); + System.out.print("parallelSetAll: "); + Time.it(() -> + Arrays.parallelSetAll(la, n -> sr.nextLong())); + System.out.print("setAll: "); + Time.it(() -> + Arrays.setAll(la, n -> sr.nextLong())); } } /* Output: -parallelSetAll: 68 -setAll: 196 +parallelSetAll: 1360 +setAll: 125 +parallelSetAll: 75 +setAll: 17 */ diff --git a/validating/BadMicroBenchmark3.java b/validating/BadMicroBenchmark3.java deleted file mode 100644 index a1f6e96e..00000000 --- a/validating/BadMicroBenchmark3.java +++ /dev/null @@ -1,33 +0,0 @@ -// validating/BadMicroBenchmark3.java -// (c)2016 MindView LLC: see Copyright.txt -// We make no guarantees that this code is fit for any purpose. -// Visit http://OnJava8.com for more book information. -// Relying on a common resource -import java.util.*; - -public class BadMicroBenchmark3 { - static final int SIZE = 20_000_000; - public static void main(String[] args) { - long[] la = new long[SIZE]; - Random r = new Random(); - System.out.print("parallelSetAll: "); - Time.it(() -> - Arrays.parallelSetAll(la, n -> r.nextLong())); - System.out.print("setAll: "); - Time.it(() -> - Arrays.setAll(la, n -> r.nextLong())); - SplittableRandom sr = new SplittableRandom(); - System.out.print("parallelSetAll: "); - Time.it(() -> - Arrays.parallelSetAll(la, n -> sr.nextLong())); - System.out.print("setAll: "); - Time.it(() -> - Arrays.setAll(la, n -> sr.nextLong())); - } -} -/* Output: -parallelSetAll: 4540 -setAll: 1540 -parallelSetAll: 398 -setAll: 739 -*/ diff --git a/validating/jmh/ParallelSetAll.java b/validating/jmh/JMH1.java similarity index 62% rename from validating/jmh/ParallelSetAll.java rename to validating/jmh/JMH1.java index 4331826a..007b194a 100644 --- a/validating/jmh/ParallelSetAll.java +++ b/validating/jmh/JMH1.java @@ -1,17 +1,24 @@ -// validating/jmh/ParallelSetAll.java +// validating/jmh/JMH1.java // (c)2016 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. package validating.jmh; import java.util.*; import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; @State(Scope.Thread) -public class ParallelSetAll { +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +// Increase these three for more accuracy: +@Warmup(iterations = 5) +@Measurement(iterations = 5) +@Fork(1) +public class JMH1 { private long[] la; @Setup public void setup() { - la = new long[20_000_000]; + la = new long[250_000_000]; } @Benchmark public void setAll() { diff --git a/validating/jmh/ParallelSetAllBetter.java b/validating/jmh/JMH2.java similarity index 54% rename from validating/jmh/ParallelSetAllBetter.java rename to validating/jmh/JMH2.java index 43facbb4..bc3826bd 100644 --- a/validating/jmh/ParallelSetAllBetter.java +++ b/validating/jmh/JMH2.java @@ -1,20 +1,37 @@ -// validating/jmh/ParallelSetAllBetter.java +// validating/jmh/JMH2.java // (c)2016 MindView LLC: see Copyright.txt // We make no guarantees that this code is fit for any purpose. // Visit http://OnJava8.com for more book information. package validating.jmh; import java.util.*; import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; @State(Scope.Thread) -public class ParallelSetAllBetter { +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@Warmup(iterations = 5) +@Measurement(iterations = 5) +@Fork(1) +public class JMH2 { private long[] la; - @Param({"1", "100", "10000", "1000000", "20000000"}) - int count; + @Param({ + "1", + "10", + "100", + "1000", + "10000", + "100000", + "1000000", + "10000000", + "100000000", + "250000000" + }) + int size; @Setup public void setup() { - la = new long[count]; + la = new long[size]; } @Benchmark public void setAll() { diff --git a/validating/jmh/JMH3.java b/validating/jmh/JMH3.java new file mode 100644 index 00000000..d4b863c5 --- /dev/null +++ b/validating/jmh/JMH3.java @@ -0,0 +1,48 @@ +// validating/jmh/JMH3.java +// (c)2016 MindView LLC: see Copyright.txt +// We make no guarantees that this code is fit for any purpose. +// Visit http://OnJava8.com for more book information. +package validating.jmh; +import java.util.*; +import org.openjdk.jmh.annotations.*; +import java.util.concurrent.TimeUnit; + +@State(Scope.Thread) +@BenchmarkMode(Mode.AverageTime) +@OutputTimeUnit(TimeUnit.MICROSECONDS) +@Warmup(iterations = 5) +@Measurement(iterations = 5) +@Fork(1) +public class JMH3 { + private long[] la; + @Param({ + "1", + "10", + "100", + "1000", + "10000", + "100000", + "1000000", + "10000000", + "100000000", + "250000000" + }) + int size; + + @Setup + public void setup() { + la = new long[size]; + } + public static long f(long x) { + long divisor = x % 25 + 1; + return Long.divideUnsigned(x, divisor); + } + @Benchmark + public void setAll() { + Arrays.setAll(la, n -> f(n)); + } + @Benchmark + public void parallelSetAll() { + Arrays.parallelSetAll(la, n -> f(n)); + } +}