On Tue, 30 Nov 2021 23:16:20 GMT, Paul Sandoz <psan...@openjdk.org> wrote:

>> kabutz has updated the pull request incrementally with one additional commit 
>> since the last revision:
>> 
>>   Made forkOrInvoke() method protected to avoid strange compiler error
>
> src/java.base/share/classes/java/math/BigInteger.java line 1875:
> 
>> 1873:         private static final int PARALLEL_FORK_THRESHOLD = 
>> Integer.getInteger(
>> 1874:                 "java.math.BigInteger.parallelForkThreshold",
>> 1875:                 (int) 
>> Math.ceil(Math.log(Runtime.getRuntime().availableProcessors()) / 
>> Math.log(2)));
> 
> We can simplify to `32 - 
> Integer.numberOfLeadingZeros(ForkJoinPool.getCommonPoolParallelism() - 1))`.
> 
> `ForkJoinPool.getCommonPoolParallelism()` is guaranteed to return a value `> 
> 0`

`ForkJoinPool.getCommonPoolParallelism() ` cannot distinguish between 0, 1, and 
2 active processors.  In the `java.util.stream.AbstractTask` class they 
calculate the number of leaves based on this with << 2. However, there is 
always the possibility that someone launches the parallel stream inside another 
FJP, so they check for that as well. It does complicate things a bit, but at 
the same time, means we have one less environment variable. And if it becomes 
an issue (which I doubt), then we can always add it later. Will work on this a 
bit.

-------------

PR: https://git.openjdk.java.net/jdk/pull/6409

Reply via email to