RFR: 8154387 - Parallel unordered Stream.limit() tries to collect 128 elements even if limit is less
Tagir F. Valeev
amaembo at gmail.com
Tue Apr 19 16:28:26 UTC 2016
Hello!
webrev is updated in-place (just added parentheses):
http://cr.openjdk.java.net/~tvaleev/webrev/8154387/r1/
Updated benchmark source and results are available here:
http://cr.openjdk.java.net/~tvaleev/webrev/8154387/jmh/
In general I observe that for low-Q filter (x -> true) the results are
also improved as well as for
-Djava.util.concurrent.ForkJoinPool.common.parallelism=1. My tests
were performed on 4-core machine (no hyperthreading), thus default
parallelism is 4.
The LEAF_TARGET version does not change the results significantly. If
you feel that using LEAF_TARGET is more suitable I can update webrev
correspondingly.
Here's detailed summary benchmark report.
HighQ test (i -> i.isProbablePrime(10))
=======================================
> Sequential
seqLimit 2 avgt 30 34,106 ± 0,164 us/op
seqLimit 20 avgt 30 362,209 ± 1,321 us/op
seqLimit 200 avgt 30 3622,753 ± 11,087 us/op
seqLimit 2000 avgt 30 36188,932 ± 302,942 us/op
== parallelism=4 ==
> Parallel ordered
parLimit 2 avgt 30 107,273 ± 0,437 us/op
parLimit 20 avgt 30 924,058 ± 8,642 us/op
parLimit 200 avgt 30 8692,190 ± 151,165 us/op
parLimit 2000 avgt 30 41029,029 ± 2189,838 us/op
> Parallel unordered -- original
parUnorderedLimit 2 avgt 30 2479,964 ± 18,314 us/op
parUnorderedLimit 20 avgt 30 2471,107 ± 19,684 us/op
parUnorderedLimit 200 avgt 30 4512,631 ± 44,871 us/op
parUnorderedLimit 2000 avgt 30 12164,026 ± 422,714 us/op
> Parallel unordered -- commonPoolParallelism
parUnorderedLimit 2 avgt 30 39,121 ± 0,122 us/op
parUnorderedLimit 20 avgt 30 264,978 ± 0,192 us/op
parUnorderedLimit 200 avgt 30 2504,541 ± 5,618 us/op
parUnorderedLimit 2000 avgt 30 12167,302 ± 452,540 us/op
> Parallel unordered -- LEAF_TARGET
parUnorderedLimit 2 avgt 30 39,116 ± 0,184 us/op
parUnorderedLimit 20 avgt 30 264,382 ± 0,773 us/op
parUnorderedLimit 200 avgt 30 2528,825 ± 19,141 us/op
parUnorderedLimit 2000 avgt 30 11867,199 ± 370,857 us/op
== parallelism=1 ==
> Parallel ordered
parLimit 2 avgt 30 78,868 ± 0,295 us/op
parLimit 20 avgt 30 763,807 ± 5,107 us/op
parLimit 200 avgt 30 7416,516 ± 39,541 us/op
parLimit 2000 avgt 30 73061,036 ± 188,994 us/op
> Parallel unordered -- original
parUnorderedLimit 2 avgt 30 2395,410 ± 10,143 us/op
parUnorderedLimit 20 avgt 30 2398,281 ± 12,045 us/op
parUnorderedLimit 200 avgt 30 4536,042 ± 55,675 us/op
parUnorderedLimit 2000 avgt 30 21166,422 ± 89,930 us/op
> Parallel unordered -- commonPoolParallelism
parUnorderedLimit 2 avgt 30 59,474 ± 0,362 us/op
parUnorderedLimit 20 avgt 30 403,132 ± 2,648 us/op
parUnorderedLimit 200 avgt 30 4533,470 ± 63,535 us/op
parUnorderedLimit 2000 avgt 30 21085,084 ± 81,648 us/op
> Parallel unordered -- LEAF_TARGET
parUnorderedLimit 2 avgt 30 58,607 ± 0,342 us/op
parUnorderedLimit 20 avgt 30 403,514 ± 2,774 us/op
parUnorderedLimit 200 avgt 30 4586,126 ± 62,480 us/op
parUnorderedLimit 2000 avgt 30 21272,978 ± 62,313 us/op
LowQ test (i -> true)
=====================
> Sequential
seqLimit 2 avgt 30 0,133 ± 0,001 us/op
seqLimit 20 avgt 30 0,375 ± 0,015 us/op
seqLimit 200 avgt 30 2,941 ± 0,006 us/op
seqLimit 2000 avgt 30 28,756 ± 0,066 us/op
== parallelism=4 ==
> Parallel ordered
parLimit 2 avgt 30 16,259 ± 0,249 us/op
parLimit 20 avgt 30 23,623 ± 0,205 us/op
parLimit 200 avgt 30 29,456 ± 0,202 us/op
parLimit 2000 avgt 30 65,344 ± 0,345 us/op
> Parallel unordered -- original
parUnorderedLimit 2 avgt 30 8,693 ± 0,137 us/op
parUnorderedLimit 20 avgt 30 8,987 ± 0,091 us/op
parUnorderedLimit 200 avgt 30 15,304 ± 0,073 us/op
parUnorderedLimit 2000 avgt 30 31,848 ± 0,360 us/op
> Parallel unordered -- commonPoolParallelism
parUnorderedLimit 2 avgt 30 3,814 ± 0,034 us/op
parUnorderedLimit 20 avgt 30 4,663 ± 0,028 us/op
parUnorderedLimit 200 avgt 30 12,337 ± 0,390 us/op
parUnorderedLimit 2000 avgt 30 31,886 ± 0,358 us/op
> Parallel unordered -- LEAF_TARGET
parUnorderedLimit 2 avgt 30 3,785 ± 0,042 us/op
parUnorderedLimit 20 avgt 30 4,652 ± 0,029 us/op
parUnorderedLimit 200 avgt 30 12,749 ± 0,028 us/op
parUnorderedLimit 2000 avgt 30 31,561 ± 0,362 us/op
== parallelism=1 ==
> Parallel ordered
parLimit 2 avgt 30 6,618 ± 0,079 us/op
parLimit 20 avgt 30 9,280 ± 0,197 us/op
parLimit 200 avgt 30 15,549 ± 0,864 us/op
parLimit 2000 avgt 30 64,075 ± 0,358 us/op
> Parallel unordered -- original
parUnorderedLimit 2 avgt 30 10,946 ± 0,238 us/op
parUnorderedLimit 20 avgt 30 10,875 ± 0,175 us/op
parUnorderedLimit 200 avgt 30 9,304 ± 0,159 us/op
parUnorderedLimit 2000 avgt 30 42,164 ± 0,883 us/op
> Parallel unordered -- commonPoolParallelism
parUnorderedLimit 2 avgt 30 1,482 ± 0,080 us/op
parUnorderedLimit 20 avgt 30 3,515 ± 0,060 us/op
parUnorderedLimit 200 avgt 30 9,174 ± 0,078 us/op
parUnorderedLimit 2000 avgt 30 43,048 ± 0,997 us/op
> Parallel unordered -- LEAF_TARGET
parUnorderedLimit 2 avgt 30 2,281 ± 0,544 us/op
parUnorderedLimit 20 avgt 30 3,412 ± 0,031 us/op
parUnorderedLimit 200 avgt 30 9,109 ± 0,119 us/op
parUnorderedLimit 2000 avgt 30 41,742 ± 0,878 us/op
With best regards,
Tagir Valeev.
More information about the core-libs-dev
mailing list