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

Zaks, Ayal via llvm-dev
Sun, 23 Jul 2017 12:06:09 -0000

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>