Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Simple questions about bitboards

Author: Frank Phillips

Date: 10:25:09 09/22/03

Go up one level in this thread


On September 22, 2003 at 09:50:33, Sune Fischer wrote:

>On September 22, 2003 at 09:10:55, Vincent Diepeveen wrote:
>>
>>And 2.2 times slower even with inline assembly.
>>
>>Not to mention what happens when you don't have assembly available.
>>
>>For everyone who does *not* like to have inline assembly, do *not* use
>>bitboards.
>
>Actually, I just tested a simple C version against the assembler version
>yesterday, and the C version came out faster on my "frenzee mark".
>with assembler : 1072
>no assembler   : 1092 (!)
>
>Quite a big difference so I was somewhat surprized.
>The C version is "cheating" by using a big table though, could be bad in the
>long run if the program grows.
>
>The C version:
>
>inline FirstOneClear(BitBoard &bb) {  // preconditioned by bb!=0
>    BitBoard b = bb & -bb;
>
>    bb ^= b;
>    if (b<<48)
>      return (first_one[b]);
>    if (b<<32)
>      return (first_one[b>>16]+16);
>    if (b<<16)
>      return (first_one[b>>32]+32);
>    return (first_one[b>>48]+48);
>}
>
>The Assembler version:
>
>inline FirstOneClear(BitBoard &bb) {
>	__asm
>	{
>		xor	edx, edx
>		mov	ebx, [bb]
>		xor	eax, eax
>		inc	edx
>		bsf	ecx, [ebx]
>		jnz	found
>		bsf	ecx, [ebx+4]
>		lea	ebx, [ebx+4]
>		xor	eax, 32
>	found:
>		shl	edx, cl
>		xor	eax, ecx
>		xor	[ebx], edx
>	}
>}
>
>the assembler returns 63-square, so it must be flipped.
>
>Maybe faster versions of both even exists :)
>
>-S.


Is this an Athlon?  My _program_ is faster with the lookup table approach on an
Athlon - although I do not used rotated BitBoards for move generation, which
should make the difference bigger I guess.

Frank



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.