public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Patrick McGehearty <patrick.mcgehearty@oracle.com>
To: Joseph Myers <joseph@codesourcery.com>
Cc: libc-alpha@sourceware.org
Subject: Re: [PATCH] improves exp() and expf() performance on Sparc.
Date: Wed, 06 Sep 2017 20:34:00 -0000	[thread overview]
Message-ID: <ef59f618-90ee-f0c0-460f-38c427c01643@oracle.com> (raw)
In-Reply-To: <alpine.DEB.2.20.1709012305290.26585@digraph.polyomino.org.uk>

On 9/1/2017 6:13 PM, Joseph Myers wrote:
> You're defining ifuncs for exp and expf (rather than __ieee754_exp,
> __exp_finite etc. as on x86_64).  But you're not doing anything to stop
> the w_exp_compat / w_expf_compat wrappers from being built that also
> define exp and expf, so I don't see how that can work without ending up
> with multiple definitions of exp and expf; I'd expect you to need to
> override the wrappers with empty files in such a case of a function
> implementation with all the error handling integrated.
The sysdeps/ieee754/dbl-64/w_exp_compat.c
declares __exp (double x)
and then adds:
hidden_def (__exp)
weak_alias (__exp, exp)

I believe the weak_alias in w_exp_compat.c is overriden by the
sparc_libm_ifunc in e_exp-generic.c.  At least, I am not seeing any
link time errors about double exp declarations and I am seeing the new
code being executed (as proved by the speed and accuracy changes).

>
> I'm also concerned that you have local matherr handling which is not
> compatible with all the cases in __kernel_standard (which are not well
> tested).  If you need to have your own integrated error handling for
> performance reasons, matherr handling should be bug-compatible with the
> existing code, for both overflow and underflow.  (Or define a new symbol
> version, make the existing exp and expf into compat symbols for SPARC and
> then your new version only needs to handle errno setting, not matherr.)
>
As for error handling, I believe the extra level of indirection on
return from exp provided by the sysdeps/ieee754/dbl-64/w_exp_compat.c
routine is an anti-performance design. Every normal return from e_exp
requires an extra level of indirection and several tests/branches that
should be bypassed unless an error is detected. The e_exp code already
checks for underflow/overflow/NAN/etc. Those unnecessary tests for the
non-exceptional cases add overhead for the most frequent uses of exp().

On the other hand, once an error occurs that triggers__set_err_exp,
extra overhead is not a significant performance issue. I will add a
call __kernel_standard in that routine when _LIB_VERSION is not _IEEE_
or _POSIX_. As you point out, that will provide more consistent error
handling behavior. I'll make that change in my next exp patch
submission.

- patrick

  reply	other threads:[~2017-09-06 20:34 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-01 22:59 Patrick McGehearty
2017-09-01 23:14 ` Joseph Myers
2017-09-06 20:34   ` Patrick McGehearty [this message]
2017-09-06 21:01     ` Joseph Myers
2017-09-07 20:42       ` Patrick McGehearty
2017-09-07 21:05         ` Joseph Myers
2017-09-07 23:53           ` Patrick McGehearty
2017-09-04 11:43 ` Szabolcs Nagy
2017-09-06 20:31   ` Patrick McGehearty
2017-09-11 18:50 Wilco Dijkstra

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=ef59f618-90ee-f0c0-460f-38c427c01643@oracle.com \
    --to=patrick.mcgehearty@oracle.com \
    --cc=joseph@codesourcery.com \
    --cc=libc-alpha@sourceware.org \
    /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).