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.01 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.