Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: TSCP with bitboards

Author: Robert Hyatt

Date: 08:46:53 06/03/03

Go up one level in this thread


On June 02, 2003 at 02:04:23, Russell Reagan wrote:

>On June 01, 2003 at 23:41:58, Jean Efpraxiadis wrote:
>
>>If the location of each piece of the board was stored in a array and updated in
>>make and unmake move, so that the move generator could use these locations
>>instead of taking the board square by square, that would be fine. I am not
>>looking for a bitboard implementation of TSCP. I doubt someone took the trouble
>>to modify TSCP that way. Anyway, a version of TSCP with hash tables would do
>>still do it for me. The rest I am willing to do myself if I have to.
>
>I didn't mean to redo the entire thing in bitboards. I think it would be much
>simpler and easier to use two bitboards as "piece lists" and work with those, as
>opposed to working with an array and updating that (which gets tricky if you're
>not careful.
>
>Since I was bored and tired of working on my own program for today, I made a few
>changes to TSCP to support piece lists in this way, using bitboards. The basic
>idea is that I replaced the loop over the whole board:
>
>for (i = 0; i < 64; i++) {
>    // code goes here...
>}

Most don't do this even without bitboards.  The easy approach is to have
an array of 32 elements, with the first 16 containing the square numbers
for white pieces and pawns, and the last 16 the same for black.  As pieces
are removed, the two lists become shorter, and the length of the loop is
dropped from 64 to 16 to start with, and lower as pieces are removed.





>
>With this (hope you understand how bitboards work):
>
>/* Bitboard occupied[2]; */
>
>Bitboard pieces = occupied[side];
>while (pieces) {
>    i = SomeBit(pieces); // Get the index of some bit (doesn't matter which)
>    pieces ^= MASK(i);   // Clear the bit
>    // code goes here...
>}
>
>You can find the code that I made changes to at
>http://home.attbi.com/~rreagan/tscp_bb.zip
>
>Any changes I made are commented in one of the following ways:
>
>/* BEGIN BITBOARD STUFF */
>// ...
>/* END BITBOARD STUFF */
>
>/* BITBOARD STUFF ADDED */
>/* STUFF REMOVED */
>
>I changed every loop over the entire board in board.c and eval.c and it runs 13%
>faster now (according to nps and time, using the 'bench' command). Maybe an
>array based piece list would be faster, but this seems easier, at least to me.
>
>I also got different node counts when I ran the 'bench' command with the new
>version, so there might be a bug somewhere, but as far as testing the speed gain
>I think it's fairly accurate.



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.