Intel® Compiler Not Compatible With glibc 2.24-9 and Newer

Reference Number : DPD200419088

Version : Intel® C++ and Fortran Compilers up to and including 17.0 and 18.0.0,  for Intel 64 only

Operating System : Linux*

Problem Description :  An unexpected NaN or other incorrect output may be seen when an application built with these Intel compilers is run on a system containing glibc version 2.24-9 and newer.

Cause : This appears to be due to the new dynamic loader in glibc doesn't preserve the values of additional registers used by a function call through __regcall calling convention or some Intel compiler library like SVML function call through a non-standard calling convention, as described at https://sourceware.org/bugzilla/show_bug.cgi?id=21236 and https://sourceware.org/bugzilla/show_bug.cgi?id=21265. It will not impact a statically linked library function call or a function call through __regcall calling convention within a single executable.

Resolution Status : This incompatibility has been fixed in Intel® compiler version 18.0 update 1 (18.0.1). For Intel compiler version 17.0 update 4 or 5 or version 18.0 initial release (18.0.0), it can be worked around by the option "-fPIC".

Workaround : It can be worked around by setting environment variable LD_BIND_NOW=1 to disable the lazy binding of dynamical linked libraries before running an application, e.g.:  "export LD_BIND_NOW=1".  

See also https://software.intel.com/articles/inconsistent-program-behavior-on-red-hat-enterprise-linux-74-if-compiled-with-intel 

For more complete information about compiler optimizations, see our Optimization Notice.