summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/parallel/ParIterableLike.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/collection/parallel/ParIterableLike.scala')
-rw-r--r--src/library/scala/collection/parallel/ParIterableLike.scala9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/library/scala/collection/parallel/ParIterableLike.scala b/src/library/scala/collection/parallel/ParIterableLike.scala
index 0769181150..ff37c89517 100644
--- a/src/library/scala/collection/parallel/ParIterableLike.scala
+++ b/src/library/scala/collection/parallel/ParIterableLike.scala
@@ -941,7 +941,14 @@ extends IterableLike[T, Repr]
result = true
} else pit.scanToArray(z, op, array, from)
def newSubtask(p: ParIterator) = unsupported
- override def shouldSplitFurther = len > size / 2
+ override lazy val shouldSplitFurther = {
+ // we want less work stealings while prefix scanning
+ // and keep processors busier with merging
+ // (work stealing while prefix scanning means more work later)
+ val processors = parallelismLevel min availableProcessors
+ len > ((size / tweak(processors)) max 1)
+ }
+ private def tweak(p: Int) = if (p < 4) 2 else p / 2
override def split = {
val pits = pit.split
for ((p, untilp) <- pits zip pits.scanLeft(0)(_ + _.remaining); if untilp < len) yield {