Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: For Bruce or anyone else who might know what he means...

Author: Scott Gasch

Date: 17:46:07 11/20/01

Go up one level in this thread


On November 20, 2001 at 20:28:34, Ren Wu wrote:

>On November 20, 2001 at 20:06:34, Dann Corbit wrote:
>
>>Since you can do the same sort of move generation with bitboards, what is the
>>advantage of using Move Tables then?
>
>For move generation only, i think this can be faster. (i never tried bitboard
>approach myself, so this is just a guess)
>
>This approach has been discovered long before rotated bitmap, i was extremely
>impressed when i first saw it in gnu chess in 1992. Even now, i have high
>respect to guy who come up this idea. Sorry i forgot his name.
>
>>Is it extremely easy to understand and debug?
>
>Yes, the code is much simpler, very pretty in my opinion. There is a small txt
>file that come with gnu chess 3.0 by the orignal person who come up with this
>idea. of course you can take a look at the code itself too.
>
>This approach make more sense when back in old 286/386 days. For current
>hardware, relay on memory tables seems not a good idea anymore.
>
>Ren.

As Bruce pointed during CCT3, move tables can be used for other things than just
moves.  For example, if you use PSQT at all, it might be useful to have the
delta PSQT for [KING][A8][A7] handy in MakeMove.  Likewise the delta hash key
value.

The former saves work in eval if your tree is not very very long.  That is,
assume you have 16 pieces average on the board at each leaf node in the tree.
Then you have a total of leaf_node_count * 16 PSQT lookups.  If you do it
incrementally at MakeMove you have edge_count * 1 PSQT lookups.

The latter saves you one 64 bit xor operation per move.  That is, instead of
doing:

   pos->i64Sig ^= i64Key[KING][A8];  // lift the king
   pos->pSquare[A8] = EMPTY;
   pos->i64Sig ^= i64Key[KING][A7];  // place the king
   pos->pSquare[A7] = KING;

you can do:

   pos->i64Sig ^= g_sMoveGen[KING][A8][A7].i64HashDelta;
   pos->pSquare[A8] = EMPTY;





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.