comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: RFC: Prototype for a user threading library in Ada
Date: Fri, 24 Jun 2016 18:00:35 -0500
Date: 2016-06-24T18:00:35-05:00	[thread overview]
Message-ID: <nkke2h$cvf$1@franka.jacob-sparre.dk> (raw)
In-Reply-To: nkinr0$1h8t$1@gioia.aioe.org

Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
news:nkinr0$1h8t$1@gioia.aioe.org...
> On 24/06/2016 00:12, Randy Brukardt wrote:
>
>> That wasn't my question; I'm wondering the motivation for these features 
>> in
>> terms of parallelization.
>
> Because fine-grained (tightly coupled) parallelism is dead on arrival if 
> you use synchronous exchange. You cannot wait for a response without 
> imposing huge accumulating latencies.

Parallelism, in general, is DOA if you need any significant exchange at all. 
As you say, that makes the effort effectively sequential. The cases where it 
works tend to use order-independent accumlators and fairly large chunks of 
accumulation.

>> In today's world, it's impossible to consider any
>> feature in a purely sequential manner. The expressiveness gain (if any) 
>> is
>> secondary. And the OP was talking about parallelism, not generators.
>
> Of course you can. Nobody is capable to write anything more or less large 
> in a data event-controlled way. All logic of exchanges between parties is 
> always strictly sequential: you compute, publish data, get subscribed 
> data, compute again.

Right. If there's a lot of exchange, it's not a candidate for parallelism.

>> The generator proposal as expressed in AI12-0197-1 is just too expensive 
>> to
>> consider for a purely sequential feature.
>
> I don't see much use in the proposal. The key feature must be the points 
> where the "task" yields control, enters non-busy wait for an external 
> event. Ideally it must be shaped as an accept statement or an entry call.

Jean-Pierre Rosen proposed a ""passive task" feature as an alternative to 
the generator proposal. It uses the existing task syntax, but gets rid of 
the thread of control.

Of course, Janus/Ada implements all tasks that way today, so I don't see a 
lot of benefit to that. But I can see where it might help other 
implementations.

>> For Janus/Ada on Windows, we'd
>> either have to throw away 1/3 of the back-end of the compiler (and 
>> generally
>> use slower instructions in some cases, impacting all code), or implement
>> these *exactly* as we do tasks (with a TCB, context switching, and so 
>> on).
>> [Not to mention the extensive changes needed to the front-end.] For
>> something to be worth that sort of effort, it has to benefit a large
>> percentage of programs. This (as a purely sequential feature) doesn't do
>> that.
>
> I don't understand the point. All tasks are sequential. That didn't 
> prevent them being used in parallel computing.

The feature as proposed can't be used in a task unless one (manually) adds 
locking, meaning you still have all of the possibilities for deadlock and 
race conditions. I believe that if we're going to advance parallelism at 
all, we have to do something to make it possible to write (sufficiently 
restricted and compile-time checked) code where one doesn't need to worry 
about those things. After all, the main reason that it's too hard to write 
parallel code is the need to carefully consider every possible deadlock and 
race condition. Otherwise, something like Parafin would provide everything 
needed and Ada clearly would be the choice for parallel code. ;-)

So I don't see any reason to add any new sequential features that add to, 
rather than reduce, the possibilities of deadlock and races. Certainly not 
if they take a lot of effort to implement, and don't seem to have general 
utility.

                                           Randy.


  reply	other threads:[~2016-06-24 23:00 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 [this message]
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
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