public inbox for glibc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "wbrana at gmail dot com" <sourceware-bugzilla@sourceware.org>
To: glibc-bugs@sourceware.org
Subject: [Bug math/14412] Removal of sysdeps/x86_64/fpu/s_sincos.S causes regressions
Date: Mon, 29 Apr 2013 12:32:00 -0000	[thread overview]
Message-ID: <bug-14412-131-jUG7cgUbWm@http.sourceware.org/bugzilla/> (raw)
In-Reply-To: <bug-14412-131@http.sourceware.org/bugzilla/>

http://sourceware.org/bugzilla/show_bug.cgi?id=14412

--- Comment #28 from wbrana at gmail dot com 2013-04-29 12:32:34 UTC ---
according to http://sourceware.org/bugzilla/show_bug.cgi?id=13658#c2
fast functions can be used when source operand is in certain range.
Slow functions should be used only outside interval.

"The FPTAN, FSIN, FCOS, and FSINCOS instructions set the C2 flag to 1 to
indicate that the source operand is beyond the allowable range of ±2^63 and
clear the C2 flag if the source operand is within the allowable range."

So, outside the interval [-2^63,+2^63] ("allowable range"), these instructions
must not be used (or they can be used, but with a fallback if the C2 flag is
set to 1). But note that the glibc implementation is more accurate, even with
(very probably) correct rounding, so that it is better to use it anyway.

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
>From glibc-bugs-return-18506-listarch-glibc-bugs=sources.redhat.com@sourceware.org Mon Apr 29 13:06:43 2013
Return-Path: <glibc-bugs-return-18506-listarch-glibc-bugs=sources.redhat.com@sourceware.org>
Delivered-To: listarch-glibc-bugs@sources.redhat.com
Received: (qmail 25697 invoked by alias); 29 Apr 2013 13:06:43 -0000
Mailing-List: contact glibc-bugs-help@sourceware.org; run by ezmlm
Precedence: bulk
List-Id: <glibc-bugs.sourceware.org>
List-Subscribe: <mailto:glibc-bugs-subscribe@sourceware.org>
List-Post: <mailto:glibc-bugs@sourceware.org>
List-Help: <mailto:glibc-bugs-help@sourceware.org>, <http://sourceware.org/lists.html#faqs>
Sender: glibc-bugs-owner@sourceware.org
Delivered-To: mailing list glibc-bugs@sourceware.org
Received: (qmail 25638 invoked by uid 48); 29 Apr 2013 13:06:40 -0000
From: "siddhesh at redhat dot com" <sourceware-bugzilla@sourceware.org>
To: glibc-bugs@sourceware.org
Subject: [Bug math/14412] Removal of sysdeps/x86_64/fpu/s_sincos.S causes regressions
Date: Mon, 29 Apr 2013 13:06:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: glibc
X-Bugzilla-Component: math
X-Bugzilla-Keywords:
X-Bugzilla-Severity: enhancement
X-Bugzilla-Who: siddhesh at redhat dot com
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P2
X-Bugzilla-Assigned-To: unassigned at sourceware dot org
X-Bugzilla-Target-Milestone: 2.18
X-Bugzilla-Changed-Fields:
Message-ID: <bug-14412-131-nxzZNBviPL@http.sourceware.org/bugzilla/>
In-Reply-To: <bug-14412-131@http.sourceware.org/bugzilla/>
References: <bug-14412-131@http.sourceware.org/bugzilla/>
X-Bugzilla-URL: http://sourceware.org/bugzilla/
Auto-Submitted: auto-generated
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
MIME-Version: 1.0
X-SW-Source: 2013-04/txt/msg00213.txt.bz2
Content-length: 2297

http://sourceware.org/bugzilla/show_bug.cgi?id=14412

