On Wed, Feb 13, 2008 at 09:59:28PM +0100, Gunnar Farnebäck wrote:
> Second, as other people have pointed out, the strength of individual
> playouts does not have a strong connection with the strength of an UCT
> program. I would go as far as to conjecture that it's entirely
> irrelevant. (Patterns are indeed useful but for other reasons than
> playout strength.)
> 
> Third, if you want to get any kind of speed from the GPU you must go
> massively parallel. Think in terms of a big texture filled by lots of
> go boards side by side and try to operate on all of them
> simultaneously in a reasonably uniform manner. Forget everything about
> group status and other complicated concepts. If you can just implement
> an UCT engine with uniformly random playouts on the GPU and get
> significantly better performance than on CPU it's a major achievement
> in my book.

I admit I have no experience with GPU programming, so take all this with more
than a grain of salt. 

Still, I would not even worry about patterns, UCT, or anything fancy, until I
would have a fast and reliable MC-simulation code. And I would write the
first (many?) versions on a normal PC, with all the good tools, just to
understand the problem well. I would have them playing on cgos to see that
they do all right. If I remember right, the ceiling is around 1500 ELO, which
can be reached with something like 5000 simulations.

The next step would be to rewrite everything for the GPU, sweet and simple.
Then (and only then!) optimize a little bit (and only a little bit!). If you
can not make that outperform LibEgo on a simple modern PC, there is not much
point in trying to go further.

It sounds like it would be a good idea to handle multiple MC simulations in
parallel - if you have seriously vectorized bitmap operations, it might be
quite effective. Once you have that, it should be (relatively!) trivial to
make a UCT "main program" that pipes a number of positions into the GPU for
MC simulations, and picks up the results. Once that plays well, it might make
sense to consider moving some of that into the GPU, and/or improve the
algorithms. But don't try to solve two problems at a time. If you want to
play with the GPU, go for that with known algorithms. If you want to invent
better ways to play go, don't waste your time programming fancy chips unless
you know where you need the extra speed.

Still, it sounds like quite a programming job! Wish I had the time and energy
for that!

  - H

-- 
Heikki Levanto   "In Murphy We Turst"     heikki (at) lsd (dot) dk

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

Reply via email to