RFR: 8284493: Improve computeNextExponential tail performance and accuracy [v21]
Chris Hennick
duke at openjdk.org
Mon Jun 12 18:30:03 UTC 2023
On Mon, 15 May 2023 15:51:02 GMT, Chris Hennick <duke at openjdk.org> wrote:
>> This PR improves both the worst-case performance of `nextExponential` and `nextGaussian` and the distribution of output at the tails. It fixes the following imperfections:
>>
>> * Repeatedly adding DoubleZigguratTables.exponentialX0 to extra causes a rounding error to accumulate at the tail of the distribution (probably starting around `2*exponentialX0 == 0x1.e46eff20739afp3 ~ 15.1`); this PR fixes that by tracking the multiple of exponentialX0 as a long. (This distortion is worst when `x > 0x1.0p56` since in that case, a rounding error means `extra + x == extra`.
>> * Reduces several equations using `Math.fma`. (This will almost certainly improve performance, and may or may not improve output distribution.)
>> * Uses the newly-extracted `computeWinsorizedNextExponential` function to prevent `nextGaussian` from going into the `nextExponential` tail twice.
>
> Chris Hennick has updated the pull request with a new target base due to a merge or a rebase. The pull request now contains 20 commits:
>
> - Merge remote-tracking branch 'upstream/master' into patch-1
> - Merge remote-tracking branch 'origin/patch-1' into patch-1
> - Merge branch 'master' of https://git.openjdk.org/jdk into patch-1
> - Merge branch 'master' of https://git.openjdk.org/jdk into patch-1
> - Merge branch 'master' into patch-1
> - Update copyright date in RandomNext.java
> - Update copyright date in RandomGeneratorNext.java
> - Update copyright date in RandomGeneratorExponentialGaussian.java
> - Update copyright date in RandomSupport.java
> - Optimize: move some code out of the fast path
> - ... and 10 more: https://git.openjdk.org/jdk/compare/97b2ca3d...1b5656d7
@turbanoff @rgiulietti Keep open
-------------
PR Comment: https://git.openjdk.org/jdk/pull/8131#issuecomment-1587859196
More information about the core-libs-dev
mailing list