diff options
author | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-12-09 10:08:20 +0000 |
---|---|---|
committer | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2010-12-09 10:08:20 +0000 |
commit | f2ecbd04691b1914e2f77c60afc2b296aa6826ae (patch) | |
tree | 539b543eb173cfc7b0bbde4ca5f2c5bb187297df /test/benchmarks/src | |
parent | 492b22576f2ad46b300ce8dc31c5b672aaf517e4 (diff) | |
download | scala-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')
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 _) +} + + + + + + + + + + |