--- Comment #29 from Siddhesh Poyarekar <siddhesh at redhat dot com> 2013-04-29 13:06:40 UTC ---
(In reply to comment #28)
> according to http://sourceware.org/bugzilla/show_bug.cgi?id=13658#c2
> fast functions can be used when source operand is in certain range.
> Slow functions should be used only outside interval.
> 
> "The FPTAN, FSIN, FCOS, and FSINCOS instructions set the C2 flag to 1 to
> indicate that the source operand is beyond the allowable range of ±2^63 and
> clear the C2 flag if the source operand is within the allowable range."
> 
> So, outside the interval [-2^63,+2^63] ("allowable range"), these instructions
> must not be used (or they can be used, but with a fallback if the C2 flag is
> set to 1). But note that the glibc implementation is more accurate, even with
> (very probably) correct rounding, so that it is better to use it anyway.

The problem is not just about range reduction.  fsincos is not always accurate
within the allowable range either.

(In reply to comment #27)
> With all that said, I still question the cause of the huge performance drop.
> The only cost of the correct sin/cos versus the incorrect one should be
> argument reduction, which should be a no-op if the argument is already in the
> range [-pi,pi] or so and cheap even a good ways outside of that range...

I considered the possibility of keeping the assembly default and then falling
into the default implementation if the exception flags indicate that the result
was not accurate enough, but that doesn't catch all cases.  In fact, the
limited internal precision of PI (66-bit mantissa) guarantees that there will
be cases where fsincos thinks it has hit the target, but it hasn't.

So until there's a way to flag inaccurate results reliably, I think the
__sincos_finite way is the best option.  There is definitely some scope to look
at the implementation of __sin and __cos functions, or even figure out some
clever way to get results faster in sincos than just calling __sin and __cos,
but that will need more work.

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
>From glibc-bugs-return-18507-listarch-glibc-bugs=sources.redhat.com@sourceware.org Mon Apr 29 13:15:07 2013
Return-Path: <glibc-bugs-return-18507-listarch-glibc-bugs=sources.redhat.com@sourceware.org>
Delivered-To: listarch-glibc-bugs@sources.redhat.com
Received: (qmail 1197 invoked by alias); 29 Apr 2013 13:15:06 -0000
Mailing-List: contact glibc-bugs-help@sourceware.org; run by ezmlm
Precedence: bulk
List-Id: <glibc-bugs.sourceware.org>
List-Subscribe: <mailto:glibc-bugs-subscribe@sourceware.org>
List-Post: <mailto:glibc-bugs@sourceware.org>
List-Help: <mailto:glibc-bugs-help@sourceware.org>, <http://sourceware.org/lists.html#faqs>
Sender: glibc-bugs-owner@sourceware.org
Delivered-To: mailing list glibc-bugs@sourceware.org
Received: (qmail 1103 invoked by uid 48); 29 Apr 2013 13:15:03 -0000
From: "markus at trippelsdorf dot de" <sourceware-bugzilla@sourceware.org>
To: glibc-bugs@sourceware.org
Subject: [Bug math/14412] Removal of sysdeps/x86_64/fpu/s_sincos.S causes regressions
Date: Mon, 29 Apr 2013 13:15:00 -0000
X-Bugzilla-Reason: CC
X-Bugzilla-Type: changed
X-Bugzilla-Watch-Reason: None
X-Bugzilla-Product: glibc
X-Bugzilla-Component: math
X-Bugzilla-Keywords:
X-Bugzilla-Severity: enhancement
X-Bugzilla-Who: markus at trippelsdorf dot de
X-Bugzilla-Status: NEW
X-Bugzilla-Priority: P2
X-Bugzilla-Assigned-To: unassigned at sourceware dot org
X-Bugzilla-Target-Milestone: 2.18
X-Bugzilla-Changed-Fields:
Message-ID: <bug-14412-131-qEuXGKJEsJ@http.sourceware.org/bugzilla/>
In-Reply-To: <bug-14412-131@http.sourceware.org/bugzilla/>
References: <bug-14412-131@http.sourceware.org/bugzilla/>
X-Bugzilla-URL: http://sourceware.org/bugzilla/
Auto-Submitted: auto-generated
Content-Type: text/plain; charset="UTF-8"
MIME-Version: 1.0
X-SW-Source: 2013-04/txt/msg00214.txt.bz2
Content-length: 1565

http://sourceware.org/bugzilla/show_bug.cgi?id\x14412

--- Comment #30 from Markus Trippelsdorf <markus at trippelsdorf dot de> 2013-04-29 13:15:02 UTC ---
(In reply to comment #25)
> I've posted a patch to implement __sincos_finite:
>
> http://sourceware.org/ml/libc-alpha/2013-04/msg00720.html
>
> This should allow you to compile with -ffast-math or -ffinite-math-only to use
> this fast implementation of sincos.

Your patch doesn't work for me. I've re-build glibc and then
re-compiled poppler with "-ffinite-math-only". But I still
only see calls to __sin and __cos with "perf top".

The poppler code in question can be found here:
http://cgit.freedesktop.org/poppler/poppler/tree/poppler/Gfx.cc#n3112

When I just add the following file to glibc:

markus@x4 glibc % cat sysdeps/x86_64/fpu/s_sincos.S
#include <machine/asm.h>

        .text
ENTRY (__sincos)

        movsd   %xmm0, -8(%rsp)
        fldl    -8(%rsp)
        fsincos
        fnstsw  %ax
        testl   $0x400,%eax
        jnz     1f
        fstpl   (%rsi)
        fstpl   (%rdi)

        retq

1:      fldpi
        fadd    %st(0)
        fxch    %st(1)
2:      fprem1
        fnstsw  %ax
        testl   $0x400,%eax
        jnz     2b
        fstp    %st(1)
        fsincos
        fstpl   (%rsi)
        fstpl   (%rdi)

        retq
END (__sincos)
weak_alias (__sincos,sincos)

poppler gets fast again and uses __sincos.

--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.


  parent reply	other threads:[~2013-04-29 12:32 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-26 21:08 [Bug math/14412] New: Removal of sysdeps/x86_64/fpu/s_sincos.S causes pdf rendering time regression markus at trippelsdorf dot de
2012-07-26 21:09 ` [Bug math/14412] " markus at trippelsdorf dot de
2012-07-26 21:14 ` markus at trippelsdorf dot de
2012-07-27  6:44 ` aj at suse dot de
2012-07-27  7:18 ` markus at trippelsdorf dot de
2012-07-27 12:33 ` markus at trippelsdorf dot de
2012-07-28 22:15 ` bugdal at aerifal dot cx
2012-08-03  3:51 ` carlos_odonell at mentor dot com
2012-08-09 10:14 ` markus at trippelsdorf dot de
2012-08-19  9:31 ` markus at trippelsdorf dot de
2012-08-19  9:37 ` [Bug math/14412] Removal of sysdeps/x86_64/fpu/s_sincos.S causes regressions markus at trippelsdorf dot de
2012-12-03 22:13 ` davem at davemloft dot net
2012-12-04  0:00 ` carlos at systemhalted dot org
2013-04-25 21:48 ` wbrana at gmail dot com
2013-04-25 23:35 ` carlos at redhat dot com
2013-04-25 23:58 ` bugdal at aerifal dot cx
2013-04-26  0:14 ` bugdal at aerifal dot cx
2013-04-26  2:55 ` siddhesh at redhat dot com
2013-04-26  3:08 ` bugdal at aerifal dot cx
2013-04-26  3:50 ` siddhesh at redhat dot com
2013-04-26  6:29 ` markus at trippelsdorf dot de
2013-04-26  6:40 ` jakub at redhat dot com
2013-04-26 10:00 ` siddhesh at redhat dot com
2013-04-26 11:31 ` joseph at codesourcery dot com
2013-04-26 11:33 ` joseph at codesourcery dot com
2013-04-26 11:42 ` siddhesh at redhat dot com
2013-04-26 13:52 ` bugdal at aerifal dot cx
2013-04-26 13:55 ` bugdal at aerifal dot cx
2013-04-26 15:07 ` joseph at codesourcery dot com
2013-04-26 15:20 ` wbrana at gmail dot com
2013-04-29 10:29 ` siddhesh at redhat dot com
2013-04-29 10:50 ` wbrana at gmail dot com
2013-04-29 11:55 ` bugdal at aerifal dot cx
2013-04-29 12:32 ` wbrana at gmail dot com [this message]
2013-04-29 13:21   ` Ondřej Bílka
2013-04-29 13:21 ` neleai at seznam dot cz
2013-04-29 13:28 ` bugdal at aerifal dot cx
2013-04-29 14:04   ` Ondřej Bílka
2013-04-29 13:32 ` bugdal at aerifal dot cx
2013-04-29 13:36 ` wbrana at gmail dot com
2013-04-29 13:44 ` siddhesh at redhat dot com
2013-04-29 13:51 ` bugdal at aerifal dot cx
2013-04-29 14:04 ` neleai at seznam dot cz
2013-04-29 14:19 ` siddhesh at redhat dot com
2013-04-29 14:29 ` markus at trippelsdorf dot de
2013-04-29 14:48 ` bugdal at aerifal dot cx
2013-04-29 16:29   ` Ondřej Bílka
2013-04-29 16:29 ` neleai at seznam dot cz
2013-04-29 17:30 ` bugdal at aerifal dot cx
2013-04-29 20:58 ` joseph at codesourcery dot com
2013-04-30  5:41 ` siddhesh at redhat dot com
2013-04-30 21:37 ` bugdal at aerifal dot cx
2013-05-01 22:25 ` bugdal at aerifal dot cx
2013-07-16 20:08 ` nshmyrev at yandex dot ru
2013-09-07  6:55 ` carlos at redhat dot com
2014-02-06 18:31 ` jsm28 at gcc dot gnu.org
2014-06-17 18:55 ` fweimer at redhat dot com

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=bug-14412-131-jUG7cgUbWm@http.sourceware.org/bugzilla/ \
    --to=sourceware-bugzilla@sourceware.org \
    --cc=glibc-bugs@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).