Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Bit counting revisited

Author: Flemming Rodler

Date: 19:45:31 04/20/00

Go up one level in this thread



>
>Hopefully this helps (and works! :) :
>
>#define firstone(b) \
>({ int __value; long long int __arg = (b); \
>   asm ("bsfl %1,%0\n\t" \
>	"jnz 1f\n\t" \
>	"bsfl 4+%1,%0\n\t"\
>	"jz 2f\n\t" \
>	"addl $32,%0\n\t" \
>	"jmp 1f\n\t" \
>	"2:\n\t" \
>	"movl $64,%0\n\t" \
>	"1:\n\t" \
>	: "=r" (__value) \
>	: "o"  (__arg) ); \
>	__value; })
>
>best wishes,
>Andrzej Nagorko


I have now tested the above code some more and compared it to the table lookup
method (slightly modified) found in Crafty 17.10.

The slightly modifyed version looks like:

int FirstOne(BITBOARD arg1) {
    if (arg1>>48)
      return (first_ones[arg1>>48]);
    if ((arg1>>32))
      return (first_ones[(arg1>>32)]+16);
    if ((arg1>>16))
      return (first_ones[(arg1>>16)]+32);
    return (first_ones[arg1]+48);
}

I have removed all the &65535 from the code. They are not necessary since the
function will return if what is in front is not zero. It gives a marginal
speedup (0.03 seconds on 4M iterations). The table first_ones is a lookup table
that returns the position of the first bit in a 16 bit word.

I tested as follows:

1) 4M entries in table is filled with values where a random bit is set.
2) Each of the above functions are in turn called once for each table entry.

Here are the timings on a AMD K6-2  350Mhz:

FirstOne: 0.4200 seconds.  (with the %65536: 0.4500 seconds).
firstone: 0.5700 seconds.


Personally I think  that these small differences do not matter in a chess
program since most programs only seach below 200000 nodes per second and the
above timings are for 4*2^20 calls to the functions. If a program searching
200000 nodes per second calls FirstOne 2 times per node on average then only 4%
of the execution time of the search is spent in this function.


I hope you will find this info useful. At least I think it was useful for me to
perform these tests.

/Flemming











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.