Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: a question about speed

Author: Uri Blass

Date: 10:39:13 01/03/03

Go up one level in this thread


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();

Not exactly because in one case I need side=0 and in another case I need side=1


I think that I will simply do one function for white and one function for black.

I already have
#define rank0(i) ((i)>>3)

Does the computer do faster if rank0(to)==0 and not if to<=7?

I assumed that if to<=7 is faster(only one comparison when to>>3=0 has one
comparison and one shift).

I used rank0(i) in case that it is not 0 so I can avoid things like
if (i>=8&&i<=15).

When I think about it a smart compiler should translate
if (i>=8&&i<=15) to if ((i>>3)==1) but I do not know if they do it.

Uri



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.