public inbox for newlib@sourceware.org
 help / color / mirror / Atom feed
From: Joel Sherrill <joel@rtems.org>
To: Paul Zimmermann <Paul.Zimmermann@inria.fr>
Cc: Newlib <newlib@sourceware.org>,
	christoph.lauter@christoph-lauter.org,  sibid@uvic.ca,
	Jean-Michel.Muller@ens-lyon.fr
Subject: Re: correctly rounded mathematical functions
Date: Tue, 4 Jan 2022 09:23:01 -0600	[thread overview]
Message-ID: <CAF9ehCU9V6Z0P9Vuz7E8JKV=zNRScPs2Li5LmX1ajqUZQxDydw@mail.gmail.com> (raw)
In-Reply-To: <mwo84romx5.fsf@tomate.loria.fr>

On Tue, Jan 4, 2022 at 3:44 AM Paul Zimmermann <Paul.Zimmermann@inria.fr> wrote:
>
>        Dear Joel,
>
> thank you for your answer.
>
> > From: Joel Sherrill <joel@rtems.org>
> > Date: Mon, 3 Jan 2022 14:41:20 -0600
> >
> > On Mon, Jan 3, 2022 at 6:58 AM Paul Zimmermann <Paul.Zimmermann@inria.fr> wrote:
> > >
> > >       Dear Newlib developers,
> > >
> > > the current C working draft [1, p392] has reserved names for correctly
> > > rounded functions (cr_exp, cr_log, cr_sin, ...).
> > >
> > > We propose to provide such correctly rounded implementations
> > > for the three IEEE formats (binary32, binary64, binary128) and the
> > > "extended double" format (long double on x86_64).
> > >
> > > These implementations will be correctly rounded for all rounding modes,
> > > for example one could do the following to emulate interval arithmetic:
> > >
> > >    fesetround (FE_DOWNWARD);
> > >    y_lo = cr_exp (x_lo);
> > >    fesetround (FE_UPWARD);
> > >    y_hi = cr_exp (x_hi);
> > >
> > > Users who want a fast implementation will call the exp/log/sin/... functions,
> > > users who want a correctly rounded function and thus reproducible results
> > > (whatever the hardware, compiler or operating system) will use the
> > > cr_exp/cr_log/cr_sin/... functions. Our goal is nevertheless to get the
> > > best performance possible.
> > >
> > > Our objective is to provide open-source implementations that can be integrated
> > > in the major mathematical libraries (GNU libc, Intel Math Library, AMD Libm,
> > > Redhat Newlib, OpenLibm, Musl, llvm-libc, CUDA, ROCm).
> > >
> > > Are developers of Newlib interested by such functions?
> > > If so, we could discuss what would be the requirements for integration in
> > > Newlib in terms of license, table size, allowed operations.
> >
> > Speaking from the RTEMS perspective, we are very interested
> > in the addition of more POSIX and C Standard Library methods.
> > We have been having GSoC students add them where possible
> > for a few years.
>
> great!
>
> > The license has to be permissive and should have no advertising
> > although based on COPYING.NEWLIB, some must have a BSD
> > advertising clause still. Possibly those need review.
> >
> > https://sourceware.org/git/?p=newlib-cygwin.git;a=blob_plain;f=COPYING.NEWLIB;hb=HEAD
>
> since some Newlib files are already under LGPL v3+, for example
> include/cgen/basic-ops.h, I guess the current
> license we have (LGPL v3+) should be ok for Newlib.

I think those files are all under a linux/ or rdos/ subdirectory and do not
impact any other target unless they use iconvdata/. I grep'ed and didn't
see anything else. Jeff or Corrina should speak up and provide a
definitive answer.

> > As long as the method's footprint only impacts applications that use
> > it, there shouldn't be a huge concern on size but the target domain is
> > mostly smaller single process, no-MMU embedded systems. That is
> > ignoring Cygwin which has fewer constraints.  If you end up adding
> > megabytes, that's going to be bad in general.
>
> we'll try to have reasonable table sizes. And maybe for some functions
> we'll provide several implementations, with different table sizes.

Great! It's hard to comment on size without something to complain about. :)

> > > We have started to work on two functions (cbrt and acos), for which we
> > > provide presumably correctly rounded implementations (up to the knowledge
> > > of hard-to-round cases) [2].
> >
> > Great! What's the size profile on those?
>
> the binary32 cbrt code is quite small:
>
> -rw-r--r-- 1 zimmerma caramba   2766 Dec 23 14:27 cbrtf.c
>
> the binary128 code is larger:
>
> -rw-r--r-- 1 zimmerma caramba  38450 Dec 22 18:06 cbrtf128-v2.patch

How is binary128 implemented on target CPUs without native support?
Is this something GCC will include soft methods for?

> > What's the minimum compiler or C language version to build these?
>
> good question. So far we work with current gcc versions (for example 11.2.0)
> but did not exercise with older version. We don't use advanced C feature,
> except the "glibc patches" use some GNU libc macros (for example mul_split
> to split the product of two doubles into a+b, fast_two_sum, ...).

I didn't expect anything too fancy. Will they compile with -std=c99, c11? newlib
generally provides all methods but the header file guards protect the prototype
visibility.

glibc specific macros can be reimplemented. I assume that's going to be an
issue on other non-glibc libraries.  Hopefully that's not too hard to deal with.

--joel

> Best regards,
> Paul

  reply	other threads:[~2022-01-04 15:23 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-03 12:57 Paul Zimmermann
2022-01-03 20:41 ` Joel Sherrill
2022-01-04  9:44   ` Paul Zimmermann
2022-01-04 15:23     ` Joel Sherrill [this message]
2022-01-04 15:44       ` Paul Zimmermann
2022-01-04 18:01       ` Jeff Johnston
2022-01-05 10:33         ` Paul Zimmermann
2022-01-04 18:50       ` Keith Packard
2022-01-05 11:39         ` Paul Zimmermann
2022-01-05 19:00           ` Joel Sherrill
2022-01-06 10:12             ` Paul Zimmermann
2022-01-06 14:51               ` Joel Sherrill
2022-01-06 15:33                 ` Paul Zimmermann
2022-01-05 19:43           ` Keith Packard

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='CAF9ehCU9V6Z0P9Vuz7E8JKV=zNRScPs2Li5LmX1ajqUZQxDydw@mail.gmail.com' \
    --to=joel@rtems.org \
    --cc=Jean-Michel.Muller@ens-lyon.fr \
    --cc=Paul.Zimmermann@inria.fr \
    --cc=christoph.lauter@christoph-lauter.org \
    --cc=newlib@sourceware.org \
    --cc=sibid@uvic.ca \
    /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.
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 read-only IMAP folder(s) and NNTP newsgroup(s).