Possible performance issue with gfortran? denormalized numbers
Tim Prince
n8tm@aol.com
Tue Feb 2 20:15:00 GMT 2016
On 2/2/2016 2:30 PM, Toon Moene wrote:
> On 02/01/2016 12:55 PM, Jose Miguel Reynolds Barredo wrote:
>
>> Hi everyone,
>>
>> I was developing a tridiagonal block solver and I found a performance
>> issue that is ingriguing me: doing operations with numbers in the
>> denormalized range is around ten times slower than regular numbers
>> (https://en.wikipedia.org/wiki/Denormal_number). As an example, I
>> builded a very simple code:
>
> The reason operations with denormal numbers are ten times slower has -
> unfortunately, as otherwise we could do something about it - nothing to
> do with the compiler or the run time library (of *any* language).
>
> Denormal number operations are handled by the operating system, because
> it is too costly to allocate silicon to handle them on the CPU. So when
> the CPU detects a denormal number, it traps. This trap is caught by the
> OS, which dispatches the computation to a routine written for the
> purpose. The trap and the software implementation of the handling of the
> operation involving a denormal are costly, as you observed.
>
> There is nothing the compiler writers (*any* compiler writers, not just
> GCC's) can do about this.
>
You seem to have been unwilling to spend an additional minute reading
the remainder of those Wikipedia posts.
gcc/gfortran bury the initialization of the CPU to abrupt underflow in
the -ffast-math option. ifort makes it a default. This removes the
performance problem, with the consequence of inaccurate results when
underflow is involved.
Intel CPUs released from Sandy Bridge on have eliminated the penalty for
addition/subtraction involving subnormals, largely on account of the
widespread use of gradual underflow with gcc. A significant penalty for
multiplication remains. One might question whether a CPU from over 5
years ago need be your primary target for new project development.
SPARC CPUs historically had a similar problem with underflow.
Intel Itanium CPUs had an extremely severe problem with partial
underflow as well as with true underflow, so operation in gradual
underflow mode was impractical.
--
Tim Prince
More information about the Gcc-help
mailing list