Author: Bas Hamstra
Date: 14:42:03 01/12/03
Go up one level in this thread
On January 12, 2003 at 17:18:17, Vincent Diepeveen wrote:
>On January 12, 2003 at 17:14:18, Bas Hamstra wrote:
>you need indepth processor knowledge if you try to get a concept to work fast
>which needs a lot of work to get fast.
I have a book about x86 optimation. "Inner loops" I believe it is called. It
crushes some well accepted C-myths. It also states that with the later
processors it becomes more and more difficult to outsmart the compilers with
asm.
>this whereas bitboards is all optimized very well for the concept itself.
>you work against assembly language stuff in bitboards.
>so you better figure out how a processor works before writing a move generator.
>
>the improtant problems to solve
> - limit the number of branches
> - arrays are allowed to use but try to minimize them
> - do not mix 8 bits with 32 bits. perhaps faster on k6 and even k7, but
> not always. and not at p4.
>the square attacked with incremental bitboards is a simple AND.
>see gnuchess 4.0 how to do it (not later raped versions of it).
But then you imply an incrementally updated attacktable. I doubt that is going
to break the nps record, which is what I intended to do :-) I wanted to start
with a very fast piece-square searcher, good move sorting, checks in qsearch and
extensive pawn strucure analysis (in pawnhash). Now I know you are going to say
this won't get me anywhere, I KNOW it, but I just want to try for fun :-) And
maybe I will release the source, which I intend to be max 2000 lines. Including
UCI (400 lines), not winboard (20000+ lines).
Best regards,
Bas.
>>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++)
>
>why use all this slow code for something that should be a single AND?
>
>> { 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 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.