[computer-go] Lockless hash table and other parallel search ideas

Rémi Coulom Remi.Coulom at univ-lille3.fr
Sat Mar 22 02:16:12 PDT 2008


Don Dailey wrote:
> These are used in parallel chess programs, and it's very common.   A
> pretty good article on this written by Hyatt (Crafty programmer and
> author of former world computer chess champion Cray Blitz) and it's
> called  "A lock-less transposition table implementation for parallel
> search chess engines", 
>
> I see an on-line version of a similar article here:
>
>      http://www.cis.uab.edu/hyatt/hashing.html
>
>
> - Don
>   

Hi Don,

Yes, I knew Bob's paper. In his approach, an entry will be lost in case 
of a collision. In my Go program, I never replace hash entries of the 
current search, because I have enough memory to store them all. I only 
have to be careful when allocating a node for the first time, so that 
two threads do not allocate the same slot. This happens rarely enough 
that the cost of a Test-And-Swap is negligible, so I prefer to do it 
that way. What I do is essentially the beginning of the Google talk I 
indicated yesterday, without resizing. I believe it is a lot cleaner 
than Bob's idea, although atomic increments are costly.

In fact, now that I think a little more about it, Bob's scheme would 
probably not work at all, because updating counters would mean updating 
the hash code, and any collision would cause a loss of the hash entry. 
It does not matter for alpha-beta, but losing an entry near the root in 
MC search would be very bad. Really ugly stuff would be necessary to 
repair the consequences of such a collision.

So, I believe Bob's idea would not work.

Rémi


More information about the computer-go mailing list