Computer Chess Club Archives




Subject: Precomputed move information

Author: Sune Fischer

Date: 05:25:42 07/02/02


I've read that GNU chess used to have a precomputed list of moves, and it would
use a lookup in that list rather than generate the moves.

I don't like that idea, but if instead one created a large table to contain
information needed when _making_ the moves, then that would probably yield a
good speedup.

For instance if using rotated bitboards, then at every move one needs to update
the rotated bitboards which requires lookups in tables, masking and additional
hassle to remove a piece if the move is a capture.
Some of that is has got to be very cache inefficient.

Now, with a precomputed makemove table, we could have these delta keys ready for
one single mask, and we need but one lookup to get all the required delta-keys.

Downside: the size of such a table is quite large:
64*64*6*6*2*sizeof(MoveInfo); // from,to,pawn-king,null-queen,color
(enpassent and promotions are special cases)
I get a total of about 14 MB, which is a little high I think.

Assume this gives a boots of overall 2%, is that worth 14 MBs?
Probably not, however it does actually simplify the code since fewer lines are
needed in making moves.
I would no doubt use it had it been 1 MB, but 14 MB that is a lot IMO.

I couldn't find anything via the search engine about this (though I'm sure it
has been discussed), so has anyone done something like that and are willing to
share their experiences?


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