Author: Gerd Isenberg
Date: 12:02:34 07/01/04
Go up one level in this thread
On July 01, 2004 at 11:13:14, Robert Hyatt wrote: >On July 01, 2004 at 02:50:35, Tony Werten wrote: > >>Hi all, >> >>although I like the principle of bitboards, it really bothers me that I can't >>seem to find a decent/fast way to evaluate weighted safe squares. >> >>Suppose I want to (simple) evaluate a rook, I generate a bitboard with all >>reachable squares and mask off the squares attacked by lower pieces (that's no >>problem). >> >>(This doesn't exacly generate safe squares, only the ones that aren't attacked >>at all by opponents pieces are, for the remaining squares one would need a SEE, >>but that's not the point ) >> >>Now I can use this bitboard ( say rook on e4 ), mask the rank state, and look in >>a precomputed table how this rankstate scores on an e rank. No problem. >> >>But how to do the files ? If I use the rotated board, I need to have the >>opponents attackboard in this rotated board as well, wich would be very costly >>to compute (ie also for the bishops,queens ) and very complicated. >> >>Any ideas ? Am I missing something ? >> >>BTW, doing a popcount isn't a solution, since it violates the elegance of >>bitboards ( and is slow ?) >> >>Tony > > >On the Cray there is an elegant solution, but not on X86 so far... > >You can create a 64-word vector of "weights". How you compute these is up to >you. In Cray Blitz I did this as I did the evaluation, figuring out which >squares were weak, unimportant, strong, useful, painful for opponent, etc. >After the normal eval, I had a vector of values, one per square for all squares >on the board. Now I computed the "attack bitmap" for a piece, and stuck that in >the vector mask register. Now when I sum up the square value vector, it only >sums the values with a corresponding bit mask of 1, meaning this piece attacks >that square safely. Wow great, a scalar product 64word*64bit. Was it implemented in hardware or a kind of micro-program? > >I obviously don't do that at present, since X86 has no such direct capability >and the software approach is expensive... Thinking about some oppropriate SSE2-instructions for that scalar product, eg. 64 bytes * 64 bit. Four 128-bit (16Byte) xmmm registers where each byte is associated with one bit of the other operand. One subtask, may be the most expensive, is to expand each bit to one byte, so that 1 becomes 0xff. From 64-bit word to four times 128-bit words. Four parallel "and" and some final horicontal (3DNow psadbw is fine for that)and vertical (over the four xmm-registers) parallel adds. Ok it will take some cycles, anyway... > >In any case, I believe there are plenty of viable alternatives to this kind of >mobility concept that it isn't that important... IE mobility has many forms of >expression. A rook on an open file is one such idea...
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.