Hi Suminda,
as I explained back in February, I already experimented blending
Schubfach with a variant of Grisu back in 2018. Contrary to my
expectations, I observed noticeable performance drops wrt pure
Schubfach. I didn't explore any further, but I think that the more
complex control logic required by the blend makes it harder for a JIT
compiler to optimize.
Thus, I prefer to wait until my own contribution has been reviewed and
integrated (if at all) before adding complexity that might not be
beneficial in Java.
(Junekey measured that a blend *is* beneficial in C++, though. But it's
somehow hard to compare a static AOT compilation, as done in C++, and a
JIT compilation, as done on the JVM.)
Greetings
Raffaello
On 2021-05-04 18:14, Suminda Sirinath Salpitikorala Dharmasena wrote:
Hello,
I hope everything is well with you.
Due to other commitments this work has stalled.
I was planning to implement:
- fast to string conversion
- fast string parsing
- fast formatting
- fast search
- fast sort
- fast templating
- fast buffers
The code I have done so far is here: https://github.com/sirinath/moby
<https://github.com/sirinath/moby>
Wondering if someone can take this forward until I have more time in my
hand.
Suminda
On Sat, 6 Feb 2021 at 09:50, Suminda Sirinath Salpitikorala Dharmasena
<sirinath19...@gmail.com <mailto:sirinath19...@gmail.com>> wrote:
Hello,
I am working on a port of DragonBox to Java. If there is interest in
contributing this is most welcome.
Suminda
On Fri, 5 Feb 2021 at 21:51, Raffaello Giulietti
<raffaello.giulie...@gmail.com
<mailto:raffaello.giulie...@gmail.com>> wrote:
Hello,
as a reminder, a Java implementation of Schubfach [1] intended to
replace the current slow and expensive OpenJDK
(Double|Float)::toString
algorithm has been discussed, presented and contributed to this
mailing
list in several posts. The last implementation is available in
pre-Skara
webrev form, as referenced in [2]. On my laptop hardware, the
speedup
factor is 17.7x wrt OpenJDK.
Recently, Alexander Bolz translated Schubfach to C++ for the
purpose of
comparing the performance of several bin2dec floating-point numbers
algorithms [3].
In the meantime, Junekey Jeon implemented and perfected his own
Dragonbox in C++, a new algorithm based on Schubfach [4]. From
[5]: "In
addition to the core idea of Schubfach, Dragonbox utilizes some
Grisu-like ideas to minimize the number of expensive 128-bit ×
64-bit
multiplications, at the cost of having more branches and
divisions-by-constants."
In the C++ ecosystem, Schubfach has been the fastest known
algorithm
before being gently pushed aside by Dragonbox, as can be seen in
the
graphs in [3].
While developing Schubfach back in 2018, I experimented myself with
blending core Schubfach with my own earlier algorithm similar to
Grisu.
However, probably due to uncontrollable JIT compilation behavior, I
could not observe any benefit. On the contrary, I measured
performance
drops probably because of the added complexity, which is public
enemy
nr. 1 for JIT compilers. Therefore, I opted for the simpler current
design that seemed more suitable for (the then 2018 version of) C2.
I hope this can somehow revive this community's interest and
confidence
toward Schubfach to definitely supplant the current expensive
(Double|Float)::toString algorithm.
Greetings
Raffaello
----
[1]
https://drive.google.com/open?id=1luHhyQF9zKlM8yJ1nebU0OgVYhfC6CBN
<https://drive.google.com/open?id=1luHhyQF9zKlM8yJ1nebU0OgVYhfC6CBN>
[2]
https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-March/065297.html
<https://mail.openjdk.java.net/pipermail/core-libs-dev/2020-March/065297.html>
[3] https://github.com/abolz/Drachennest
<https://github.com/abolz/Drachennest>
[4] https://github.com/jk-jeon/dragonbox
<https://github.com/jk-jeon/dragonbox>
[5]
https://github.com/jk-jeon/dragonbox/blob/master/other_files/Dragonbox.pdf
<https://github.com/jk-jeon/dragonbox/blob/master/other_files/Dragonbox.pdf>