This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH][RFC] Add new ipa-reorder pass
- From: Martin Liška <mliska at suse dot cz>
- To: Evgeny Kudryashov <kudryashov at ispras dot ru>
- Cc: GCC Patches <gcc-patches at gcc dot gnu dot org>, Jan Hubicka <hubicka at ucw dot cz>, Nathan Sidwell <nathan at acm dot org>, v dot barinov at samsung dot com
- Date: Thu, 26 Sep 2019 11:37:17 +0200
- Subject: Re: [PATCH][RFC] Add new ipa-reorder pass
- References: <12f761ce-012d-f9be-ceef-6ad8de6324e8@suse.cz> <90822a5d3a0abefc1a9ac753e7bbe163@ispras.ru>
On 9/25/19 6:36 PM, Evgeny Kudryashov wrote:
> On 2019-09-19 11:33, Martin Liška wrote:
>> Hi.
>>
>> Function reordering has been around for quite some time and a naive
>> implementation was also part of my diploma thesis some time ago.
>> Currently, the GCC can reorder function based on first execution, which
>> happens with PGO and LTO of course. Known limitation is that the order
>> is preserved only partially as various symbols go into different
>> LTRANS partitions.
>>
>> There has been some research in the area and I would point out the
>> Facebook paper
>> ([1]) and Sony presentation ([2]). Based on that, I decided to make a
>> new implementation
>> in the GCC that does the same (in a proper way). First part of the
>> enablement are patches
>> to ld.bfd and ld.gold that come up with a new section .text.sorted,
>> that is always sorted.
>>
>> Thoughts? I would definitely welcome any interesting measurement on a
>> bigger load.
>>
>> Martin
>>
>
> Hi, Martin!
>
> Some time ago I tried to do the same but didn't go that far.
Hello.
>
> I also used the C3 algorithm, except for the fact that ipa_fn_summary contains information about size and time (somehow missed it).
Which is a key part of the algorithm as one wants not to cross a page size boundary (in ideal case).
> The linker option --sort-section=name was used for prototyping. It, obviously, sorts sections and allows to place functions in the desired order (by placing them into named sections .text.sorted.NNNN, without patching linkers or adjusting linker scripts).
Yes, that can work, but having the new section explicitly sorted will not require a passing of an option to linker.
> For testing my implementation I used several benchmarks from SPEC2006: perlbench, sjeng and gobmk. Unfortunately, no significant positive changes were obtained.
>
> I've tested the proposed pass on perlbench with train and reference input (PGO+LTO as a base) but couldn't obtain stable results (still unclear environment or perlbench specific reasons).
Yes, it's quite difficult to measure something. One needs a huge .text section of a binary and a test-case which has a flat profile.
I was able to measure results on the gcc itself.
Martin
>
> Evgeny.
>