[llvm-dev] Queries Regarding Usage of PGOInstrumentation Passes instead of Deprecated ProfileInfo
Easwaran Raman via llvm-dev
llvm-dev at lists.llvm.org
Tue Aug 21 15:11:34 PDT 2018
I have fixed the rounding issue recently at r339835.
- Easwaran
On Tue, Aug 21, 2018 at 2:20 PM, Malhar Thakkar <cs13b1031 at iith.ac.in>
wrote:
> I forgot to mention that I'm using LLVM 5.0.
>
> Is the problem something that was fixed post LLVM 5.0?
>
>
>
> Thank you.
>
> Regards,
> Malhar
>
> On Wed, Aug 15, 2018 at 5:14 PM, Xinliang David Li <xinliangli at gmail.com>
> wrote:
>
>>
>>
>> On Wed, Aug 15, 2018 at 1:28 PM Xinliang David Li <xinliangli at gmail.com>
>> wrote:
>>
>>>
>>>
>>> On Wed, Aug 15, 2018 at 12:46 PM Malhar Thakkar <cs13b1031 at iith.ac.in>
>>> wrote:
>>>
>>>> Thank you so much for your response.
>>>>
>>>> On Wed, Aug 15, 2018 at 3:08 PM, Xinliang David Li <
>>>> xinliangli at gmail.com> wrote:
>>>>
>>>>>
>>>>>
>>>>> On Wed, Aug 15, 2018 at 7:36 AM Malhar Thakkar via llvm-dev <
>>>>> llvm-dev at lists.llvm.org> wrote:
>>>>>
>>>>>> Hey all,
>>>>>>
>>>>>> I have a piece of code (written in LLVM 2.8) which uses profiling
>>>>>> results produced by ProfileInfo. It essentially computes the number of
>>>>>> iterations performed by a loop from the profiling information available.
>>>>>> The code snippet in my pass looks something like this.
>>>>>>
>>>>>> BasicBlock *header = loop->getHeader();
>>>>>> ProfileInfo &pi = getAnalysis< ProfileInfo >();
>>>>>> for(pred_iterator i=pred_begin(header), e=pred_end(header); i!=e; ++i)
>>>>>> {
>>>>>> BasicBlock *pred = *i;
>>>>>>
>>>>>> const double edgeCount = *pi.getEdgeWeight*( ProfileInfo::Edge(pred,header) );
>>>>>> */* Some code */*
>>>>>> }
>>>>>>
>>>>>> Now, since ProfileInfo has been deprecated and we have
>>>>>> PGOInstrumentation passes along with BranchProbability and BlockFrequency,
>>>>>> I wish to update the above snippet, in particular, obtaining the edge
>>>>>> weights (highlighted in the code above) using the new tools.
>>>>>>
>>>>>> In order to do that, I'm first generating edge count profile by the
>>>>>> PGOInstrumentationGen pass and then interpreting the edge count profile
>>>>>> with PGOInstrumentationUse.
>>>>>>
>>>>>> In the original code, where I had
>>>>>> au.addRequired< ProfileInfo >(), I now have
>>>>>>
>>>>>>
>>>>>> *au.addRequired< BlockFrequencyInfoWrapperPass >();au.addRequired<
>>>>>> BranchProbabilityInfoWrapperPass >();*
>>>>>> Now, I have the following queries.
>>>>>>
>>>>>> - How do I use the edge count and branch weights data obtained
>>>>>> using PGOInstrumentationUse in my pass and replace the
>>>>>> *getEdgeWeight()* from ProfileInfo?
>>>>>>
>>>>>>
>>>>> You can do
>>>>> BPI.getEdgeProbability(Src, Dest).scale(BFI.getBlockProfil
>>>>> eCount(Src));
>>>>>
>>>>
>>>> I tried doing this but there are some semantic issues that I'm facing.
>>>> There is a loop in my program which I know is a hot loop since it is the
>>>> only loop inside the function main() and essentially, all the computations
>>>> are performed within this function via function calls. However, when I
>>>> perform getBlockProfileCount(Src) where Src is the preheader of the
>>>> said loop, I find that it returns zero and upon further investigation, I
>>>> found that the entry frequency for the function was 6148904414811 and the
>>>> block frequency for the aforementioned preheader block was 6148904394768
>>>> and after performing udiv, since it is an integer division,
>>>> getBlockProfileCount(Src) returned zero and hence, my code infers that it
>>>> is not a hot loop when in fact it clearly is.
>>>>
>>>
>> Easwaran, I think this is a bug that needs to be fixed.
>>
>> David
>>
>>
>>
>>>
>>>> Any suggestions on why this may be happening?
>>>>
>>>
>>> What is function entry's profile count? Note it is different from entry
>>> frequency (which is synthetic). You can find the function entry's count
>>> from entry's prof meta data. There is also an API to get it.
>>>
>>>
>>>>
>>>>>
>>>>>>
>>>>>> - If I call *getBlockProfileCount() *from the BlockFrequency
>>>>>> pass, will that give me the data read during PGOInstrumentationUse or data
>>>>>> based on static analysis? In other words, does the data obtained during
>>>>>> PGOInstrumentationUse "propagate" to BlockFrequency and BranchProbability?
>>>>>>
>>>>>>
>>>>>> Correct.
>>>>>
>>>> Just to confirm, when you say "correct", do you mean to say that the
>>>> information in fact does get propagated to BlockFrequency and
>>>> BranchProbability? If yes, how does the propagation take place?
>>>>
>>>
>>> Branch probability info analysis pass will use the profile meta data
>>> (read in from profile data and annotated in the IR) and use that to compute
>>> branch probability. The block frequency propagation pass uses BPI info to
>>> compute relative block frequencies. The actual profile count of the
>>> function entry is kept, and a block's actual profile count can then be
>>> recomputed using Entry Frequency, block frequency, and the entry count data.
>>>
>>> David
>>>
>>>
>>>
>>>>
>>>>
>>>> Thank you.
>>>>
>>>> Regards,
>>>> Malhar
>>>>
>>>>>
>>>>> David
>>>>>
>>>>>
>>>>>
>>>>>> Thank you.
>>>>>>
>>>>>>
>>>>>> Regards,
>>>>>> Malhar
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> ᐧ
>>>>>> _______________________________________________
>>>>>> LLVM Developers mailing list
>>>>>> llvm-dev at lists.llvm.org
>>>>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>>>>>
>>>>>
>>>> ᐧ
>>>>
>>>
> ᐧ
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20180821/642f8afc/attachment.html>
More information about the llvm-dev
mailing list