summaryrefslogtreecommitdiff
path: root/test/benchmarks
diff options
context:
space:
mode:
Diffstat (limited to 'test/benchmarks')
-rw-r--r--test/benchmarks/src/scala/collection/parallel/Benchmarking.scala5
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala4
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala4
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala2
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala78
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala4
6 files changed, 88 insertions, 9 deletions
diff --git a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
index 1ecafd9a0c..0eb6c6ef13 100644
--- a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
+++ b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
@@ -112,6 +112,11 @@ trait BenchmarkRegister {
// parallel hash table benchmarks
register(hashtables.RefParHashTableBenches.Reduce)
register(hashtables.RefParHashTableBenches.Reduce2)
+ register(hashtables.RefParHashTableBenches.Foreach)
+ register(hashtables.RefParHashTableBenches.ForeachSet)
+ register(hashtables.RefParHashTableBenches.Map)
+ register(hashtables.RefParHashTableBenches.Map2)
+ register(hashtables.RefParHashTableBenches.HeavyMap)
}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala
index 10e6201709..29a34e513d 100644
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/Bench.scala
@@ -82,12 +82,16 @@ trait Bench extends Benchmark {
*/
def printResults {}
+ def onEnd {}
+
def executeBenchmark = {
println("-----------------------")
print(name + ", " + runWhat + ", par.=" + parallelism + ", sz=" + niceSize + ": ")
val times = runBenchmark(runs)
+ onEnd
+
for (t <- times) print(t + " ")
println
printResults
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala
index 84cc25610b..901a104b44 100644
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Dummy.scala
@@ -13,6 +13,10 @@ class Dummy(val in: Int) {
object DummyOperators extends Operators[Dummy] {
+ val foreachFun = (a: Dummy) => {
+ a
+ ()
+ }
val reducer = (a: Dummy, b: Dummy) => {
var i = 0
if (a.in > b.in) {
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala
index c86fe66e63..84f69239f6 100644
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/generic/Operators.scala
@@ -7,6 +7,7 @@ package scala.collection.parallel.benchmarks.generic
trait Operators[T] {
+ def foreachFun: T => Unit
def reducer: (T, T) => T
def mediumreducer: (T, T) => T
def filterer: T => Boolean
@@ -24,6 +25,7 @@ trait Operators[T] {
trait IntOperators extends Operators[Int] {
+ val foreachFun: Int => Unit = x => ()
val reducer: (Int, Int) => Int = _ + _
val mediumreducer: (Int, Int) => Int = (a: Int, b: Int) => {
val result = if (b == 0) a else {
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
index 32341fa59c..ad2a8750c1 100644
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtables/ParallelHashTables.scala
@@ -56,6 +56,28 @@ trait ParHashTableBenches[K, V] extends StandardParIterableBenches[(K, V), ParHa
}
}
+ object HeavyMap extends IterableBenchCompanion {
+ override def defaultSize = 5000
+ override def comparisons = List()
+ def benchName = "heavy-map";
+ def apply(sz: Int, p: Int, w: String) = new HeavyMap(sz, p, w)
+ }
+
+ class HeavyMap(val size: Int, val parallelism: Int, val runWhat: String)
+ extends IterableBench {
+ var result: Int = 0
+ def comparisonMap = collection.Map()
+ def runseq = {
+ val r = this.seqcoll.asInstanceOf[collection.mutable.HashMap[K, V]].map(operators.heavymapper)
+ result = r.size
+ }
+ def runpar = {
+ result = this.parcoll.map(operators.heavymapper).size
+ }
+ def companion = HeavyMap
+ override def repetitionsPerRun = 50
+ }
+
object Reduce2 extends IterableBenchCompanion {
override def defaultSize = 50000
override def comparisons = List()
@@ -65,16 +87,27 @@ trait ParHashTableBenches[K, V] extends StandardParIterableBenches[(K, V), ParHa
class Reduce2(val size: Int, val parallelism: Int, val runWhat: String)
extends IterableBench {
- private var ht: collection.mutable.HashMap[K, V] = _
def comparisonMap = collection.Map()
def runseq = this.seqcoll.reduceLeft(operators.mediumreducer)
def runpar = this.parcoll.reduce(operators.mediumreducer)
- override def reset = runWhat match {
- case _ => super.reset
- }
def companion = Reduce2
}
+ object Foreach extends IterableBenchCompanion {
+ override def defaultSize = 50000
+ override def comparisons = List()
+ def benchName = "foreach";
+ def apply(sz: Int, p: Int, w: String) = new Foreach(sz, p, w)
+ }
+
+ class Foreach(val size: Int, val parallelism: Int, val runWhat: String)
+ extends IterableBench {
+ def comparisonMap = collection.Map()
+ def runseq = this.seqcoll.foreach(operators.foreachFun)
+ def runpar = this.parcoll.foreach(operators.foreachFun)
+ def companion = Foreach
+ }
+
}
@@ -83,7 +116,29 @@ trait ParHashTableBenches[K, V] extends StandardParIterableBenches[(K, V), ParHa
object RefParHashTableBenches extends ParHashTableBenches[Dummy, Dummy] {
- type DPair = (Dummy, Dummy)
+ type DPair = (Dummy, Dummy);
+
+ object ForeachSet extends IterableBenchCompanion {
+ override def defaultSize = 50000
+ override def comparisons = List()
+ def benchName = "foreach-set";
+ def apply(sz: Int, p: Int, w: String) = new ForeachSet(sz, p, w)
+ }
+
+ class ForeachSet(val size: Int, val parallelism: Int, val runWhat: String)
+ extends IterableBench {
+ val array = new Array[Int](size)
+ def comparisonMap = collection.Map()
+ def runseq = for (p <- this.seqcoll) array(p._1.in) += 1
+ def runpar = for (p <- this.parcoll) array(p._1.in) += 1
+ def companion = ForeachSet
+
+ override def onEnd {
+ for (i <- 0 until array.length) {
+ assert(array(i) == repetitionsPerRun * runs)
+ }
+ }
+ }
object operators extends Operators[DPair] {
def gcd(a: Int, b: Int): Int = {
@@ -101,6 +156,10 @@ object RefParHashTableBenches extends ParHashTableBenches[Dummy, Dummy] {
}
sum
}
+ val foreachFun = (t: DPair) => {
+ t
+ ()
+ }
val reducer = (x: DPair, y: DPair) => {
//y._2.num = x._2.in + y._2.in
y
@@ -122,13 +181,14 @@ object RefParHashTableBenches extends ParHashTableBenches[Dummy, Dummy] {
(new Dummy(p._1.in * -2 + a), p._2)
}
val heavymapper = (p: DPair) => {
- val a = p._1
- var i = -100
+ var i = -2000
+ var t = p._1.in
while (i < 0) {
- if (a.in < i) a.num += 1
+ t += (p._2.num - p._1.num) / 500
+ p._1.num += p._2.num + t
i += 1
}
- (a, p._2)
+ (p._1, new Dummy(0))
}
val taker = (p: DPair) => true
val eachFun: DPair => Unit = { dp =>
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
index 0e14be3e30..3e37086361 100644
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/hashtries/ParallelHashTries.scala
@@ -115,6 +115,10 @@ object RefParHashTrieBenches extends ParHashTrieBenches[Dummy, Dummy] {
}
sum
}
+ val foreachFun = (t: DPair) => {
+ t
+ ()
+ }
val reducer = (x: DPair, y: DPair) => {
//y._2.num = x._2.in + y._2.in
y