Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: questions about using popcount function to count bitboard

Author: Uri Blass

Date: 14:22:59 01/10/03

Go up one level in this thread


On January 10, 2003 at 16:15:34, Tony Werten wrote:

>On January 10, 2003 at 15:37:03, Uri Blass wrote:
>
>>On January 10, 2003 at 15:31:05, Bas Hamstra wrote:
>>
>>>Hi Uri,
>>>
>>>Personally I use a lookup table for 8 bits at a time (count each row). You can
>>>see a bitboard as an array of 8 unsigned chars.
>>>
>>>BB Test = 423434234ui64;
>>>int Count = PopCnt(Test);
>>>
>>>inline int PopCnt(BB BitBoard)
>>>
>>>{    unsigned char* p = (unsigned char*) BitBoard;
>>>     return PopCnt8[p[0]] + PopCnt8[p[1]] ... + PopCnt8[p[7]];
>>>}
>>>
>>>You have to create an small precalculated array PopCnt8[256] for this. It is not
>>>the absolute fastest, but also not much slower than that.
>>>
>>>Bas.
>>
>>Thasks but I have already that array for other purpose so I do not need to
>>create it.
>>
>>I simply thought that if there is a simple way to do things faster I can do it.
>>I want to use it to calculate the number of protected passed pawns because as
>>first step I plan to give a static bonus for passed pawn that is protected by a
>>pawn(I may change it later to something better but passed pawn that is protected
>>by a pawn is usually good not like other passed pawns that may be often bad).
>>
>>I admit that in this case I can add only 5 numbers because protected passed pawn
>>cannot be in the first second or last rank so maybe your idea is faster.
>
>To count protected passed pawns the fasted way is probably
>
>count:=0;
>while bitboard<>0 do
>begin
>  inc(count)
>  bitboard:=board and (bitboard-1)
>end
>
>
>Tony

I guess that you are right and I guess that I will not use assembler after the
advices that I got.

The point is that it is even possible that assembler may do me slower and even
if today it can do me faster tommorow it may do me slower because of some
compiler optimization so it may be better to have 100% C code and not 99.9% C
code.

Uri



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.