|Re: [eigen] (General question) Floating point: why are 'inf' and 'nan' slow?|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] (General question) Floating point: why are 'inf' and 'nan' slow?
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Wed, 23 Sep 2009 10:47:24 -0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type; bh=4FDqV+PPwWXd0Ut3gF76eUFaCZUFyE8oAz3lfcDZ9EI=; b=gJbH3KOGT/mCZN9zey19JqjgJHssyPKvWjJquzRy3soqzTgqO1TvnChy5BKurVTMpC me9BA7TmKhJn1nJXlZcCeWZw81ETmv54vBQmEg6bVZsq8M8UpDy4ZLTvxojkGMcARLDI 9NZ5EQdeizcXGkDZI/xhi0bZAGlBMLO7g1/v4=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type; b=Dg2QAGdUvEQ3sU1ch3dJu7m6+T9oR0eh8/UnP9Z6nU0kkqSlmCQk3ceNT78vtuMJvm gmnZj1SDbTB6h8OZ5tpKjtFnwsxgrYTf1FAbD6KhkwLuWOXjqu3rpGsP4B5JdgpLv5uQ qWCNsxeFzIgK0fAsFaBgOxTaNaQSQlQkDBp7o=
-mfpmath=sse -msse2 -DEIGEN_DONT_VECTORIZE
does fix the problem (I pass -DEIGEN_DONT_VECTORIZE because I already
knew that SIMD instructions like mulps avoids the problem; now I can
see that indeed scalar instructions like mulss also avoid the
So, the problem is a non-issue on SSE2-capable systems (SSE2, because
SSE doesn't support double).
But what about non-SSE2-capable systems, or simply linux distros who
need to build a generic i686 binary package.... are they out of luck?
The big design decision that I am facing now is this: floating point
numbers claim to be able to represent special values such as "inf" and
"nan"; ideally we would play this game, returning "inf" when that is
the natural result given the user's input; but if that must be 100x
slower than normal even before the user has any chance of checking if
that's happening, then in practice we can't do that and we need to
explicitly avoid generating "inf" and "nan" values even when that
would be the natural result given the user's input.
2009/9/23 Rohit Garg <rpg.314@xxxxxxxxx>:
> fp exceptions are handled in software. Is it 32 bit or 64 bit? If it
> is 32 bit, have you enabled -mfpmath=sse in your compiler flags?
> On Wed, Sep 23, 2009 at 6:21 AM, Benoit Jacob <jacob.benoit.1@xxxxxxxxx> wrote:
>> Sorry for adding to the currently already high traffic here.
>> Here, on linux / x86, my programs run 100x slower when the
>> floating-point values are 'inf' or 'nan'.
>> Only scalar code is affected, SSE code is not affected.
>> I haven't enabled floating-point exception signals. I don't have a FP
>> signal handler. Just any basic c++ program.
>> Can this be "fixed"? How?
>> Otherwise, I really need to make sure that solve() methods avoid
>> producing such special values when no solution exists --- otherwise
>> they take much longer to return.
>> Thanks for your help,
> Rohit Garg
> Senior Undergraduate
> Department of Physics
> Indian Institute of Technology