generate random lists for benchmarks
turns out this changes the performance characteristics dramatically
This commit is contained in:
@@ -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);
|
||||
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,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");
|
||||
|
||||
Reference in New Issue
Block a user