diff --git a/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkMultiwayMerge.java b/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkMultiwayMerge.java index 214458e..a888a18 100644 --- a/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkMultiwayMerge.java +++ b/primitiveCollections/src/jmh/java/org/lucares/collections/BenchmarkMultiwayMerge.java @@ -2,6 +2,7 @@ package org.lucares.collections; import java.util.ArrayList; import java.util.List; +import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.TimeUnit; import java.util.stream.LongStream; @@ -22,25 +23,34 @@ import org.openjdk.jmh.annotations.Warmup; @BenchmarkMode(Mode.Throughput) @Warmup(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS) @Measurement(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS) -@Fork(3) +@Fork(2) public class BenchmarkMultiwayMerge { - @Param({ "10000"/*, "20000" */}) + @Param({ "10000" , "20000" }) private int values; - - @Param({/*"3","5",*/"10"}) + + @Param({ "3","5", "10","20" }) private int numLists; + @Param({ "true" }) + private boolean random; private List longSorted = null; @Setup public void setup() throws Exception { + ThreadLocalRandom rng = ThreadLocalRandom.current(); longSorted = new ArrayList<>(); - for(int i = 0; i < numLists; i++) { - LongList list = LongList.of(); - LongStream.range(0, values).forEachOrdered(list::add); - list.sort(); + for (int i = 0; i < numLists; i++) { + LongList list = new LongList(values); + if (random) { + for (int j = 0; j < values; j++) { + list.add(rng.nextLong()); + } + list.sort(); + } else { + LongStream.range(0, values).forEachOrdered(list::add); + } longSorted.add(list); } } @@ -56,28 +66,40 @@ public class BenchmarkMultiwayMerge { LongList.union(longSorted); } - //@Benchmark + @Benchmark public void testUnionSortedLists_TwowayMergeImplementation() throws Exception { twowayMerge(longSorted); } - + private void twowayMerge(List longLists) { LongList result = longLists.get(0); - for(int i =1; i < longLists.size(); i++) { + for (int i = 1; i < longLists.size(); i++) { result = LongList.union(result, longLists.get(i)); } } - + public static void main(String[] args) throws Exception { System.out.println("\n\n----------------\nstart"); // -XX:+PrintCompilation - for (int i = 0; i < 200; i++) { + + if (args != null) { BenchmarkMultiwayMerge benchmark = new BenchmarkMultiwayMerge(); + benchmark.numLists = 10; + benchmark.values = 10000; benchmark.setup(); - //System.out.println("\n\n----------------\n"+i); - for (int j = 0; j < 100000; j++) { benchmark.testUnionSortedLists_MultiwayMerge(); + } else { + for (int i = 0; i < 8; i++) { + BenchmarkMultiwayMerge benchmark = new BenchmarkMultiwayMerge(); + benchmark.numLists = 10; + benchmark.values = 10000; + benchmark.setup(); + System.out.println("\n\n----------------\n" + i); + for (int j = 0; j < 1000; j++) { + // benchmark.testUnionSortedLists_MultiwayMerge(); + benchmark.testUnionSortedLists_TwowayMergeImplementation(); + } } } System.out.println("done");