RFR: 8196106: Support nested infinite or recursive flat mapped streams [v6]
Viktor Klang
vklang at openjdk.org
Fri Apr 12 07:55:12 UTC 2024
> 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:
>
> Benchmark (size) Mode Cnt Score Error Units
> FlatMap.par_array 10 thrpt 12 294008,937 ? 54369,110 ops/s
> FlatMap.par_array 100 thrpt 12 62411,229 ? 14868,119 ops/s
> FlatMap.par_array 1000 thrpt 12 8263,821 ? 452,622 ops/s
> FlatMap.par_iterate 10 thrpt 12 23029,978 ? 4274,449 ops/s
> FlatMap.par_iterate 100 thrpt 12 10532,907 ? 321,694 ops/s
> FlatMap.par_iterate 1000 thrpt 12 981,571 ? 135,270 ops/s
> FlatMap.seq_array 10 thrpt 12 2955648,495 ? 32539,142 ops/s
> FlatMap.seq_array 100 thrpt 12 41851,009 ? 377,546 ops/s
> FlatMap.seq_array 1000 thrpt 12 1740,281 ? 1229,974 ops/s
> FlatMap.seq_iterate 10 thrpt 12 321727,690 ? 5149,356 ops/s
> FlatMap.seq_iterate 100 thrpt 12 8437,198 ? 56,635 ops/s
> FlatMap.seq_iterate 1000 thrpt 12 76,994 ? 0,965 ops/s
>
>
> After this PR:
>
>
> Benchmark (size) Mode Cnt Score Error Units
> FlatMap.par_array 10 thrpt 12 283350,051 ? 35567,223 ops/s
> FlatMap.par_array 100 thrpt 12 53846,906 ? 19241,913 ops/s
> FlatMap.par_array 1000 thrpt 12 8230,909 ? 156,362 ops/s
> FlatMap.par_iterate 10 thrpt 12 26328,500 ? 5411,401 ops/s
> FlatMap.par_iterate 100 thrpt 12 10470,862 ? 249,991 ops/s
> FlatMap.par_iterate 1000 thrpt 12 986,511 ? 224,050 ops/s
> FlatMap.seq_array 10 thrpt 12 5654826,565 ? 27317,453 ops/s
> FlatMap.seq_array 100 thrpt 12 187929,786 ? 542,787 ops/s
> FlatMap.seq_array 1000 thrpt 12 2385,346 ? 9,827 ops/s
> FlatMap.seq_iterate 10 thrpt 12 812722,403 ? 160500,399 ops/s
> FlatMap.seq_iterate 100 thrpt 12 13542,472 ? 118,769 ops/s
> FlatMap.seq_iterate 1000 thrpt 12 157,056 ? 1,814 ops/s
>
>
> For streams of size 100k, the following numbers are interesting:
>
> Before this PR:
>
> Benchmark (size) Mode Cnt Score Error Units
> FlatMap.par_array 100000 thrpt 12 0,325 ? 0,004 ops/s
> FlatMap.par_iterate 100000 thrpt 12 0,106 ? 0,008 ops/s
> FlatMap.seq_array 100000 thrpt 12 0,173 ? 0,003 ops/s
> FlatMap.seq_iterate 100...
Viktor Klang has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
Fixes 8196106 by reencoding flatMap as sa Gatherer-inspired operation
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/18625/files
- new: https://git.openjdk.org/jdk/pull/18625/files/bedbab85..a3f1e518
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=18625&range=05
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=18625&range=04-05
Stats: 165 lines in 4 files changed: 39 ins; 77 del; 49 mod
Patch: https://git.openjdk.org/jdk/pull/18625.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/18625/head:pull/18625
PR: https://git.openjdk.org/jdk/pull/18625
More information about the core-libs-dev
mailing list