Mark Boon wrote:

Sorry, without a bit more explanation, the assembler code is very hard to understand. What exactly does it do?

The first source code was just an example to see what kind of code
is generated. The second is useful, if you understand asm you should understand it. The board has 4 modes, as far as patterns are concerned. So the following applies for each mode and for each possible mapping scheme. When 40 neighbors are used, (i.e. Manhattan distance 4) there are 81 possible situations (all the cells of a 9x9 board are different as far as board limits are concerned). On bigger boards, each cell maps one of the 81 possible 9x9 cells. The board system cannot play on less than 9x9. And for each of these 4x(maximum)81 (some board modes have smaller distance) the generator writes 2 functions: one for creating the mask/hash from scratch and an other to update all masks/hashes in the neighborhood of a new stone.


Does it relate to a pattern?

Yes the complete pattern is:

               +---+
               | 4 |
           +---+---+---+
           | 4 | 3 | 4 |
       +---+---+---+---+---+
       | 4 | 3 | 2 | 3 | 4 |
   +---+---+---+---+---+---+---+
   | 4 | 3 | 2 | 1 | 2 | 3 | 4 |
+---+---+---+---+---+---+---+---+---+
| 4 | 3 | 2 | 1 | · | 1 | 2 | 3 | 4 |
+---+---+---+---+---+---+---+---+---+
   | 4 | 3 | 2 | 1 | 2 | 3 | 4 |
   +---+---+---+---+---+---+---+
       | 4 | 3 | 2 | 3 | 4 |
       +---+---+---+---+---+
           | 4 | 3 | 4 |
           +---+---+---+
               | 4 |
               +---+

Justification of this shape:

1. It includes all standard nobi, iken tobi, niken tobi, kosumi, keima & ogeima relations (+ double iken tobi + double kosumi) 2. It detects if a pattern is at the 4-th line or the 4x4 corner (and below obviously). Less than that is too small. The 4-th line is too different from the center. 3. It is a nested structure, {dist12, dist12 + dist3} are both usable.
4. It has reasonable size for the information it contains.
5. The bit arrangement is optimized for 90 deg rotation.

Additionally, I keep urgency information for: normal, the pattern
shows up for the first time and urgency in a ko.


Did you write a paper or post explaining this in more detail?

Not yet.


Do I understand correctly that you generate this code automatically?

Yes. It would be a nightmare to write about 70K lines by hand and debugging would be hard as well. Although what the functions do is
simple enough to create a test that verifies 100% of the cases.


You are talking about updating 40 hashes. Does it mean your patterns
have fixed size?
Yes. 3 sizes: Manhattan distance 2, 3 and 4


In the 500 nanoseconds, how many patterns do you compare?

That was updating (max) 40 hashes in the neighborhood of a newly placed stone. The precise number of hashes depends on the board coordinate and the surrounding stones although that is achieved without a single conditional jump. (It is a very conservative estimation for approx 140 instructions in a jump free sequence. The typical case is probably more like half of that.) But, as mentioned, it does not include neither the board logic nor the
search that translates hash -> urgency.


How about rotations and color inversions?

In the slowest mode the pattern is rotated using macros like this one (that rotates a 40 neighbor pattern)

   asm
       mov edx, eax        // @jm
       mov eax, [edx + 8]  // jm.mask4
       rol eax, 8
       mov [edx + 8], eax  // jm.mask4

       mov eax, [edx + 4]  // jm.mask3
       shl eax, 6
       mov ecx, eax
       and eax, 0ffFFFFh
       rol ecx, 8
       or  al, cl
       mov [edx + 4], eax  // jm.mask3

       mov eax, [edx]      // jm.msk12
       mov ecx, eax
       shl eax, 4
       rol cl, 2
       mov al, cl
       mov ecx, eax
       shr ecx, 16
       and eax, 0ffF0FFh
       and ecx, 0000F00h
       or  eax, ecx
       mov [edx], eax      // jm.msk12
   end

and converted to canonical. Color inversion is automatic
because the pattern is own/opponent instead of black/white.

In the fastest mode, the hash table has x8 size and includes
the hashes of the rotated patterns.


Jacques.



_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/

Reply via email to