generate random lists for benchmarks

turns out this changes the performance characteristics dramatically
This commit is contained in:
2020-11-07 17:28:30 +01:00
parent 50d2901b72
commit c6d0182af7

View File

@@ -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<LongList> 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);
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,7 +66,7 @@ public class BenchmarkMultiwayMerge {
LongList.union(longSorted);
}
//@Benchmark
@Benchmark
public void testUnionSortedLists_TwowayMergeImplementation() throws Exception {
twowayMerge(longSorted);
@@ -64,7 +74,7 @@ public class BenchmarkMultiwayMerge {
private void twowayMerge(List<LongList> 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));
}
}
@@ -72,12 +82,24 @@ public class BenchmarkMultiwayMerge {
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");