summaryrefslogtreecommitdiff
path: root/test/benchmarks/src
diff options
context:
space:
mode:
authorAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-12-09 10:08:20 +0000
committerAleksandar Pokopec <aleksandar.prokopec@epfl.ch>2010-12-09 10:08:20 +0000
commitf2ecbd04691b1914e2f77c60afc2b296aa6826ae (patch)
tree539b543eb173cfc7b0bbde4ca5f2c5bb187297df /test/benchmarks/src
parent492b22576f2ad46b300ce8dc31c5b672aaf517e4 (diff)
downloadscala-f2ecbd04691b1914e2f77c60afc2b296aa6826ae.tar.gz
scala-f2ecbd04691b1914e2f77c60afc2b296aa6826ae.tar.bz2
scala-f2ecbd04691b1914e2f77c60afc2b296aa6826ae.zip
Array combiners implementation changed from arr...
Array combiners implementation changed from array buffers to doubling unrolled buffers to avoid excessive copying. Still evaluating the benefits of this. No review.
Diffstat (limited to 'test/benchmarks/src')
-rw-r--r--test/benchmarks/src/scala/collection/parallel/Benchmarking.scala1
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala3
-rw-r--r--test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala55
3 files changed, 59 insertions, 0 deletions
diff --git a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
index 32c3ca154f..9eacc7ff1f 100644
--- a/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
+++ b/test/benchmarks/src/scala/collection/parallel/Benchmarking.scala
@@ -65,6 +65,7 @@ trait BenchmarkRegister {
register(parallel_array.PadToDouble)
register(parallel_array.AggregateLight)
register(parallel_array.ScanLight)
+ register(parallel_array.ScanMedium)
register(parallel_array.MatrixMultiplication)
// parallel views
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
index b5dcfca872..f151158ad9 100644
--- a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ForeachHeavy.scala
@@ -9,6 +9,8 @@ object ForeachHeavy extends Companion {
override def comparisons = List("jsr")
override def defaultSize = 2048
+ @volatile var z = 0
+
val fun = (a: Cont) => heavyOperation(a)
val funjsr = new extra166y.Ops.Procedure[Cont] {
def op(a: Cont) = heavyOperation(a)
@@ -26,6 +28,7 @@ object ForeachHeavy extends Companion {
if (n % i == 0) isPrime = false
i += 1
}
+ if (isPrime && (n.toString == z)) z += 1
isPrime
}
}
diff --git a/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala
new file mode 100644
index 0000000000..73a237189f
--- /dev/null
+++ b/test/benchmarks/src/scala/collection/parallel/benchmarks/parallel_array/ScanMedium.scala
@@ -0,0 +1,55 @@
+package scala.collection.parallel.benchmarks.parallel_array
+
+
+import scala.collection.parallel.benchmarks._
+import scala.collection.parallel.mutable.ParArray
+
+
+object ScanMedium extends Companion {
+ def benchName = "scan-medium";
+ def apply(sz: Int, parallelism: Int, what: String) = new ScanMedium(sz, parallelism, what)
+ override def comparisons = List("jsr")
+ override def defaultSize = 5000
+
+ val op = (a: Cont, b: Cont) => {
+ operation(a, b)
+ }
+ def operation(a: Cont, b: Cont) = {
+ val m = if (a.in < 0) 1 else 0
+ val k = calc(a.in, b.in, m)
+ new Cont(a.in + b.in + k * m * (0 until 2).reduceLeft(_ + _))
+ }
+ private def calc(x: Int, y: Int, n: Int) = {
+ var sum = x
+ for (i <- 0 until 500) {
+ sum += y + (if (sum % 2 == 0) n * x else y)
+ if (sum % 5 == 0) sum -= x * y - n * (x + y)
+ }
+ sum
+ }
+}
+
+
+class ScanMedium(sz: Int, p: Int, what: String)
+extends Resettable[Cont](sz, p, what, new Cont(_), new Array[Any](_), classOf[Cont]) {
+ def companion = ScanMedium
+ override def repetitionsPerRun = 50
+ override val runs = 12
+
+ def runpar = pa.scan(new Cont(0))(ScanMedium.op)
+ def runseq = sequentialScan(new Cont(0), ScanMedium.op, sz)
+ def runjsr = jsrarr.cumulate(new extra166y.Ops.Reducer[Cont] {
+ def op(a: Cont, b: Cont) = ScanMedium.operation(a, b)
+ }, new Cont(0))
+ override def comparisonMap = collection.Map("jsr" -> runjsr _)
+}
+
+
+
+
+
+
+
+
+
+