Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: a question about speed

Author: Robert Hyatt

Date: 17:42:40 01/03/03

Go up one level in this thread


On January 03, 2003 at 20:23:59, Matt Taylor wrote:

>On January 03, 2003 at 13:21:40, Robert Hyatt wrote:
>
>>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.
>
>Or simplify:
>if ((to >> 3) == (7 & side)) gen_promote();
>
>The two expressions get computed in parallel and you end up with 1 branch.
>
>-Matt


That won't work.  7&side won't give you what you are thinking.  You will get
zero or one, not zero or seven...




This page took 0 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.