std.concurrency and efficient returns
Robert Jacques
sandford at jhu.edu
Tue Aug 3 21:13:03 PDT 2010
On Tue, 03 Aug 2010 16:05:40 -0400, Sean Kelly <sean at invisibleduck.org>
wrote:
> dsimcha Wrote:
>
>> == Quote from Sean Kelly (sean at invisibleduck.org)'s article
>> > I wouldn't worry--the modules in core will always provide the
>> low-level control
>> that you're looking for. As for message passing, I think it should be
>> the default
>> choice but not the only choice. Things like futures are a reasonable
>> addition to
>> Phobos as well.
>>
>> How explicit do we want to make inter-thread sharing when using a
>> futures/tasks/parallel foreach library? This question may be a result
>> of the fact
>> that I (still) don't understand what shared is supposed to do, but do
>> we want to
>> force all data to be shared/cast to shared even under a
>> futures/tasks/parallel
>> foreach model, or do we want to bypass the shared system entirely and
>> simply stick
>> to old-fashioned "here be dragons" when doing future/task/parallel
>> foreach-based
>> multithreading?
>
> Ideally, the parallelism should be both invisible to the user and
> automatically safe. That isn't a realistic goal though, so a balance
> must be found between performance and safety. I'd venture to say the
> "here be dragons" approach is correct for the most part though. If too
> much performance is traded away for safety, no one will use it.
My experience with data-parallel programming leads me to believe that a
large number of use cases could be covered by extending the D's set of
function/member modifiers (i.e. const/shared/immutable/pure) to cover
delegates. This would allow, for instance, a parallel foreach function to
take a const delegate or a future function to take a shared delegate and
thereby provide both safety and performance. Bartosz recently bloged about
task driven parallelism in three "High Productivity Computing Systems"
languages ( Chapel, X10, Fortress ) and criticized all three regarding
taking the "here be dragons" approach. Even experts wake up the dragons on
a semi-regular basis and debugging them back into slumber is both hard and
time consuming; it's typically to see a 10x cost in development time on
massively parallel architectures. For mere mortals to be productive, those
dragons need to be slain. And I think the D has a decent chance to be the
first(?) non-functional language to slay them. But I think this should be
a goal of D3, and that a "here be dragons" library for D2 would be
extremely useful: because if we're going to slay the dragons, we need to
know as about many caves and dragons as possible.
More information about the Digitalmars-d
mailing list