Author: Peter Fendrich
Date: 12:27:10 08/19/98
continuing from Part1... Method C (The Hacker trick without loops. Used by DarkThought) .............................................. #define ONES ((uint64) 0x5555555555555555) #define TWOS ((uint64) 0x3333333333333333) #define FOURS ((unsigned __int32) 0x0f0f0f0f) register unsigned __int32 n; const uint64 a = TheBitBoard - ((TheBitBoard >> 1) & ONES); const uint64 c = (a & TWOS) + ((a >> 2) & TWOS); n = ((unsigned __int32) c) + ((unsigned __int32) (c >> 32)); n = (n & FOURS) + ((n >> 4) & FOURS); n = (n & 0xFFFF) + (n >> 16); n = (n & 0xFF) + (n >> 8); return n; .............................................. Pos Time Iter Mve# Nodes N/S --- --- ---- ---- -------- ----- d1 111 10 1 3373271 30389 d2 179 9 13 5482500 30628 d3 92 8 2 1906069 20718 d4 93 8 3 2469504 26553 d5 92 9 6 3498022 38021 N1 97 8 30 3847980 39669 N2 92 9 6 2711814 29476 N3 116 9 1 3352784 28903 N4 91 8 13 3177590 34918 N5 103 9 1 4545646 44132 Total: 1066 87 34365180 Mean: 107 9 32238 Method D (Table lookup) ........................................ UINT register c; c = table[TheBitBoard.row[0]]; c += table[TheBitBoard.row[1]]; c += table[TheBitBoard.row[2]]; c += table[TheBitBoard.row[3]]; c += table[TheBitBoard.row[4]]; c += table[TheBitBoard.row[5]]; c += table[TheBitBoard.row[6]]; c += table[TheBitBoard.row[7]]; return c; ......................................... Pos Time Iter Mve# Nodes N/S ---- ---- ---- ---- -------- ----- d1 116 10 1 3373153 29078 d2 148 9 2 4530241 30609 d3 96 8 6 2097610 21850 d4 92 8 4 2508042 27261 d5 92 9 7 3393436 36885 N1 91 8 27 3457069 37989 N2 95 9 6 2647945 27873 N3 124 9 1 3359300 27091 N4 92 8 11 2965104 32229 N5 108 9 1 4456583 41264 Total: 1054 87 32788483 Mean: 105 9 31109 ==================================================================== Conclusion: Method A, "the Crafty" method works best for my program. This is confirmed by other tests. My program Terra uses the bitcounter very much in the Evaluation. Therefore it has a big so impact on performance. Comments? I will continue with different getFirstBit, getLastBit, popFirstBit, popLastBit etc... //Peter
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.