[phobos] Parallelism in Phobos

Andrei Alexandrescu andrei at erdani.com
Thu Aug 26 22:20:54 PDT 2010


Continuing to plow through my backlog...

On 5/30/10 10:54 PDT, David Simcha wrote:
> I have a few questions/comments about the possible inclusion of a
> library for parallelism in Phobos:
>
> 1.  What is the status of std.concurrency?  It's in the source tree, but
> it's not in the documentation or the changelogs.  It appears to have
> been checked in quietly ~3 months ago, and I just noticed now.

It seems std.concurrency is in pretty good shape now.

> 2.  From reading the description of std.concurrency in TDPL it seemed
> more geared toward concurrency (i.e. making stuff appear to be happening
> simultaneously, useful for things like GUIs and servers) rather than
> parallelism (i.e. the use of multiple CPU cores to increase throughput,
> useful for things like scientific computing and video encoding).  It
> seems fairly difficult (though I haven't tried yet) to write code that's
> designed for pull-out-all-stops maximal performance on a multicore
> machine, especially since immutability is somewhat of a straight
> jacket.  I find implicit sharing and the use of small synchronized
> blocks or atomic ops to be very useful in writing parallel programs.

You are correct on all counts. D's current concurrency mechanisms are 
not geared towards parallel SIMD-style programming.

> 3.  Most code where parallelism, as opposed to concurrency, is the goal
> (at least most that I write) is parallelized in one or two small,
> performance critical sections, and the rest is written serially.
> Therefore, it's easy to reason about things and safety isn't as
> important as the case of concurrency-oriented multithreading over large
> sections of code.

Yah.

> 4.  I've been eating my own dogfood for awhile on my ParallelFuture
> library.  (http://cis.jhu.edu/~dsimcha/parallelFuture.html;
> http://dsource.org/projects/scrapple/browser/trunk/parallelFuture/parallelFuture.d)
> It's geared toward throughput-oriented parallelism on multicore
> machines, not concurrency for GUIs, servers, etc. and is higher level
> than std.concurrency.  Is there any interest in including something like
> this in Phobos?  If so, would we try to make it fit into the
> explicit-sharing-only model, or treat it as an alternative method of
> multithreading geared towards pull-out-all-stops parallelism on
> multicore computers?

There is interest. I think we should at best find the language/library 
primitives necessary for making it work, and then provide the primitives 
AND adopt your library into Phobos. That way people can use your 
abstraction mechanisms and use their own.

I see you have some CAS instructions. Sean, I think it's a good time to 
collaborate with David to put them into druntime or std.concurrency.


Andrei


More information about the phobos mailing list