Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: 0x88 compared to rot BB

Author: Tony Werten

Date: 14:41:50 01/12/03

Go up one level in this thread


On January 12, 2003 at 17:14:18, Bas Hamstra wrote:

>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?

There are some voices that say that a too tight loop will slow you down because
of too much dependences.

Anyway, this code will not slow you down. Generate captures is relatively
expensive. By the time I generate captures I have an attackboard ready, so it
becomes much cheaper.

Tony

>
>Best regards,
>Bas.



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.