dmd 1.053 and 2.037 release

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Sat Dec 12 06:54:26 PST 2009


Bill Baxter wrote:
> On Fri, Dec 11, 2009 at 9:34 PM, Don <nospam at nospam.com> wrote:
>> Walter Bright wrote:
>>> Don wrote:
>>>> Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on my
>>>> Pentium M, but it shouldn't have.
>>>> The problem is what DMD does to the "uninitialized assignments".
>>>>
>>>> float x;
>>>>
>>>> gets changed into
>>>>
>>>> float x = double.snan;
>>>>
>>>> and is implemented with
>>>> fld float.snan; fstp x;
>>>>
>>>> The FLD is triggering the snan. They should be changed into mov EAX,
>>>> reinterpret_cast<int>(float.snan); mov x, EAX;
>>> Sounds like a good idea.
>>>
>>>> There's another reason for doing this. On Pentium 4, x87 NaNs are
>>>> incredibly slow. More than 250 cycles!!! On AMD and on Pentium 4 SSE2, they
>>>> are the same as any other value (about 0.5 cycles). Yet another reason to
>>>> hate the P4. But still, this is such a horrific performance killer that we
>>>> ought to avoid it.
>>> I had no idea that was the case!
>> I only just discovered it. Every documentation I've seen just said "These
>> [cycle count] values are for normal operands. NaNs, infinities, and
>> denormals may increase cycle counts considerably." I found a blog of someone
>> who'd actually measured it.
> 
> I experienced it in a fluid sim I was working on in grad school.  NaNs
> were creeping in and performance was terrible.  I thought it was two
> problems till I got rid of the NaNs and suddenly performance was ok
> too.
> 
> --bb

Almost same here. Program was amazingly slow until I figured there were 
NaNs involved. It would be great if we could eliminate that behavior.

Andrei


More information about the Digitalmars-d-announce mailing list