Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: speed question

Author: Uri Blass

Date: 01:14:49 02/21/03

Go up one level in this thread


On February 20, 2003 at 13:51:37, Filip Tvrzsky wrote:

>On February 20, 2003 at 12:49:39, Uri Blass wrote:
>
>>
>>I guess that you mean
>>#define gen_dat_i_mpromote (gen_dat[i].m & (63 << 16))
>>
>>I guess that the laternative that I tried
>>
>>#define to(x) (((x)>>8)&255) was also bad
>>and better was
>>#define to(x) (((x)&255<<8)
>>
>>I guess that in that case I need to change some more code
>>
>>For example
>>
>>I have today some cases when I have
>>switch(m.bits)
>>case 1:
>>case 17:
>>...
>>
>>in that case I need to say case 1<<24 and in order not to have an ugly code
>>I need to have more constants for 2^24,2^24*17,...
>>
>>I can use
>>enum
>>{
>> bits1=16777216
>> bits17=
>>...
>>}
>>
>>Uri
>
>#define to(x) (((x)>>8)&255) is definitely worse than #define to(x)
>(((x)&255<<8) because in the first case the shifting is done in run-time and in
>the second during compilation. Note also that the result of both macros is
>different.

Yes

This is an important note.

I did not do the mistake of assuming that they are the same but I see that I
have problems.

I cannot use my usual macros after that translate

for example

I had if (piece(m.b.to))=PAWN) in my code
I cannot transalate it to
if (piece(to(m))==PAWN)  because to(m) does not get something between 0 and 63
after the change and it seem that I cannot do it faster in this case.

There are number of cases when I can do it faster for example if I check if the
rank of to is the first rank but I also need special definitions for it.

I guess that I will not  change the defintion of to(m) to the better definition
and for special cases I can add other definitions like
#define rankto(i) i&(1<<12+1<<13+1<<14)

#define rankto1 0
#define rankto2 1<<12
#define filetoa 0
#define filetob 1<<9

Here the numbers are not magiv numbers because we usually use numbers in chess
but I still does not like these definitions.


I think that I will do changing my data structure in some steps when the first
step is the slow definition and using the slow definition for to(m) because
changing too much at the same time is a sure way to get bugs.

It means that the first step may make Movei slower and I need only to check that
I did not do errors and only later it will become faster.

I do not plan to add evaluation before I do it because it will do that work even
harder.

If I want to change my data structure then it is better to do it earlier even if
it means smaller improvement in the near future relative to changing the
evaluation.

Uri



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.