Andrei, PLEASE stop hitting reply all.  Also, please ignore the private message I sent you and read this one instead, as I've included a reply to one more point in this one.

On 8/27/2010 1:20 AM, Andrei Alexandrescu wrote:
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.
2.  From reading the description of std.concurrency in TDPL it seemed

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

I assume you meant SMP parallelism, not SIMD?  ParallelFuture is about SMP parallelism, not SIMD.  SIMD == things like SSE instructions.

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.

Can you elaborate on this?  Other than the atomics stuff that you mention below, what lower level primitives do you think need to be exposed?  IMHO tasks, parallel map and reduce and parallel foreach are the most basic primitives of this library.  Except the atomics stuff, basically all the lower level stuff it uses (condition variables, etc) is straight out of Phobos/druntime.


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.

Yeah, D needs a real atomics library.  core.atomic is a good start, but I won't use it until it can efficiently do things like atomic increment.


Andrei


_______________________________________________
phobos mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/phobos

Reply via email to