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
_______________________________________________
computer-go mailing list
computer-go@computer-go.org
http://www.computer-go.org/mailman/listinfo/computer-go/