bug-gnubg
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Bug-gnubg] Possible error in SSE sigmoid calculation


From: Øystein Schønning-Johansen
Subject: Re: [Bug-gnubg] Possible error in SSE sigmoid calculation
Date: Tue, 20 Dec 2011 21:18:02 +0100

On Tue, Dec 20, 2011 at 8:41 PM, Philippe Michel <address@hidden> wrote:
In lib/sigmoid.h, there is some code to calculate quickly exp(x) including the statement :
i = (int)x1;

In lib/neuralnetsse.c, the corresponding SSE code is :
i.i  = _mm_cvtps_epi32( x1 );

Shouldn't that be _mm_cvttps_epi32( x1 ) ? The cast-to-int truncates, it doesn't round, does it ?

Hmmm... interesting. I missed that! It seems like you are perfectly right.
 
Amazingly (to me, at least), it apparently makes very little difference in the final net outputs but the current code seems erroneous.

I really tested and tested and tested the code before I committed it to the repository. I ran thousands of test for output value, and did not find any significant difference. I checked borderline cases, and and of array cases. I compared benchmarks and found that my sigmoid implementation marked exactly the same as the original implementation. I felt pretty safe my implementation gave the same values. Are there some values that's really off or was my tests too sloppy?

It would be rather funny to see if it's possible to find a position where gnubg makes different moves with the two sigmoid implementations.

-Øystein


reply via email to

[Prev in Thread] Current Thread [Next in Thread]