[LLVMdev] RFC - Extending ProfileInfo to support external profiles
Evan Cheng
evan.cheng at apple.com
Fri Sep 6 20:43:29 PDT 2013
Sent from my iPad
On Sep 6, 2013, at 10:01 AM, Chandler Carruth <chandlerc at google.com> wrote:
>
> On Fri, Sep 6, 2013 at 6:00 AM, Diego Novillo <dnovillo at google.com> wrote:
>> Is my understanding more or less correct?
>
> Probably for all I know. I'm not aware of anyone actively maintaining or keeping these pieces working. AFAICT, there have been 3-4 projects that started hacking on this and didn't finish, and frankly the result is a mess. It's not clear than any of it really works today.
>
>> If so, I would like to
>> make three main changes:
>>
>> 1- Unify profile loading so that it only talks to the basic
>> analysis API. Here, I would like to change the way that
>> profile information is reflected in the program. Currently,
>> the compiler loads data from the profile file into 4 arrays
>> inside ProfileInfo. This is then reflected into the CFG for
>> the corresponding function.
>>
>> Instead, I would like to reflect profile info as metadata in
>> the IR. For instance, functions seldom called in the profile
>> could be annotated with the 'cold' attribute in the IR. Block
>> frequency is more straightforward: we add the frequency data
>> to the first instruction of the block.
>>
>> Things like that. The problem here is that different profiling
>> mechanisms will have different kinds of data. We will need
>> ways of translating those into metadata that is then served
>> from the analysis API. For example, how do we deal with value
>> profilers?
>>
>> For now, I'm focusing on the most common types of profilers.
>> These tend to use block/edge frequencies, which are more
>> straightforward to convert.
>
> I really think you should ignore the existing profile support in LLVM. ALl of it. I actually think we should remove all of it, but that can happen later.
I haven't look at the profiling support recently. But this doesn't quite match my understanding. Bob, do you have comments?
Evan
>
> I would build whatever passes and infrastructure you need in order to load your profile data, in whatever format makes sense, and annotate the IR with metadata. I would just build them from scratch. I don't think there is anything to be gained from trying toclean up the existing profiling infrastructure when you'll end up re-using almost none of it, you will have different constraints when dealing with profiles from sampling tools, and will still have a common IR-level interface in the metadata.
>
>>
>> 2- Passes should not need to be aware that profile
>> information exists. They would make the usual calls to the
>> analysis API, which will use profile data, if available.
>>
>> With this, I want to make optimizers automatically make
>> better decisions when profile information exists.
>
> I believe this has already been done. I'm not aware of any optimization passes in use today that will need changes here.
>
>>
>> 3- Profile data should be flexible wrt code drift. This is
>> something that the profile loader should deal with. It
>> currently fails when the profile is out of sync with the shape
>> of the IR. In the presence of stale profile:
>> (a) Do not fail hard.
>> (b) Make conservative decisions with the annotations it
>> generates.
>> (c) Provide feedback to the user about the staleness of the
>> profile (e.g. % of samples/records dropped from the profile).
>
> Yes, in designing your own (from the ground up) loader, these will be important issues.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at 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/20130906/db392751/attachment.html>
More information about the llvm-dev
mailing list