[cfe-dev] Complex arithmetic ignores -ffast-math after clang r219557, serious performance regressions
Richard Campbell
rlcamp.pdx at gmail.com
Thu Jul 16 17:26:43 PDT 2015
Hal,
SVN now seems to be respecting the -ffast-math flag in the way we desire without Matthijs’ temporary fix. I didn’t see any further traffic about this on the cfe-dev list - was there a discussion elsewhere? Did it get fixed by accident as part of some other change, and we should worry about whether it will come up again?
Richard
> On Jul 2, 2015, at 2:45 PM, Hal Finkel <hfinkel at anl.gov> wrote:
>
> Hi Richard,
>
> Thanks for bringing this to my attention.
>
> -Hal
>
> ----- Original Message -----
>> From: "Richard Campbell" <rlcamp.pdx at gmail.com>
>> To: hfinkel at anl.gov
>> Sent: Wednesday, July 1, 2015 12:13:50 PM
>> Subject: Fwd: Complex arithmetic ignores -ffast-math after clang r219557, serious performance regressions
>>
>> Hal,
>>
>>
>> I posted this in the cfe-dev mailing list about a week ago and didn’t
>> get any replies. Can you comment on this or recommend another more
>> ideal place to discuss it?
>>
>>
>> Richard Campbell
>>
>>
>>
>>
>> Begin forwarded message:
>>
>> From: Richard Campbell < rlcamp.pdx at gmail.com >
>>
>> Subject: Complex arithmetic ignores -ffast-math after clang r219557,
>> serious performance regressions
>>
>> Date: June 25, 2015 at 11:54:10 AM PDT
>>
>> To: cfe-dev at cs.uiuc.edu
>>
>>
>>
>>
>> After building with clang 3.7svn recently, I saw a huge speed hit
>> across much of our HPC and floating point DSP code. I looked at the
>> asm output and it's riddled with calls to ___mulsc3, which is never
>> inlined (preventing lots of other optimizations) and which includes
>> a bunch of C99 Annex G-recommended branch conditions for range
>> checks and whatnot. One of the purposes of -ffast-math has always
>> been to disable these sort of checks, trusting the developer to
>> ensure that they can't happen or will be handled upstream.
>>
>>
>> Explicitly writing out the real and imaginary component math in one
>> of my critical sections was enough to confirm that the problem lies
>> here and not elsewhere. However, doing this throughout all of our
>> code would be prohibitive, and of course greatly reduces the
>> readability of the code and presumably the ability for future
>> compilers to optimize it in a way that I haven’t though of yet.
>>
>>
>> The relevant patch discussion in the mailing list is here:
>> http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20141006/116248.html
>> and includes a comment from hfinkel also requesting that the
>> libcalls be skipped in fast-math mode. From what I can see there was
>> no followup on this.
>>
>>
>> At the bare minimum I think these checks should be disabled within
>> mulsc3 when ffast-math or the relevant subflag is enabled, and
>> preferably that the library calls be skipped entirely as before, so
>> that other compiler optimizations aren't prevented.
>>
>
> --
> Hal Finkel
> Assistant Computational Scientist
> Leadership Computing Facility
> Argonne National Laboratory
More information about the cfe-dev
mailing list