comp.lang.ada
 help / color / mirror / Atom feed
From: Hadrien Grasland <hadrien.grasland@gmail.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Sun, 3 Jul 2016 00:42:57 -0700 (PDT)
Date: 2016-07-03T00:42:57-07:00	[thread overview]
Message-ID: <2598edcf-b0fd-4ceb-b1c4-8930371dd3cb@googlegroups.com> (raw)
In-Reply-To: <dtqp5kFatlsU1@mid.individual.net>

Le samedi 2 juillet 2016 23:14:30 UTC+2, Niklas Holsti a écrit :
> On 16-07-02 14:13 , Hadrien Grasland wrote:
> > Le samedi 2 juillet 2016 06:36:09 UTC+2, Randy Brukardt a écrit :
> >> But I don't think that really helps the race and deadlock issues
> >> that are the real problem with programming with Ada tasks. I'd like
> >> to find some help there, too.
> >
> > Here's my view of this: people are heavily overusing shared mutable
> > data in multitasking programs, and that is the source of too many
> > data races, which in turn people attempt to fix with locks, thusly
> > killing their performance and introducing deadlocks.
> >
> > In many cases, better performance and correctness can be easily
> > achieved by moving to asynchronous tasking runtimes, where the
> > runtime internally manages an event-based dependency graph of tasks
> > that can be processed condurrently, and data is kept task-private but
> > can be moved around between tasks.
> 
> Do you have real experience of such "asynchronous tasking runtimes"? In 
> Ada or in other languages?

I have quite a bit of experience with OpenCL and HPX. OpenCL is based on raw events, while HPX adds some nice syntaxic sugar for moving data across tasks in the form of futures.

OpenCL is an API that was designed for offloading parallel computations to pretty much every kind of programmable hardware, so its designers had to pay quite a bit of attention to IO latency concerns when designing it, which naturally led them to embrace an asynchronous tasking model. Whereas if you are familiar with the C++11 std::async construct, HPX is essentially that programming model on steroids (more limited in hardware scope than OpenCL, but more pleasant to use).

As for languages, OpenCL is a C API, though I ended up writing a C++ wrapper fairly quickly because the C constructs were hurting my eyes too much. HPX is a C++ API. I am not aware of any similar similar work in Ada, so since I really like this programming model, I thought I would give it a shot.


> It seems to me that it would be difficult for such a run-time system to 
> support the full Ada tasking features, such as conditional entry calls. 
> Ada tasks have more control over their own execution than such a 
> run-time system would allow.

Yes, to support the full Ada tasking feature set would likely entail getting support from compiler implementors, see the lengthy discussion on coroutines above for an example :)

 
> Moreover, in present Ada it seems to me that the only way to move 
> task-private data from one task to another is to send a copy of the data 
> from one task to the other. Copying data is often poison for performance.

Cheaply moving data around is possible in any language that has heap allocation and pointers. What is more difficult is to provide an easy to use syntax around it.


> Perhaps a new, restricted tasking profile would be needed, analogous to 
> the Ravenscar profile but aimed not at real-time systems but at parallel 
> computation in this event-based style.

It is true that for computation purposes, the full Ada tasking model may also be overkill. For example, asynchronous transfer of control can be hard to support, and is often overkill for compute scenarios.

  reply	other threads:[~2016-07-03  7:42 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-17  9:44 RFC: Prototype for a user threading library in Ada Hadrien Grasland
2016-06-17 16:18 ` Niklas Holsti
2016-06-17 16:46   ` Dmitry A. Kazakov
2016-06-18  8:16     ` Hadrien Grasland
2016-06-18  8:47       ` Dmitry A. Kazakov
2016-06-18  9:17         ` Hadrien Grasland
2016-06-18 11:53           ` Dmitry A. Kazakov
2016-06-20  8:23             ` Hadrien Grasland
2016-06-20  9:22               ` Dmitry A. Kazakov
2016-06-23  1:42       ` Randy Brukardt
2016-06-23  8:39         ` Dmitry A. Kazakov
2016-06-23 22:12           ` Randy Brukardt
2016-06-24  7:34             ` Dmitry A. Kazakov
2016-06-24 23:00               ` Randy Brukardt
2016-06-25  7:11                 ` Dmitry A. Kazakov
2016-06-26  2:02                   ` rieachus
2016-06-26  6:26                     ` Dmitry A. Kazakov
2016-06-24  0:38           ` rieachus
2016-06-25  6:28             ` Dmitry A. Kazakov
2016-06-26  1:34               ` rieachus
2016-06-26  3:21               ` Randy Brukardt
2016-06-26  6:15                 ` Dmitry A. Kazakov
2016-06-28 20:44                   ` Anh Vo
2016-07-02  4:13                   ` Randy Brukardt
2016-07-02 10:25                     ` Dmitry A. Kazakov
2016-07-05 21:53                       ` Randy Brukardt
2016-07-06  9:25                         ` Dmitry A. Kazakov
2016-07-07  0:32                           ` Randy Brukardt
2016-07-07  6:08                             ` Niklas Holsti
2016-07-08  0:03                               ` Randy Brukardt
2016-07-08  7:32                                 ` Dmitry A. Kazakov
2016-07-11 19:40                                   ` Randy Brukardt
2016-07-12  8:37                                     ` Dmitry A. Kazakov
2016-07-12 21:31                                       ` Randy Brukardt
2016-07-08 20:17                                 ` Niklas Holsti
2016-06-24 21:06         ` Hadrien Grasland
2016-06-26  3:09           ` Randy Brukardt
2016-06-26  6:41             ` Dmitry A. Kazakov
2016-07-02  4:21               ` Randy Brukardt
2016-07-02 10:33                 ` Dmitry A. Kazakov
2016-07-05 21:24                   ` Randy Brukardt
2016-07-06 13:46                     ` Dmitry A. Kazakov
2016-07-07  1:00                       ` Randy Brukardt
2016-07-07 14:23                         ` Dmitry A. Kazakov
2016-07-07 23:43                           ` Randy Brukardt
2016-07-08  8:23                             ` Dmitry A. Kazakov
2016-07-11 19:44                               ` Randy Brukardt
2016-06-26  9:09             ` Hadrien Grasland
2016-07-02  4:36               ` Randy Brukardt
2016-07-02  5:30                 ` Simon Wright
2016-07-05 21:29                   ` Randy Brukardt
2016-07-02 11:13                 ` Hadrien Grasland
2016-07-02 13:18                   ` Dmitry A. Kazakov
2016-07-02 16:49                     ` Hadrien Grasland
2016-07-02 21:33                       ` Niklas Holsti
2016-07-03 20:56                         ` Hadrien Grasland
2016-07-02 17:26                   ` Niklas Holsti
2016-07-02 21:14                   ` Niklas Holsti
2016-07-03  7:42                     ` Hadrien Grasland [this message]
2016-07-03  8:39                       ` Dmitry A. Kazakov
2016-07-03 21:15                         ` Hadrien Grasland
2016-07-04  7:44                           ` Dmitry A. Kazakov
2016-07-05 21:38                   ` Randy Brukardt
2016-06-21  2:40     ` rieachus
2016-06-21  7:34       ` Dmitry A. Kazakov
2016-06-18  7:56   ` Hadrien Grasland
2016-06-18  8:33 ` Hadrien Grasland
2016-06-18 11:38 ` Hadrien Grasland
2016-06-18 13:17   ` Niklas Holsti
2016-06-18 16:27   ` Jeffrey R. Carter
2016-06-20  8:42 ` Hadrien Grasland
2016-07-10  0:45 ` rieachus
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox