summaryrefslogtreecommitdiff
path: root/test/benchmarks
diff options
context:
space:
mode:
authorAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-10-28 12:10:10 +0000
committerAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-10-28 12:10:10 +0000
commit750b5244eeb2484e0cd37117c0e6c9f0b7c5c57a (patch)
treee575c054cb0b6b6e6aff27c77741f453d9645007 /test/benchmarks
parentb7a344e93fbbcdf2392ed4be99c3a49dc5b8a9d9 (diff)
downloadscala-750b5244eeb2484e0cd37117c0e6c9f0b7c5c57a.tar.gz
scala-750b5244eeb2484e0cd37117c0e6c9f0b7c5c57a.tar.bz2
scala-750b5244eeb2484e0cd37117c0e6c9f0b7c5c57a.zip
Performance bug in hash table splitter fixed, ...
Performance bug in hash table splitter fixed, where size map was not used and all the elements were counted instead. Performance tests now pass. No review
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