From 2d86bdceb35dd7de65828b731c6b6d5e997dd5c6 Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Tue, 6 Feb 2018 10:47:41 +0100 Subject: [PATCH 1/7] Add blog article about the new collections performance --- .../2018-02-07-collections-performance.md | 136 ++++++++++++++++++ .../new-collections-performance-filter.png | Bin 0 -> 38855 bytes .../new-collections-performance-flatMap.png | Bin 0 -> 43174 bytes .../img/new-collections-performance-map.png | Bin 0 -> 40004 bytes 4 files changed, 136 insertions(+) create mode 100644 blog/_posts/2018-02-07-collections-performance.md create mode 100644 resources/img/new-collections-performance-filter.png create mode 100644 resources/img/new-collections-performance-flatMap.png create mode 100644 resources/img/new-collections-performance-map.png diff --git a/blog/_posts/2018-02-07-collections-performance.md b/blog/_posts/2018-02-07-collections-performance.md new file mode 100644 index 000000000..7bcb32158 --- /dev/null +++ b/blog/_posts/2018-02-07-collections-performance.md @@ -0,0 +1,136 @@ +--- +layout: blog-detail +post-type: blog +by: Julien Richard-Foy +title: On Performance of the New Collections +--- + +In a [previous blog post](/blog/2017/11/28/view-based-collections.html), I explained +how [Scala 2.13’s new collections](http://www.scala-lang.org/blog/2017/02/28/collections-rework.html) +have been designed so that the default implementations of transformation operations work +with both strict and non-strict types of collections. In essence, we abstract over +the evaluation mode (strict or non strict) of concrete collection types. + +After we published that blog post, the community +[raised concerns](https://www.reddit.com/r/scala/comments/7g52cy/let_them_be_lazy/dqgol36/) +about possible performance implications of having more levels of abstraction than before. + +This blog article gives more information about the overhead of the +collections’ view-based design and our solution to remove that +overhead. + +For reference, the source code of the new collections is available in +[this GitHub repository](https://github.com/scala/collection-strawman). + +## Overhead Of View Based Implementations + +Let’s be clear: the view based implementations are in general slower than their +builder based versions. How much slower exactly varies with the type of collection +(e.g. `List`, `Vector`, `Set`), the operation (e.g. `map`, `flatMap`, `filter`) +and the number of elements in the collection. In my benchmark on `Vector`, on +the `map`, `filter` and `flatMap` operations, with 1 element to 7 million of +elements, I measured an average slowdown of 25%. + +## How To Fix That Performance Regression? + +Our solution is simply to go back to builder based implementations for strict collections: we +override the default view based implementations with more efficient builder based +ones. We actually and up with the same implementations as in the old collections. + +In practice these implementations are factored out in traits that can be mixed +into concrete collection types. Such trait names are always prefixed with +`StrictOptimized`. For instance, here is an excerpt of the `StrictOptimizedIterableOps` +trait: + +~~~ scala +trait StrictOptimizedIterableOps[+A, +CC[_], +C] extends IterableOps[A, CC, C] { + + override def map[B](f: A => B): CC[B] = { + val b = iterableFactory.newBuilder[B]() + val it = iterator() + while (it.hasNext) { + b += f(it.next()) + } + b.result() + } + +} +~~~ + +Then, to implement the `Vector` collection, we just mix the above trait: + +~~~ scala +trait Vector[+A] extends IndexedSeq[A] + with IndexedSeqOps[A, Vector, Vector[A]] + with StrictOptimizedSeqOps[A, Vector, Vector[A]] +~~~ + +Here we use `StrictOptimizedSeqOps`, which is a specialization of `StrictOptimizedIterableOps` +for `Seq` collections. + +## Is The View Based Design Worth It? + +In my previous article I explained that a drawback of the old builder based design was that, +on non strict collections (e.g. `Stream` or `View`), we had to carefully override all the +default implementations of transformation operations to make them non strict. + +Now it seems that the situation is just reversed: the default implementations work well +with non strict collections, but we have to override them in strict collections. + +So, is the new design worth it? To answer this question I will quote a comment posted +by Stefan Zeiger [here](https://www.reddit.com/r/scala/comments/7g52cy/let_them_be_lazy/dqixt8d/): + +> The lazy-by-default approach is mostly beneficial when you're implementing lazy +> collections because you don't have to override pretty much everything or get +> incorrect semantics. The reverse risk is smaller: If you don't override a lazy +> implementation for a strict collection type you only suffer a small performance +> impact but it's still correct. + +In short: implementations are **correct first** in the new design but you might want to +override them for performance reasons on strict collections. + +## Performance Comparison With 2.12’s Collections + +Talking about performance, how performant are the new collections compared to the old ones? + +Again, the answer depends on the type of collection, the operations and the number of elements. +My `Vector` benchmarks show a 20% speedup on average: + +![](/resources/img/new-collections-performance-filter.png) + +![](/resources/img/new-collections-performance-map.png) + +![](/resources/img/new-collections-performance-flatMap.png) + +These charts show the execution time (vertically) of the `filter`, `map` and `flatMap` +operations, according to the number of elements (horizontally). Note that scales are +logarithmic in both axis. The blue line shows the performance of the old `Vector`, +the green line shows the performance of the new `Vector` if it used only view based +implementations, and the red line shows the actual performance of the new `Vector` +(with strict optimized implementations). Benchmark source code and numbers can be found +[here](https://gist.github.com/julienrf/f1cb2b062cd9783a35e2f35778959c76). + +Since operation implementations end up being the same, why do we get better performance +at all? Well, these numbers are specific to `Vector`, and are due to the fact that +we more agressively inlined a few critical methods. I don’t expect the new collections +to be *always* 20% faster than the old collections. However, there is no reason for +them to be slower since the execution path, when calling an operation, can be made +exactly the same as in the old collections. + +## Conclusion + +This article studied the performance of the new collections. I’ve reported that view +based operation implementations are about 25% slower than builder based implementations +and I’ve explained how we restored builder based implementations on strict collections. + +I expect the new collections to be as fast or slightly faster than the previous collections. +Indeed, we took advantage of the rewrite to apply some more optimizations here and +again. + +More significant performance improvements can be achieved by using different +data structures. For instance, we recently +[merged](https://github.com/scala/collection-strawman/pull/342) +a completely new implementation of immutable `Set` and `Map` based on [compressed +hash-array mapped prefix-trees](https://michael.steindorfer.name/publications/oopsla15.pdf). +This data structure has a smaller memory footprint than the old `HashSet` and `HashMap`, +and some operations are an order of magnitude faster. diff --git a/resources/img/new-collections-performance-filter.png b/resources/img/new-collections-performance-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..18e5b8c5ea4f8b0e552dc0586bd3892f29d1e1e2 GIT binary patch literal 38855 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ޜO?6PxY%CNrp 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 N6mP4_7RZ Date: Tue, 6 Feb 2018 14:10:37 +0100 Subject: [PATCH 2/7] Address Guillaume and Olaf reviews. Also fix a wrong number. --- .../2018-02-07-collections-performance.md | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/blog/_posts/2018-02-07-collections-performance.md b/blog/_posts/2018-02-07-collections-performance.md index 7bcb32158..cbf05ee59 100644 --- a/blog/_posts/2018-02-07-collections-performance.md +++ b/blog/_posts/2018-02-07-collections-performance.md @@ -24,18 +24,18 @@ For reference, the source code of the new collections is available in ## Overhead Of View Based Implementations -Let’s be clear: the view based implementations are in general slower than their +Let’s be clear, the view based implementations are in general slower than their builder based versions. How much slower exactly varies with the type of collection (e.g. `List`, `Vector`, `Set`), the operation (e.g. `map`, `flatMap`, `filter`) and the number of elements in the collection. In my benchmark on `Vector`, on -the `map`, `filter` and `flatMap` operations, with 1 element to 7 million of +the `map`, `filter` and `flatMap` operations, with 1 to 7 million of elements, I measured an average slowdown of 25%. ## How To Fix That Performance Regression? Our solution is simply to go back to builder based implementations for strict collections: we override the default view based implementations with more efficient builder based -ones. We actually and up with the same implementations as in the old collections. +ones. We actually end up with the same implementations as in the old collections. In practice these implementations are factored out in traits that can be mixed into concrete collection types. Such trait names are always prefixed with @@ -70,8 +70,8 @@ for `Seq` collections. ## Is The View Based Design Worth It? -In my previous article I explained that a drawback of the old builder based design was that, -on non strict collections (e.g. `Stream` or `View`), we had to carefully override all the +In my previous article, I explained a drawback of the old builder based design. +On non strict collections (e.g. `Stream` or `View`), we had to carefully override all the default implementations of transformation operations to make them non strict. Now it seems that the situation is just reversed: the default implementations work well @@ -86,7 +86,7 @@ by Stefan Zeiger [here](https://www.reddit.com/r/scala/comments/7g52cy/let_them_ > implementation for a strict collection type you only suffer a small performance > impact but it's still correct. -In short: implementations are **correct first** in the new design but you might want to +In short, implementations are **correct first** in the new design but you might want to override them for performance reasons on strict collections. ## Performance Comparison With 2.12’s Collections @@ -94,7 +94,7 @@ override them for performance reasons on strict collections. Talking about performance, how performant are the new collections compared to the old ones? Again, the answer depends on the type of collection, the operations and the number of elements. -My `Vector` benchmarks show a 20% speedup on average: +My `Vector` benchmarks show a 35% speedup on average: ![](/resources/img/new-collections-performance-filter.png) @@ -104,26 +104,29 @@ My `Vector` benchmarks show a 20% speedup on average: These charts show the execution time (vertically) of the `filter`, `map` and `flatMap` operations, according to the number of elements (horizontally). Note that scales are -logarithmic in both axis. The blue line shows the performance of the old `Vector`, +logarithmic in both axes. The blue line shows the performance of the old `Vector`, the green line shows the performance of the new `Vector` if it used only view based implementations, and the red line shows the actual performance of the new `Vector` (with strict optimized implementations). Benchmark source code and numbers can be found [here](https://gist.github.com/julienrf/f1cb2b062cd9783a35e2f35778959c76). Since operation implementations end up being the same, why do we get better performance -at all? Well, these numbers are specific to `Vector`, and are due to the fact that -we more agressively inlined a few critical methods. I don’t expect the new collections -to be *always* 20% faster than the old collections. However, there is no reason for +at all? Well, these numbers are specific to `Vector` and the tested operations, they +are due to the fact that +we more aggressively inlined a few critical methods. I don’t expect the new collections +to be *always* faster than the old collections. However, there is no reason for them to be slower since the execution path, when calling an operation, can be made exactly the same as in the old collections. ## Conclusion This article studied the performance of the new collections. I’ve reported that view -based operation implementations are about 25% slower than builder based implementations +based operation implementations are about 25% slower than builder based implementations, and I’ve explained how we restored builder based implementations on strict collections. +Last but not least, I’ve shown that defaulting to the view based implementations does +make sense for the sake of correctness. -I expect the new collections to be as fast or slightly faster than the previous collections. +I expect the new collections to be equally fast or slightly faster than the previous collections. Indeed, we took advantage of the rewrite to apply some more optimizations here and again. @@ -133,4 +136,4 @@ data structures. For instance, we recently a completely new implementation of immutable `Set` and `Map` based on [compressed hash-array mapped prefix-trees](https://michael.steindorfer.name/publications/oopsla15.pdf). This data structure has a smaller memory footprint than the old `HashSet` and `HashMap`, -and some operations are an order of magnitude faster. +and some operations can be an order of magnitude faster (e.g. `==` is up to 7x faster). From 0c7aba20ecccbe0d8366644e875e49f9d92f5c2d Mon Sep 17 00:00:00 2001 From: Julien Richard-Foy Date: Thu, 8 Feb 2018 10:19:40 +0100 Subject: [PATCH 3/7] Improve charts --- .../2018-02-07-collections-performance.md | 16 ++++++++-------- .../blog/new-collections-performance-filter.png | Bin 0 -> 18754 bytes .../new-collections-performance-flatMap.png | Bin 0 -> 17809 bytes .../blog/new-collections-performance-map.png | Bin 0 -> 21261 bytes .../img/new-collections-performance-filter.png | Bin 38855 -> 0 bytes .../img/new-collections-performance-flatMap.png | Bin 43174 -> 0 bytes .../img/new-collections-performance-map.png | Bin 40004 -> 0 bytes 7 files changed, 8 insertions(+), 8 deletions(-) create mode 100644 resources/img/blog/new-collections-performance-filter.png create mode 100644 resources/img/blog/new-collections-performance-flatMap.png create mode 100644 resources/img/blog/new-collections-performance-map.png delete mode 100644 resources/img/new-collections-performance-filter.png delete mode 100644 resources/img/new-collections-performance-flatMap.png delete mode 100644 resources/img/new-collections-performance-map.png diff --git a/blog/_posts/2018-02-07-collections-performance.md b/blog/_posts/2018-02-07-collections-performance.md index cbf05ee59..737d08cc4 100644 --- a/blog/_posts/2018-02-07-collections-performance.md +++ b/blog/_posts/2018-02-07-collections-performance.md @@ -96,17 +96,17 @@ Talking about performance, how performant are the new collections compared to th Again, the answer depends on the type of collection, the operations and the number of elements. My `Vector` benchmarks show a 35% speedup on average: -![](/resources/img/new-collections-performance-filter.png) +![](/resources/img/blog/new-collections-performance-filter.png) -![](/resources/img/new-collections-performance-map.png) +![](/resources/img/blog/new-collections-performance-map.png) -![](/resources/img/new-collections-performance-flatMap.png) +![](/resources/img/blog/new-collections-performance-flatMap.png) -These charts show the execution time (vertically) of the `filter`, `map` and `flatMap` -operations, according to the number of elements (horizontally). Note that scales are -logarithmic in both axes. The blue line shows the performance of the old `Vector`, -the green line shows the performance of the new `Vector` if it used only view based -implementations, and the red line shows the actual performance of the new `Vector` +These charts show the speedup factor (vertically) of the `filter`, `map` and `flatMap` +operations execution compared to the old `Vector`, for various number of elements (horizontally). +The blue line shows the old `Vector`, +the red line shows the new `Vector` if it used only view based +implementations, and the yellow line shows the actual new `Vector` (with strict optimized implementations). Benchmark source code and numbers can be found [here](https://gist.github.com/julienrf/f1cb2b062cd9783a35e2f35778959c76). diff --git a/resources/img/blog/new-collections-performance-filter.png b/resources/img/blog/new-collections-performance-filter.png new file mode 100644 index 0000000000000000000000000000000000000000..7ab2207095b2dcc8b4a46a76f2932fc89ceb2efd GIT binary patch literal 18754 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əWTLQtx^D~O^3z+my5@i!^WD|DP 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%0D=u8v~ri`C2u@6IXpE6@Hp-5iEiHP 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