Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: RankAttacks with x^(x-2)

Author: Vincent Diepeveen

Date: 05:07:58 10/01/02

Go up one level in this thread


On October 01, 2002 at 03:58:50, Gerd Isenberg wrote:

If i may remind you the hyperbola guy said that his idea
was just a 'thought'. Nothing concrete implemented.

Anyway, which processor did you test it at for the speed
and were both tests within the mmx and how would it do outside
mmx and inside the normal processor?

I mean P4 and probably future P4s have just 1 mmx register.
not a nice thought :)

>On September 30, 2002 at 15:39:09, Sune Fischer wrote:
>
>>On September 30, 2002 at 14:34:48, Gerd Isenberg wrote:
>>
>>>Hi all,
>>>
>>>i recently thought about and played with the x^(x-2) idea, introduced to me by
>>>"The Hyperbola Project" some time ago.
>>
>>Isn't this the old reversed bitboards trick?
>>How can you use this to generate the upper attack board, it only works on the
>>lower bits?
>
>oups, it was little late yesterday...
>
>My intention so far is to use this x^(x-2) trick only to replace one direction
>fill in Kogge-Stone or dumb7fill. So it improves shlightly the
>getRookAttacksMMX, but a few percents more the getQueenAttacksMMX, due to easier
>register usage, where finally dumb7fill fills five directions simultaniously
>(left, leftup, leftdown, rightup, rightdown). Up/Down is done with KoggeStone,
>right by this x^(x-2) trick.
>I dont't like the reversed bitboard idea in the matter to work in parallel with
>two incompatible reversed attack sets.
>
>I even don't understand how "The Hyperbola Project" handles file- or diagonal
>attacks without rotated bitboards, so that these rays fit into one byte with
>consecutive bits on this ray.
>
>Gerd
>
>>
>>> It works fine with bit 0, and i thought
>>>that shifting to file zero is required, before generationg the attacks.
>>>But that seems not to be necessary. The generalized term for one rank is simply
>>>
>>>    Occupied ^ (Occupied - 2*RookMover)
>>>
>>>where RookMover is subset of Occupied.
>>
>>What is RookMover, how do you generate it?
>>
>>-S.
>>
>>>This term produces all rank attacks of all RookMover in positve direction
>>>(increasing file index, here A=0,8...;B=1,9...).
>>>
>>>What a surprise (at least for me)!
>>>
>>>sample rank (consider the reversed bit order due to bit0 is A):
>>>BitIndex     01234567
>>>Occupied(O)  01011101
>>>RookMover(R) 01001000
>>> 2*R         00100100
>>>-2*R         00111011
>>>Occupied(O)  01011101
>>>  (O-2R)     01101001
>>>O^(O-2R)     00110100
>>>
>>>
>>>With 64-bit mmx-registers this can be done simultaniously with all eight ranks:
>>>
>>>input:  mm1 = RookMover subset of Occupied
>>>             (may be forced by "por mm6,mm1")
>>>        mm6 = Occupied
>>>output: mm0 = (right)RookAttacks
>>>
>>>  movq  mm0, mm6 ; Occupied
>>>  psubb mm0, mm1 ; Occupied -   RookMover
>>>  psubb mm0, mm1 ; Occupied - 2*RookMover
>>>  pxor  mm0, mm6 ; Occupied ^ (Occupied - 2*RookMover)
>>>
>>>I tried it with up/down Kogge-Stone and leftDumb7Fill.
>>>But only a few percent better performance (24secs instead of 26secs /10**9).
>>>With pure dumb7fill, the performance win was even less. The seven unrolled
>>>fill-iterations with four independent mmx-instructions are not so much slower
>>>than with three for the remaining directions.
>>>
>>>Cheers,
>>>Gerd



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.