Computer Chess Club Archives


Search

Terms

Messages

Subject: Re: Neverending story with incomplete tablebases

Author: Russell Reagan

Date: 13:15:55 08/18/03

Go up one level in this thread


On August 18, 2003 at 16:02:41, Sune Fischer wrote:

>Not exactly.
>I clone the board and spilt the tree, as you would when you're about to set off
>a new thread, this now works in perft.
>
>That's as far as I've gotten (wohoo:).
>
>Next up is the fun stuff, getting threads to spin and waking them up for a
>search (no idea how to do this yet!).

Hmm, I'm not exactly sure I understand how you're doing things. What do you mean
by "split the tree, as you would when you're about to set off a new thread"? And
from "getting threads to spin and waking them up for a search" sounds like
you're creating some threads for searching and leaving them in either a
suspended state, or a running state whenever the time comes.

I've never implemented SMP search in a chess program (yet), but I've used
threads some, and I would think it would be better to just start a new thread
each time you want to start a new search (when it becomes your move, or when you
want to ponder, or whatever). I think this is simpler than trying to manage
threads and control their state. You can create a simple wrapper class to do
this stuff and make starting threads, stopping them, and pausing them nice and
simple. Hopefully I don't underestimate the cost of starting up new threads.


>I guess I also have to become somewhat of an expert of mutex'es, oh well.

You don't have to get this complex if you don't need it. For instance, there are
some "atomic" instructions/functions that you can use in Windows. You can look
them up on Microsoft's website: http://msdn.microsoft.com. Search for something
like InterlockedExchange, InterlockedCompareAndExchange, and stuff like that.

These are functions to do some simple things like assignment, conditional
assignment, and a few others (maybe 4 or 5 functions total), and you can do
things like set flags and stuff like that, which may be all you need. Basically
they let you work with simple variables in a thread safe way. If you need more
than that, you might need to get into critical sections, mutexes, and
semaphores...oh the joys of multi-threading!


>Just got thinking, Gerd's assembler isn't thread-safe, is it?

If you're referring to the MMX stuff, I'd guess not, since each thread would
probably just trash whatever the other thread was doing in the mmx registers.



This page took 0.01 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.