Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: a question about speed

Author: Robert Hyatt

Date: 10:21:40 01/03/03

Go up one level in this thread


On January 03, 2003 at 12:03:45, Uri Blass wrote:

>code B is slightly faster than code A.
>I know that side can get only 0 or 1(something that the compiler does not know)
>and B is eqvivalent to A if you assume that side gets only 0 or 1.
>
>Is it possible to write a third code that will be even faster than B?
>
>I think that if the compiler can know that side is or 0 or 1 it can do B even
>faster.
>
>code A:
>
>if (side==LIGHT)
>{
>  if (to>=56)
>  {
>    gen_promote(from,to,bits);
>    return;
>  }
>}
>else
>{
>  if (to<=7)
>  {
>    gen_promote(from,to,bits);
>    return;
>  }
>}
>
>code B:
>if ((to+side*(63-2*to))>=56)
>{
>  gen_promote(from,to,bits);
>  return;
>}
>
>Uri


Why not something like this:

rank=to>>3;  (now we know the rank and only care if it is zero or seven, and
it can't be zero for white or seven for black so side to move is not important).

So, you end up with one line:


if (to>>3==0 || to>>3==7) gen_promote();

The compiler will only compute to>>3 once, although you end up with two
branches.
However with the newer pentium's clever "pattern matching branch prediction" it
will
tend to predict correctly most of the time since the above is not commonly going
to be
happening...

I would always try the shortest/simplest approach first to let the compiler and
the hardware
try to do the right thing.



This page took 0.01 seconds to execute

Last modified: Thu, 15 Apr 21 08:11:13 -0700

Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.