[LLVMdev] Separating loop nests based on profile information?
Philip Reames
listmail at philipreames.com
Thu Jan 8 12:37:56 PST 2015
On 01/07/2015 06:42 PM, Adam Nemet wrote:
>
>>
>> How does this compare with classical approaches of loop peeling,
>> partitioning, fission, or whatever you might call it? Is there any
>> literature behind this approach or some literature it should be
>> compared with? (I genuinely don't know this area that well, so I'm of
>> little help here…)
>
> I think it’s pretty different from loop distribution/fission. In loop
> distribution, in order to split the loop into multiple consecutive
> loops, you need to reason about the memory references so having a
> function call makes that difficult/impossible. Phillip’s idea works
> around this exact issue.
>
> I explored this space quite a bit recently because we’re working on a
> proposal to add loop distribution to LLVM. I hope to send out the
> proposal this week.
Just to note, I'm going to be very interested in seeing this. I have
concerns about profitability, but having a mechanism is clearly a good
thing. :)
Are you also looking at loop fusion? I've seen that come up in practice
for a few cases where it would *really* help. Generally, filter/reduce
patterns implemented by hand. Nowhere near the top of my priority list,
but if you happened to be working on it, I'm happy to help review and
brainstorm.
>
> So I see no issue with trying to handle loops with low-probablity
> function calls with this and fully self-contained loops with classical
> loop distribution.
>
> Thanks,
> Adam
>
>> Some of your points I have quick feedback on:
>>
>> Points for discussion:
>>
>> * Is using profile information for this purpose even a
>> reasonable thing to do?
>>
>> Yes!
>>
>> * I chose to implement this without relying on the existing
>> block frequency analysis. My reasoning was that a) this is a
>> rarely taken case and adding an expensive analysis dependency
>> probably wasn't worthwhile and b) that block frequency
>> analysis was more expensive/precise than I really needed. Is
>> this reasonable?
>>
>> I think we should always use the analyses. Either BlockFrequency or
>> BranchProbability. I think probably both in the common joint usage
>> (frequency of the loop header combined with probability of the cold
>> region).
>>
>> * If so, is the notion of 'rareness' of a loop block something
>> that's worth extracting out on it's own and reusing? Are
>> there other similar uses anyone can think of?
>> * Currently, I'm only supporting a fairly small set of
>> controlling conditions. Are there important cases I'm not
>> considering?
>>
>> To both of these, I think the general combination to use is to
>> identify the set of blocks dominated by a block which is in the loop
>> body of a hot loop, and is cold relative to the other successors of
>> its predecessor(s). These form cold "regions" as I think of them
>> without requiring the complexity of the region analysis.
>>
>> * Since the rarest latch is often deep in a loop - with other
>> "if (X) continue;" (i.e. latches) before it - this tends to
>> create loops with multiple exiting blocks. Some of the
>> existing passes might not deal with this well, is that a
>> major concern? Suggestions for how to analysis and validate?
>>
>> I'm somewhat concerned about this, but want to think more about the
>> fundamental transformation.
>>
>> * Currently, I've structured this as pulling off the rarest
>> latch as an outer iteration. I could also pull off the most
>> popular latch as an inner iteration. This might give
>> different tradeoffs; thoughts?
>>
>> Generally, any thoughts anyone have on the problem or approach
>> are welcome. I'm not particular attached to the particular
>> approach laid out here and if there's a more advantageous
>> approach, all the better.
>>
>> Thanks for pushing on this! ;] Now I need to go and ponder a lot so i
>> can reply more deeply on the actual transform.
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu
>> <mailto:LLVMdev at cs.uiuc.edu>http://llvm.cs.uiuc.edu
>> <http://llvm.cs.uiuc.edu/>
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20150108/46c07eda/attachment.html>
More information about the llvm-dev
mailing list