Author: Sune Fischer
Date: 08:14:36 09/15/01
Hi When I discovered that Crafty had some neat assembler rutines, I decided to test if they where faster than my humble rutines. I have up until now used a "raytracing" or boardtracing rutine to find the legal moves for the sliding pieces. And for the knights, pawns and king I simply check if the board has an allied piece on that square. It's a simple way of generating the legal moves. I still generate the attack bitboards to get the legal king moves though. I then tried to find all the moves directly from the bitboards by using one of Crafty's assember functions. This part of my program is only a minor part, but none the less it runs a full 8 percent slower than my previous raytracing algorithm!! This is what I have now: void FindMovesQueen(..loads of pointers...) { int to_square; BITBOARD bb=(~allied.occupied) & allied.attack[board.id[from_square]]; while (bb) { to_square=63-FirstOne(bb); // get a bit bb ^= mask[to_square]; // remove the bit movelist[++counter].from=from_square; movelist[counter].to=to_square; movelist[counter].piece=QUEEN; movelist[counter].capturedpiece=enemy.piece[board.id[to_square]]; } return; } (movelist, counter, from_square etc. are passed in the argument) I know why it is slow too. First I have to form the bb, that's 2 bitboard operations. Then I need to run an algorithm, FirstOne from crafty, to find the first bit. Then I need to mask out that found bit. Both of these run several time pending on the while loop. Next is 4 lines I always have, no matter how I do it, so we can safely ignore those. The while loop is a conditional much like the if's I use when raytracing, so probably the if's and while almost cancel out. All in all I have added a lot of operations to my program, I am not surprized it is a lot slower. Given that the entire program suffer a slowdown by about 8.1 percent, I estimate that this technique is more than twice as slow as the raytracing. The upside of things is that I reduce my code by about 1000 lines or so, but is this worth 8 percent in speed? I know the use of 64 bit processors will give a nice boost to this method and I probably can't expect anything like that for my tracing function, but frankly I'm not sure it would be enough to catch up. Am I mistaken, are the big boys doing something else? Is there an even faster way? I need to know :D :D Thanks, Sune
This page took 0.02 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.