comp.lang.ada
 help / color / mirror / Atom feed
From: Brad Moore <brad.moore@shaw.ca>
Subject: Re: GNAT and Tasklets
Date: Sat, 20 Dec 2014 10:58:32 -0700
Date: 2014-12-20T10:58:32-07:00	[thread overview]
Message-ID: <aNilw.947645$Rp.733234@fx23.iad> (raw)
In-Reply-To: <4s9b9ah19vch9lshchrbi3vndv0ktan5i4@4ax.com>

On 14-12-20 09:49 AM, Dennis Lee Bieber wrote:
> On Fri, 19 Dec 2014 11:35:05 -0700, Brad Moore <brad.moore@shaw.ca>
> declaimed the following:
>
>>
>> I haven't listed all the semantics but for the questions you ask,
>> each arm of the parallel block is a separate thread of execution (which
>> we have been calling a tasklet).
>>
>> Each tasklet starts off with its own local declaration of Total,
>> initialized to 0, which is the Identity value for the reduction.
>>
>> So, for the top Total, you end up with {Top_}Total := 1 + A + B;
>
> 	There is no way I would ever interpret /that/ result... I'd actually
> expect an optimizing compiler to see that the result of incrementing Total
> is thrown away by the next statement in the block.

You are absolutely right. I had missed that Total wasn't being added 
back in on the second statement. I don't know if Dmitry had intended 
that in his original question, or had missed that as well.

In any case, hopefully the question has been answered. The useless 
increment of total in that case has no effect on the result, and you end 
up with

Total = A + B + C + D

Sorry if this was confusing people.

Each branch of the parallel block is a separate thread of execution. 
Within each branch the sequence of statements is executed sequentially.

>
>> for the bottom Total, you end up with {Bottom_}Total := C + D;
>>
>> Then during the reduction phase, those two results get reduced using the
>> reduction operation, which in this case is "+".
>>
>> So the end result is Total = 1 + A + B + C + D;
>>
>
> 	So your reduction phase becomes the equivalent of a summing
> operation...
>
> 	par_sum(	1,
> 				A + B,
> 				C + D	)	{of course, to do this right requires deferred
> 								evaluation of the parameters}

As mentioned above, the reduction only involves summing the results from 
each branch, and 1 is not part of the first result.

so
      par_sum(A + B, C + D)

>
> What if you want the result to be a product?
>

That's why reductions are tricky. It depends on the operation, For 
integer addition and subtraction, the reducing operation is "+", and the 
identity value is 0.

For products and divisions, the reducing operation is "*", and the 
identity value is 1.

The identity value is a value that when applied as a parameter using the 
reducting operation, yields the same result.

For elementary types such as integer and float, the compiler should be 
able to choose a default reducer and identity, but for user defined 
types, the compiler is not likely going to be able to determine a 
suitable reducer function, or identity value, so the programmer needs to 
have a way to specify this.

As I mentioned already, for parallel blocks it is questionable whether 
you even need to have automatic reduction support. The complexity of the 
feature may not be worth adding, though it does seem to be needed for 
parallel loops.


Brad


  reply	other threads:[~2014-12-20 17:58 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-10 16:31 GNAT and Tasklets vincent.diemunsch
2014-12-11 10:02 ` Jacob Sparre Andersen
2014-12-11 16:30   ` Anh Vo
2014-12-11 18:15     ` David Botton
2014-12-11 21:45     ` Egil H H
2014-12-11 23:09   ` Randy Brukardt
2014-12-12  2:28     ` Jacob Sparre Andersen
2014-12-12  8:46   ` vincent.diemunsch
2014-12-12 23:33     ` Georg Bauhaus
2014-12-13  2:06   ` Brad Moore
2014-12-13  6:50     ` Dirk Craeynest
2014-12-14  0:18 ` Hubert
2014-12-14 21:29   ` vincent.diemunsch
2014-12-16  5:09     ` Brad Moore
2014-12-17 13:24       ` vincent.diemunsch
2014-12-16  4:42 ` Brad Moore
2014-12-17 13:06   ` vincent.diemunsch
2014-12-17 20:31     ` Niklas Holsti
2014-12-17 22:08       ` Randy Brukardt
2014-12-17 22:52         ` Björn Lundin
2014-12-17 23:58           ` Randy Brukardt
2014-12-18 10:39             ` Björn Lundin
2014-12-18 23:01               ` Randy Brukardt
2014-12-19  8:39                 ` Natasha Kerensikova
2014-12-19 23:39                   ` Randy Brukardt
2014-12-19  8:59                 ` Dmitry A. Kazakov
2014-12-19 11:56                 ` Björn Lundin
2014-12-20  0:02                   ` Randy Brukardt
2014-12-18  8:42       ` Dmitry A. Kazakov
2014-12-18  8:56         ` vincent.diemunsch
2014-12-18  9:36           ` Dmitry A. Kazakov
2014-12-18 10:32             ` vincent.diemunsch
2014-12-18 11:19               ` Dmitry A. Kazakov
2014-12-18 12:09                 ` vincent.diemunsch
2014-12-18 13:07                   ` Dmitry A. Kazakov
2014-12-19 10:40                   ` Georg Bauhaus
2014-12-19 11:01                     ` Dmitry A. Kazakov
2014-12-19 16:42                       ` Brad Moore
2014-12-19 17:28                         ` Dmitry A. Kazakov
2014-12-19 18:35                           ` Brad Moore
2014-12-19 20:37                             ` Dmitry A. Kazakov
2014-12-20  1:05                               ` Randy Brukardt
2014-12-20 17:36                                 ` Brad Moore
2014-12-21 18:23                                   ` Brad Moore
2014-12-21 19:21                                     ` Shark8
2014-12-21 19:45                                       ` Brad Moore
2014-12-21 23:21                                         ` Shark8
2014-12-22 16:53                                           ` Brad Moore
2014-12-21 21:35                                     ` tmoran
2014-12-21 22:50                                       ` Brad Moore
2014-12-21 23:34                                         ` Shark8
2014-12-22 16:55                                           ` Brad Moore
2014-12-22 23:06                                   ` Randy Brukardt
2014-12-20 16:49                             ` Dennis Lee Bieber
2014-12-20 17:58                               ` Brad Moore [this message]
2014-12-19 19:43                           ` Peter Chapin
2014-12-19 20:45                           ` Georg Bauhaus
2014-12-19 20:56                             ` Dmitry A. Kazakov
2014-12-19 23:55                           ` Randy Brukardt
2014-12-19 23:51                       ` Randy Brukardt
2014-12-18 22:33               ` Randy Brukardt
2014-12-19 13:01                 ` GNAT�and Tasklets vincent.diemunsch
2014-12-19 17:46                   ` GNAT?and Tasklets Brad Moore
2014-12-20  0:39                   ` GNAT and Tasklets Peter Chapin
2014-12-20  9:03                     ` Dmitry A. Kazakov
2014-12-20  0:58                   ` GNAT�and Tasklets Randy Brukardt
2014-12-18  9:34         ` GNAT and Tasklets Niklas Holsti
2014-12-18  9:50           ` Dmitry A. Kazakov
2014-12-17 21:08     ` Brad Moore
2014-12-18  8:47       ` vincent.diemunsch
2014-12-18 21:58         ` Randy Brukardt
2014-12-17 22:18     ` Randy Brukardt
2014-12-18  0:56     ` Shark8
replies disabled

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