mailing list of musl libc
 help / color / mirror / code / Atom feed
From: Szabolcs Nagy <nsz@port70.net>
To: Paul Zimmermann <Paul.Zimmermann@inria.fr>
Cc: Rich Felker <dalias@libc.org>, musl@lists.openwall.com
Subject: Re: [musl] Re: integration of CORE-MATH routines into Musl?
Date: Mon, 5 Sep 2022 15:08:59 +0200	[thread overview]
Message-ID: <20220905130859.GO1320090@port70.net> (raw)
In-Reply-To: <mw5yi2chn3.fsf@tomate.loria.fr>

* Paul Zimmermann <Paul.Zimmermann@inria.fr> [2022-09-05 11:09:04 +0200]:
>        Dear Rich,
> 
> > Could you summaraize briefly what you have in mind, and what tradeoffs
> > might be? Are these intended to be drop-in replacements for the
> > existing standard functions, or implementations for the "cr" versions
> > thereof? I have not followed closely the "mandatory requirement of
> > correct rounding for mathematical functions in the next revision of
> > the IEEE-754 standard" topic and how it relates to the future of C,
> > but my vague recollection was that the direction folks were leaning
> > was towards a separate set of cr*() functions or something.
> 
> the current situation is:
> 
> - IEEE 754 does not require correct rounding for mathematical functions
> 
> - indeed, the C2X standard will reserve cr_xxx names for correctly rounded
>   functions
> 
> - thus mathematical libraries will have essentially 3 choices:
> 
> 0) either provide incorrectly rounded functions as (say) exp.
>    This is the current situation.
> 
> 1) provide incorrectly rounded functions as exp, and correctly rounded
>    functions as cr_exp.
> 
> 2) or provide only exp, with correct rounding (then cr_exp could be an alias
>    for exp)
> 
> It seems that LLVM-libc will go for 2), I have no news from other libraries.
> 
> > But if
> > it's possible to do correct rounding in a way that's all-wins
> > (performance, size, quality of results) or nearly all wins (maybe
> > slightly larger?), at least for select functions, that seems very
> > interesting.
> 
> If you look at Table II from https://hal.inria.fr/hal-03721525, you see that
> for *single* precision functions (binary32), indeed that's all-wins.

when i worked on exp and log i noticed that for single prec it is
easy to do correct rounding with only minor overhead, but it required
either a bit bigger lookup table or a bit bigger polynomial vs going
for < 1 ulp error only.

a slightly bigger lookup table will not be measureable in a micro
beanchmark, but clearly will use more resources. (also measuring
against the system library is misleading: your code is static linked
while the libc is dynamic linked, -fPIC, does not have the same error
handling logic, same cflags for security hardening or whatever.
such differences can be significant when the entire math function is
about 10 cycles.)


so do we want correct rounding for a little bit of overhead?

my idea was that most users of binary32 care more about performance
than precision (if they want precision they can use binary64 with only
a small overhead on most cpus). so not doing cr was deliberate choice.

my answer changes if users start to expect cr version of math functions
in the libc, 2x code is hard to justify for minor benefits, so then
we should only have cr versions for binary32.

there are libm functions where the current code is low quality and
a fast cr implementation is strictly better, those are welcome i think.

the binary64 (and binary128) story is different (there it's more work
to get cr_ functions, in some cases like pow i don't think there is a
low latency solution as the worst case is not known). for functions
where the worst-case is known we can provide cr, if the overhead is not
too big (i think 10% overhead is acceptable in the common case and 10x
overhead for the rare half-way cases, but only if the code/rodata size
does not explode).

  reply	other threads:[~2022-09-05 13:09 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <mwv8q6ccj9.fsf@tomate.loria.fr>
2022-09-02 12:17 ` Rich Felker
2022-09-02 19:28   ` enh
2022-09-02 20:40     ` enh
2022-09-05  9:09   ` Paul Zimmermann
2022-09-05 13:08     ` Szabolcs Nagy [this message]
2022-09-05 14:39       ` Paul Zimmermann
2022-09-05 16:38         ` Szabolcs Nagy
2022-09-06 23:40     ` enh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220905130859.GO1320090@port70.net \
    --to=nsz@port70.net \
    --cc=Paul.Zimmermann@inria.fr \
    --cc=dalias@libc.org \
    --cc=musl@lists.openwall.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).