[llvm-dev] [SPIR/PTX] Divergence analysis for BasicBlocks

Zaks, Ayal via llvm-dev llvm-dev at lists.llvm.org
Sun Jul 23 05:06:09 PDT 2017


Understood; barriers can only be introduced in places where whenever one lane arrives all are sure to follow.


> Yes? Where is allActive defined, I couldn't find it.

See “Definition 12 (Static All-Active Program Point)” in subsection 5.6.11; which also provides one way of computing it, based on knowing which branches are divergent.

This btw is analogous to LoopAccessInfo::blockNeedsPredication(); which is admittedly overly conservative due to the (current) nature of its clients.

From: Alexandre Isoard [mailto:alexandre.isoard at gmail.com]
Sent: Friday, July 21, 2017 18:29
To: Zaks, Ayal <ayal.zaks at intel.com>
Cc: llvm-dev <llvm-dev at lists.llvm.org>
Subject: Re: [llvm-dev] [SPIR/PTX] Divergence analysis for BasicBlocks

My current strategy is to store all the BB in the InfluenceRegion (see the DivergencePropagator) of a divergent branch.

Basically, I want an over-approximation of isControlDivergent (or an under approximation of allActive) so that I can introduce barriers, there, safely.

On Fri, Jul 21, 2017 at 4:21 PM, Alexandre Isoard <alexandre.isoard at gmail.com<mailto:alexandre.isoard at gmail.com>> wrote:
Hello,

Yes? Where is allActive defined, I couldn't find it.

Basically, a BB is control divergent if it's execution depends on a branch that itself depends on a divergent ssa value.

On Fri, Jul 21, 2017 at 4:13 PM, Zaks, Ayal <ayal.zaks at intel.com<mailto:ayal.zaks at intel.com>> wrote:
What would be the definition of “isControlDivergent(BasicBlock*)”; the complementary of “allActive(BasicBlock*)” – blocks known to execute all lanes, whenever reached? Note the (distinct) term “rewire targets” that Ralf Karrenberg used in his thesis.

From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org<mailto:llvm-dev-bounces at lists.llvm.org>] On Behalf Of Alexandre Isoard via llvm-dev
Sent: Friday, July 14, 2017 20:53
To: llvm-dev <llvm-dev at lists.llvm.org<mailto:llvm-dev at lists.llvm.org>>
Subject: [llvm-dev] [SPIR/PTX] Divergence analysis for BasicBlocks

Hello,

It seems to me that our current DivergenceAnalysis does not save which BasicBlocks may suffer from divergent control. Am I correct?

I want to modify our DivergenceAnalysis to add a "bool isControlDivergent(BasicBlock*) const" method and save in the divergence propagator the basicblock that are divergent. I am not sure that is entirely correct, if you have input on that please let me know.

That being said, to ease my debugging process I want to introduce a -dot-divergence pass that dump the cfg with divergent basicblocks in red. I was wondering if our dot printer is flexible enough to allow me to also print in color the SSA variables that are divergent.

Thanks.

--
Alexandre Isoard

---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.



--
Alexandre Isoard



--
Alexandre Isoard
---------------------------------------------------------------------
Intel Israel (74) Limited

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20170723/47878f72/attachment.html>


More information about the llvm-dev mailing list