[cctbxbb] Trapping NaN or not trapping NaN
pdadams at lbl.gov
Sun Apr 10 20:07:04 PDT 2016
Okay, this sounds like a reasonable solution under the circumstances. Do you anticipate any problems with removing the trap? I only have the vaguest recollection of why it was in there, other than to make sure the code didn’t have errors that created NaN. I’m hoping that compilers may have moved on in the last few years...
> On Apr 9, 2016, at 4:38 PM, Luc Bourhis <luc_j_bourhis at mac.com> wrote:
> Richard and I have been hammering at our build system and code to try to solve several crashes on OS X with Xcode 7.3. Several of them came from the fact that we trap NaN whereas Xcode 7.3 aggressive optimisations produce code that may create a NaN but still deliver the correct final result. A trivial example came from cctbx/xray/conversions.h. We have
> if (f_sq > 0) f = std::sqrt(f_sq);
> else f = 0;
> With the version of clang shipping with Xcode 7.3, both branches are evaluated in parallel before selecting the result based on the test f_sq > 0. This is done so as not to stall the pipeline and this can result in much faster code indeed. But that means that every time f_sq < 0, a NaN will be produced, and in the context of our tests, this means we crash.
> Richard and I avoided the elephant in the room, stop to trap NaN, and as a result came with uglier and uglier fixes. Moreover, we are now at the mercy of the compiler applying such an optimisation to another file at the next update of Xcode, which would then force us to fix the compilation of said file in the relevant SConscript. It’s a loosing game.
> Thus I reckon that at least on OS X, we should stop trapping NaN.
> That will leave us with the true clang regression for which I will try to submit reduced cases to the clang bugzilla.
> Best wishes,
> cctbxbb mailing list
> cctbxbb at phenix-online.org
Division Director, Molecular Biophysics & Integrated Bioimaging, Lawrence Berkeley Lab
Division Deputy for Biosciences, Advanced Light Source, Lawrence Berkeley Lab
Adjunct Professor, Department of Bioengineering, U.C. Berkeley
Vice President for Technology, the Joint BioEnergy Institute
Laboratory Research Manager, ENIGMA Science Focus Area
Building 33, Room 347
Building 80, Room 247
Building 978, Room 4126
Tel: 1-510-486-4225, Fax: 1-510-486-5909
Lawrence Berkeley Laboratory
1 Cyclotron Road
Berkeley, CA 94720, USA.
Executive Assistant: Louise Benvenue [ LBenvenue at lbl.gov ][ 1-510-495-2506 ]
More information about the cctbxbb