> On 3 Mar 2016, at 10:26, Tagir F. Valeev <amae...@gmail.com> wrote: > > Hello! > > Please review and sponsor this small change: > > https://bugs.openjdk.java.net/browse/JDK-8151123 > http://cr.openjdk.java.net/~tvaleev/webrev/8151123/r1/ > > User-supplied mapper function is unnecessarily called twice on each > accumulation event in summingDouble and averagingDouble. This function > could be computationally intensive which may degrade the performance > up to 2x. The patch addresses this issue. >
+1 An embarrassing oversight missed in review, well spotted. I can push for you. — I find it annoying we have to maintain the compensated and uncompensated sum for the edge case of the compensated sum being NaN and the simple sum being infinite. I measured this a while back i was surprised it did not appear to make much difference when loops are unrolled and vectored instructions are used, but i did perform an in-depth investigation. https://bugs.openjdk.java.net/browse/JDK-8035561 <https://bugs.openjdk.java.net/browse/JDK-8035561> Paul. > Here's also simple JMH benchmark which illustrates the performance > gain. > http://cr.openjdk.java.net/~tvaleev/webrev/8151123/jmh/ > > Original: > > Benchmark (n) Mode Cnt Score Error Units > AveragingTest.averageDistance 10 avgt 30 0,571 ± 0,049 us/op > AveragingTest.averageDistance 1000 avgt 30 58,573 ± 1,194 us/op > AveragingTest.averageDistance 100000 avgt 30 5854,428 ± 71,242 us/op > > Patched: > > Benchmark (n) Mode Cnt Score Error Units > AveragingTest.averageDistance 10 avgt 30 0,336 ± 0,002 us/op > AveragingTest.averageDistance 1000 avgt 30 31,932 ± 0,367 us/op > AveragingTest.averageDistance 100000 avgt 30 3794,541 ± 21,599 us/op > > With best regards, > Tagir Valeev. >