Author: Sean Empey
Date: 15:35:49 09/19/04
Go up one level in this thread
On September 19, 2004 at 11:38:10, Uri Blass wrote:
>On September 19, 2004 at 10:36:20, Robert Hyatt wrote:
>
>>On September 18, 2004 at 14:16:03, Stuart Cracraft wrote:
>>
>>>On September 17, 2004 at 20:52:19, Robert Hyatt wrote:
>>>
>>>>On September 16, 2004 at 21:20:50, Uri Blass wrote:
>>>>
>>>>>What is faster doing a loop on the 1's of a bitboard or doing a loop on array of
>>>>>integers
>>>>>
>>>>>I simply consider to change my knight move generator to bitboards
>>>>>
>>>>>Today I have array
>>>>>int knightmove[64][8] and the question is if getting
>>>>>knightmove[c3][0],...knightmove[c3][7] is faster or slower than getting the same
>>>>>squares by calculating the 1's of knightoption[c3] in order to get the squares
>>>>>that the knight can go.
>>>>>
>>>>>I also consider to have bitboard knightcapturewhite[64] knightcaptureblack[64]
>>>>>and knightquietmoves[64] that are going to be updated incrementally after every
>>>>>move and the question is what is the price of this in speed.
>>>>>
>>>>>Do people who use bitboards have experience with it?
>>>>>
>>>>>Uri
>>>>
>>>>
>>>>You are asking the wrong question. Bitboards are simply a way of doing
>>>>_everything_ differently from array-based board representations. There are
>>>>gains and losses (of course you should ignore the naysayers like you-know-who as
>>>>bitboards can and do work fine). But when you start to mix things, the only way
>>>>to see if it is faster is to simply implement and test. That's what I did with
>>>>rotated bitboards when I first thought of the idea. It seemed like a good idea,
>>>>but there were issues to overcome... It takes time and testing...
>>>
>>>If one doesn't want to go full bitboard for everything,
>>>then partial bitboard for evaluation...
>>>
>>>Speed of evaluation without the hassle of rotation...
>>>
>>>Stuart
>>
>>Then you have to convert mailbox to bitboard at _every_ q-search position. That
>>won't be fast...
>
>In my case I have no mailbox and my board is simply 0-63
>
>I know that bitboard do not beat mailbox in generating moves but I hoped that it
>may beat my method of generating moves.
>
>Here is my function for generating knight moves(assuming the knight is not
>pinned and I check if the knight is pinned first by my pin array that is updated
>after every move so there is no illegal move)
>
>color(target) is defined to be info[target]>>3;
>
>static void generatesimpleknights(int square)
>{
> int i,target;
> for (i=0;i<knightnumber[square];i++)
> {
> target=knightmove[square][i];
> if (info[target]==EMPTA)
> gen_quietnopawns(square,target);
> else
> if (color(target)!=side)
> gen_push(square,target);
> }
>}
>
>for generating moves in bishop direction I have today functions like the
>following function
>leftup[x]=x-9 when x-9 is in bishop direction relative to x.
>rightdown[x]=x+9 or -1 and is defined in the same way
>
>
>static void generate7(int square)
>{
> int target;
> target=leftup[square];
> while ((target!=-1)&&(info[target]==EMPTA))
> {
> gen_quietnopawns(square,target);
> target=leftup[target];
> }
> if ((target!=-1)&& (color(target)!=side))
> gen_push(square,target);
> target=rightdown[square];
> while ((target!=-1)&&(info[target]==EMPTA))
> {
> gen_quietnopawns(square,target);
> target=rightdown[target];
> }
> if ((target!=-1)&& (color(target)!=side))
> gen_push(square,target);
>
>}
>
>I wonder if I can have things faster
pre-compute your moves and generating knight moves would be extremely fast.
something like this for generating them.
/*
* Function: GenWNM
* Purpose: Generates suedo legal moves for white knights
* Usage: N/A
* Version: See ExtVerInfo
*/
int GenWNM( BoardInfo* cBoard, int sq ) {
int *v, u, i = 0;
v = KNPreGen[1][sq];
u = *v++;
do {
if( cBoard->Color[u] != WHITE ) {
AddMove( cBoard, sq, u, 0 ), i++;
}
} while( (u=*v++) != STOP );
return i;
}
Hope it helps you so if at all
-Sean
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.