[Polly] Reduction dependences [V3]

Johannes Doerfert jdoerfert at codeaurora.org
Fri Jun 20 09:47:59 PDT 2014


r211369

--

Johannes Doerfert
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by
The Linux Foundation


-----Original Message-----
From: Tobias Grosser [mailto:tobias at grosser.es] 
Sent: Friday, June 20, 2014 12:54 AM
To: Johannes Doerfert
Cc: llvm-commits at cs.uiuc.edu; 'Sebastian Pop'
Subject: Re: [Polly] Reduction dependences [V3]

On 19/06/2014 23:12, Johannes Doerfert wrote:
> What do you think?
>
>> >On 19/06/2014 20:02, Johannes Doerfert wrote:
>>> > >I put it into a loop now, this copy and paste code over multiple 
>>> > >lines makes my dizzy sometimes.
>> >Great, a perfect use of range based for loops.
> I have two sets of dependences to handle, so no range loop:( It still 
> looks much better in my opinion than the repetition did.

Anyhow. ;-)

> // Reduction dependences are not included in TYPE_ALL dependences 
> because we // can ignore them during the scheduling. This is the case 
> since the order in // which the reduction statements are executed does 
> not matter. However, if // they are executed in parallel we need to 
> take additional measures (e.g., // privatization) to ensure a correct 
> result.

Works.

>>> > >+void Dependences::addPrivatizationDependences() {
>>> > >+  isl_union_map *PrivRAW, *PrivWAW, *PrivWAR, *TransClosure;
>>> > >+
>>> > >+  // The transitive closure might be over approximated but we 
>>> > >+ only use
> it to
>>> > >+  // compute the privatization dependences. Thus, 
>>> > >+ overapproximation
> will lead
>>> > >+  // "only" to more conservative privatization dependences.
>> >Can this approximation introduce dependences to statements that are 
>> >scheduled earlier?
> I don't know but I doubt it since we start only with strict forward 
> dependences.
> We need to ask Sven if we somehow can get backward dependences due to 
> overapproximation.

Thinking more about it, I am afraid with an arbitrary schedule and any kind
of approximation, we may cause backwards dependences.

>> >I am asking because I would like you to_verify_  that there is no 
>> >way that there will be wrong dependences introduced. If we are not 
>> >sure, we need to look at the dependences in the context of the 
>> >schedule and remove all negative dependences. I would like to avoid
this.
> Why do we need the schedule?

To understand if a dependency is forward.

S[i] -> S[i+1] is a backwards dependency in case the schedule is S[i] ->
[-i].

> We start with dependences strict forward in some direction and the 
> result should look the same. So we could verify it like this until we 
> know for sure there are no backward dependences created by the 
> transitive closure.
>
> I was thinking we could do it like this:
>
>   // The transitive closure might be over approximated but we only use it
to
>   // compute the privatization dependences. Thus, overapproximation will
lead
>   // "only" to more conservative privatization dependences. However, we
take
>   // precautions to ensure only forward dependences are created. This 
> will ensure
>   // that we won't create dependency cycles.
>   TransClosure = 
> isl_union_map_transitive_closure(isl_union_map_copy(RED),
> 0);
>
>   // [NEW] check for non positive dependences in the transitive 
> closure and substract them

Right. Just remove any backwards dependences according to the schedule from
the transitive closure.

>>> > >+  // FIXME: Reduction dependences prevent dce at the moment
>> >Good catch. Why do we need to fix anything here? how would we fix it?
> We dont have to fix anything now, I reformulated the comment to make 
> it more
> clear:
> // FIXME: Unary reductions will prevent dce as they will look live.
> //        We should split reduction dependences into binary and unary
> //        into RAW and WAW) to avoid this problem.
>
> Later we could split reduction dependences into reduction RAW and 
> reduction WAW and only add the RAW ones to the live set. The idea is 
> that binary reductions are live at the end while unary are not.
>
> Should I remove the comment as it is only a concern for the not yet 
> implemented unary reductions or should I leave it ?

Yes, just drop it.

As I think that it is highly unlikely that the over approximation will cause
any troubles, I am OK with you committing this patch as it is now. 
You can (and should) commit a subsequent patch that fixes the loop hole in
the overapproximation.

Tobias




More information about the llvm-commits mailing list