Author: Bas Hamstra
Date: 14:14:18 01/12/03
I am playing with a 0x88 implementation, that is supposed to be faster than my
rotated BitBoard program. Just for fun. However I am a little disappointed about
the speed gains so far. I have learned in the past that there are a couple of
very speed critical functions:
- make/unmake
- gencaptures
- squareattacked
- SEE
So far my 0x88 make/unmake is about the same speed as in my BB program Tao. The
second function I tested was bool SquareAttacked(int Sq, int ByColor). I was a
little disappointed to see it is more than 2x slower than my rotated BitBoard
version.
rot BB 0x88
Makes/Unmakes per sec: 4237288 4.25M
GenCaptures per sec: 1915709 ?
GenCapturesChecks per sec: 1569859 ?
SquareAttacked per sec: 18181818 8M !!!
SwapValue[c1e3] per sec: 6756757 ?
GetBishopAttacks[26] per sec: 45454545 ?
Below the 0x88 function used for SquareAttacked, which for the moment is the
fastest I can think of:
bool TBoard::SquareAttacked(int To, int ByColor)
{ int n,
D,
From,
Type,
Sq,
Count = PieceCount[ByColor];
if(ByColor==WHITE && Bord[To-17] == 13) return true;
if(ByColor==WHITE && Bord[To-15] == 13) return true;
if(ByColor==BLACK && Bord[To+17] == 12) return true;
if(ByColor==BLACK && Bord[To+15] == 12) return true;
for(n=0; n<Count; n++)
{ From=PieceList[ByColor][n];
Type=Bord[From]>>1;
if(Type==PAWN) break;
if(PseudoAtt[127+To-From] & (1<<Type) )
{ if(Type==KING || Type==KNIGHT) return true;
D = Dir[127+To-From];
for(Sq=From+D; Sq!=To; Sq+=D)
if(Bord[Sq]) break;
if(Sq==To) return true;
}
}
return false;
}
All in all a little disappointing so far. Are the tiny loops *really* so
amazingly fast?
Best regards,
Bas.
This page took 0.02 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.