Author: Uri Blass
Date: 08:38:10 09/19/04
Go up one level in this thread
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
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.