Sean Kelly Wrote:

> dsimcha Wrote:
> 
> > == Quote from Sean Kelly (s...@invisibleduck.org)'s article
> > > dsimcha Wrote:
> > > >
> > > > This is great for super-scalable concurrency, the kind you need for 
> > > > things like
> > > > servers, but what about the case where you need concurrency mostly to 
> > > > exploit data
> > > > parallelism in a multicore environment?  Are we considering things like 
> > > > parallel
> > > > foreach, map, reduce, etc. to be orthogonal to what's being discussed 
> > > > here, or do
> > > > they fit together somehow?
> > > I think it probably depends on the relative efficiency of a message 
> > > passing
> > approach to one using a thread pool for the small-N case (particularly for 
> > very
> > large datasets).  If message passing can come close to the thread pool in
> > performance then it's clearly preferable.  It may come down to whether pass 
> > by
> > reference is allowed in some instances.  It's always possible to use casts 
> > to
> > bypass checking and pass by reference anyway, but it would be nice if this 
> > weren't
> > necessary.
> > 
> > What about simplicity?  Message passing is definitely safer.  Parallel 
> > foreach
> > (the kind that allows implicit sharing of basically everything, including 
> > stack
> > variables) is basically a cowboy approach that leaves all safety concerns 
> > to the
> > programmer.  OTOH, parallel foreach is a very easy construct to understand 
> > and use
> > in situations where you have data parallelism and you're doing things that 
> > are
> > obviously (from the programmer's perspective) safe, even though they can't 
> > be
> > statically proven safe (from the compiler's perspective).
> 
> I'd like to think it isn't necessary to expose the internals of the algorithm 
> to the user.  Parallel foreach (or map, since they're the same thing), could 
> as easily divide up the dataset and send slices to worker threads via 
> messages as with a more visible threading model.  The only issue I can think 
> of is that for very large datasets you really have to pass references of one 
> kind or another.  Scatter/gather with copying just isn't feasible when you're 
> at the limits of virtual memory.

Language extensions for message passing, such as Kilim for Java send messages 
giving away the ownership of data, not copying it. That's a reason for the need 
of compiler/runtime support.

Also, parallel map/foreach is more feasible as a library-only solution, whether 
the message passing requires some support from the runtime environment.

Please, correct me if I'm wrong.

Reply via email to