Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: R. Hyatt, Crafty style move generation

Author: Larry Griffiths

Date: 06:01:16 01/24/01

Go up one level in this thread


On January 24, 2001 at 03:40:29, Landon Rabern wrote:

>On January 23, 2001 at 16:22:42, Larry Griffiths wrote:
>
>>On January 23, 2001 at 15:46:08, Dann Corbit wrote:
>>
>>>On January 23, 2001 at 14:41:28, Severi Salminen wrote:
>>>
>>>>>I created a GenerateCapturesMoves styled after your Crafty GenMove.
>>>>
>>>>What was your previous movegen like? I have not yet watched Crafty's movegen so
>>>>what modifications did you make to improve your speed? I have also spent a lot
>>>>time speeding my movegen up and now I'm sometimes faster that Crafty and
>>>>sometimes not.
>>>>
>>>>
>>>>>Looks like it is worth about 100,000 moves per second in my program.
>>>>>I do not update hashkeys like your perft does.
>>>>>I may be able to get a few more moves per second with some tweaking.
>>>>
>>>>Indeed you can, but be sure _not_ to make performance comparisons based to perft
>>>>or perf only. In normal search you should generate 10x (or more)the moves you
>>>>actually make. So if you make modifications that slow your movemakeing down and
>>>>speed your movegen up you might get different results in search and perft. Perft
>>>>will probably indicate that you are slower but in reality you are faster. And a
>>>>better result in perft might mean worse result in search... :(
>>>
>>>Do you use 0x88?
>>>
>>>I am experimenting with using a common internal format that is easily translated
>>>into other formats.  I change from bitmaps to 0x88 when the board is dense or
>>>sparse.
>>
>>I am using MMX registers in my program (64-bit :) as they seem to significantly
>>increase performance when working with bitboards.
>>
>>I also re-designed my diagonal bitboards so that pairs of diagonals fit within a
>>byte.  I replaced the SHIFT/AND with...
>>
>>	_ESI = (unsigned long)fsq;\
>>	asm	lea	EDI,bbArray1;\
>>	asm	movzx	EAX,bbRankContentsOffset[ESI];\
>>	asm	movzx	EBX,bbFileContentsOffset[ESI];\
>>	asm	movzx	ECX,bbLDiagContentsOffset[ESI];\
>>	asm	movzx	EDX,bbRDiagContentsOffset[ESI];\
>>	asm	movzx	EAX,byte ptr [EDI+EAX+bbRankOccupied*8];\
>>	asm	movzx	EBX,byte ptr [EDI+EBX+bbFileOccupied*8];\
>>	asm	movzx	ECX,byte ptr [EDI+ECX+bbLDiagOccupied*8];\
>>	asm	movzx	EDX,byte ptr [EDI+EDX+bbRDiagOccupied*8];\
>>
>>which finds the byte offset in the bitboard using the square number,
>>then loads the contents of a diagonal into a register using the byte offset.
>>This seems to have produced a slight increase in performance.
>
>How much of a speed increase did you get from using MMX?  I got only about a 35%
>increase.
>
>Regards,
>
>Landon

That sounds about right Landon.  I tuned the instructions as best I could but I
make so many  storage references that the MMX instructions do not pair.  I read
some tuning doc that says MMX instructions will not pair if they reference data
in memory and the instructions follow one another.  I wrote non-MMX code in
assembly but still could not beat the MMX instructions.



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.