Parallelism in D?

Jason House jason.james.house at gmail.com
Sat Mar 29 19:20:23 PDT 2008


Craig Black wrote:

> 
> "Jason House" <jason.james.house at gmail.com> wrote in message
> news:fslscj$e60$1 at digitalmars.com...
>> Craig Black wrote:
>>
>>> "Jason House" <jason.james.house at gmail.com> wrote in message
>>> news:fsk0h4$2bl8$1 at digitalmars.com...
>>>> Ansible wrote:
>>>>
>>>>> Parallel programming being the Next Big Thing these days, I'm
>>>>> wondering what is out there as far as parallel programming
>>>>> libraries/utilities/whatever for D?
>>>>>
>>>>> Has anyone created a D layer for MPI, for instance?  What about
>>>>> transactional memory?
>>>>>
>>>>> I have a game engine that I wrote in C++ and I'm thinking about
>>>>> porting
>>>>> to D one of these days.  Making use of those extra cores is high on
>>>>> the priority list for me in the future.
>>>>
>>>> I'm writing a multi-threaded game engine in D.  I'm always looking for
>>>> more
>>>> developers ;)
>>>
>>> How far have you got?
>>
>> I started about a year ago, and have a functional game-playing engine for
>> playing go.  It uses monte carlo techniques, including UCT [1] and RAVE
>> [2].  I'm half-done implementing a bradley-terry model for move ordering
>> [3].  Combining all 3 of those is nearly state of the art in the field of
>> computer go.
>>
>> The framework will support other games, and other search algorithms.  I
>> have
>> not implemented other games but have implemented other search algorithms.
> 
> Intersesting.  I'm not that familiar with computer go.  (I just looked it
> up
> on Wikipedia.)  What turned you on to computer go?  What search algorithms
> have you explored and what are the possible applications?

Go and chess are both complex games, but computers perform far worse at go. 
In fact, I play go better than the best computer did when I entered the
field.  They beat me now, but are still quite far from professional
players.



>>> I'm curious as to your experience with multi-threading in D.
>>
>> I have 4 types of threads/processes:
>> 1. Communication (via GTP [4]) to a GUI or online server
>> 2. Information gathering and time management
>> 3. Managing a single search (ie. UCT RAVE)
>> 4. Performing a part of a search
>>
>> I designed it to use message queues.  Each thread has a queue for
>> incoming
>> command delegates.  Each thread is responsible for processing commands
>> out of the queue when it reaches a stable state (for search threads,
>> that's
>> about once every milisecond).  The design helps me keep multi-threading
>> issues in check and has so far been successful.
> 
> Does Phobos, Tango, or another D library provide facilities for message
> queues or did you have to invent your own?

I had to invent my own.



>> This was my first multi-threaded design in any language.
>>
>>
>>> How much are you relying on GC or custom memory
>>> management?
>>
>> I use all automatic memory management.
>>
>>> How much does the GC hinder parallelism?
>>
>> Profiling indicates about 25% of my time is spent with memory related
>> activities.
> 
> That's not bad.  Do you think this would become a problem as the number of
> processors increase?

Unfortunately, I would expect it to get worse :(



>>> How do you
>>> partition the workload and how scalable is your approach?
>>
>> Work partitioning is partially discussed above.  I've done experimented
>> with
>> multiple worker threads for pure monte carlo searches, but have not yet
>> invested effort in doing that for UCT or alpha beta.  A recent post
>> (using a non-locking hash table) showed about about 11x speed up with 16
>> processors.
> 
> Very impressive.  This is a hash table written in D?  Did you write this
> code?  Any chance I could use it?

I meant a post on the computer go newsgroup.  I couldn't find the post when
I wrote my reply to you :(  It was written in some other language (C++?)
and is not open source.  When I get the time I'll likely try my hand at
doing that too.


> 
>> My latest focuses have been:
>> * Using weak pointers in a transposition table
>> * Unit testing search algorithms and setting up cruise control
>> * Adding machine-learing based move ordering (on hold for above two)
>>
>> I'm ashamed to say, but I actually put the move ordering stuff on hold
>> when
>> I noticed my engine was weaker than it should be.  Either my addition of
>> transposition tables broke the automatic memory management or I added a
>> search bug somewhere.  I've been investigating those two options.
>>
>> Adding search algorithm unit tests is something I've been meaning to do.
>> Regardless of if it's the fastest way to fix my problem, it offers a good
>> learning experience to gain practice with algorithm unit testing and
>> cruise
>> control.  The engine has more or less remained under active development
>> for
>> several years.  About a year ago, I switched designs and programming
>> languages (C++ to D).  I'm more interested in learning D and robust code
>> design than I am with being the top in the computer go field (although
>> it'd
>> be a nice perk!)
>>
>> [1] http://senseis.xmp.net/?UCT
>> [2] http://www.machinelearning.org/proceedings/icml2007/papers/387.pdf
>> [2] http://remi.coulom.free.fr/Amsterdam2007/MMGoPatterns.pdf
>> [4] http://www.lysator.liu.se/~gunnar/gtp/gtp2-spec-draft2/gtp2-spec.html
> 
> Sounds like a fun project.  Good luck!

Thanks.


More information about the Digitalmars-d-learn mailing list