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