RFR: 8196106: Support nested infinite or recursive flat mapped streams [v7]
Paul Sandoz
psandoz at openjdk.org
Fri Apr 12 22:02:41 UTC 2024
On Fri, 12 Apr 2024 14:53:01 GMT, Viktor Klang <vklang at openjdk.org> wrote:
>> This PR implements Gatherer-inspired encoding of `flatMap` that shows that it is both competitive performance-wise as well as improve correctness.
>>
>> Below is the performance of `Stream::flatMap` (for reference types):
>>
>> Before this PR (on my MacBook, aarch64):
>>
>> Non-short-circuiting:
>>
>> Benchmark (size) Mode Cnt Score Error Units
>> FlatMap.par_array 10 thrpt 12 257582,480 ? 31360,242 ops/s
>> FlatMap.par_array 100 thrpt 12 55202,015 ? 14011,668 ops/s
>> FlatMap.par_array 1000 thrpt 12 6546,252 ? 3675,764 ops/s
>> FlatMap.par_doublestream 10 thrpt 12 267423,410 ? 37338,089 ops/s
>> FlatMap.par_doublestream 100 thrpt 12 27140,703 ? 4979,878 ops/s
>> FlatMap.par_doublestream 1000 thrpt 12 2978,178 ? 1890,250 ops/s
>> FlatMap.par_intstream 10 thrpt 12 268194,530 ? 37295,092 ops/s
>> FlatMap.par_intstream 100 thrpt 12 30897,034 ? 5388,245 ops/s
>> FlatMap.par_intstream 1000 thrpt 12 3969,043 ? 2494,641 ops/s
>> FlatMap.par_longstream 10 thrpt 12 279756,861 ? 19519,497 ops/s
>> FlatMap.par_longstream 100 thrpt 12 45733,955 ? 18385,144 ops/s
>> FlatMap.par_longstream 1000 thrpt 12 5115,615 ? 4147,237 ops/s
>> FlatMap.seq_array 10 thrpt 12 2937192,934 ? 58605,583 ops/s
>> FlatMap.seq_array 100 thrpt 12 41859,462 ? 139,021 ops/s
>> FlatMap.seq_array 1000 thrpt 12 442,677 ? 1,041 ops/s
>> FlatMap.seq_doublestream 10 thrpt 12 4972651,093 ? 35997,267 ops/s
>> FlatMap.seq_doublestream 100 thrpt 12 99265,005 ? 193,497 ops/s
>> FlatMap.seq_doublestream 1000 thrpt 12 1037,030 ? 3,254 ops/s
>> FlatMap.seq_intstream 10 thrpt 12 5133751,888 ? 23516,294 ops/s
>> FlatMap.seq_intstream 100 thrpt 12 145166,206 ? 399,263 ops/s
>> FlatMap.seq_intstream 1000 thrpt 12 1565,004 ? 3,207 ops/s
>> FlatMap.seq_longstream 10 thrpt 12 5047029,363 ? 24742,300 ops/s
>> FlatMap.seq_longstream 100 thrpt 12 233225,307 ? 7162,604 ops/s
>> FlatMap.seq_longstream 1000 thrpt 12 2999,926 ? 9,945 ops/s
>>
>> // Short-circuiting:
>>
>> Benchmark (size) Mode Cnt Score Error Units
>> FlatMap.par_iterate_double 10 thrpt 12 46336,834 ? 6803,751 ops/s
>> FlatMap.par_iterate_double 100 ...
>
> Viktor Klang has updated the pull request incrementally with one additional commit since the last revision:
>
> Adding additional, short-circuit-specific, cases to the FlatMap benchmark
Very nice work.
-------------
Marked as reviewed by psandoz (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/18625#pullrequestreview-1998504550
More information about the core-libs-dev
mailing list