[PATCH] Remove arc profile histogram in non-LTO mode.

Bin.Cheng amker.cheng@gmail.com
Thu Sep 20 10:45:00 GMT 2018


On Thu, Sep 20, 2018 at 5:26 PM Jan Hubicka <hubicka@ucw.cz> wrote:
>
> > On Thu, Sep 20, 2018 at 2:11 AM Martin Liška <mliska@suse.cz> wrote:
> > >
> > > Hello.
> > >
> > > I've been working for some time on a patch that simplifies how we set
> > > the hotness threshold of basic blocks. Currently, we calculate so called
> > > arc profile histograms that should identify edges that cover 99.9% of all
> > > branching. These edges are then identified as hot. Disadvantage of the approach
> > > is that it comes with significant overhead in run-time and GCC related code
> > > is also not trivial. Moreover, anytime a histogram is merged after an instrumented
> > > run, the resulting histogram is misleading.
> > >
> > > That said, I decided to simplify it again, remove usage of the histogram and return
> > > to what we have before (--param hot-bb-count-fraction). That basically says that
> > > we consider hot each edge that has execution count bigger than sum_max / 10.000.
> > >
> > > Note that LTO+PGO remains untouched as it still uses histogram that is dynamically
> > > calculated by read arc counts.
> > Hi,
> > Does this affect AutoFDO stuff?  AutoFDO is broken and I am fixing it
> > now, on the basis of current code.
>
> This is indpendent of Auto-FDO. There we probably can define cutoffs for hot-cold
> partitions in the tool translating global data into per-file data read by GCC.
> It is great you will take a deper look at autoFDO. it indeed needs work!
>
> The patch is OK, thank for working on it!  Histograms was added by google as
> bit of experiment, but I do not think they turned out to be useful. The data
I did some experiments showing it is somehow useful, for autoFDO.  To
which extend it is useful remains a question I need to investigate
later.

Thanks,
bin
> produced by them was not very related to what the IPA profile generation produces
> and thus it did not seem to match reality very well.
>
> Honza
> >
> > Thanks,
> > bin
> > >
> > > Note the statistics of the patch:
> > >   19 files changed, 101 insertions(+), 1216 deletions(-)
> > >
> > > I'm attaching file sizes of SPEC2006 int benchmark.
> > >
> > > Patch survives testing on x86_64-linux-gnu machine.
> > > Ready to be installed?
> > >
> > > Martin
> > >
> > > gcc/ChangeLog:
> > >
> > > 2018-09-19  Martin Liska  <mliska@suse.cz>
> > >
> > >         * auto-profile.c (autofdo_source_profile::read): Do not
> > >         set sum_all.
> > >         (read_profile): Do not add working sets.
> > >         (read_autofdo_file): Remove sum_all.
> > >         (afdo_callsite_hot_enough_for_early_inline): Remove const
> > >         qualifier.
> > >         * coverage.c (struct counts_entry): Remove gcov_summary.
> > >         (read_counts_file): Read new GCOV_TAG_OBJECT_SUMMARY,
> > >         do not support GCOV_TAG_PROGRAM_SUMMARY.
> > >         (get_coverage_counts): Remove summary and expected
> > >         arguments.
> > >         * coverage.h (get_coverage_counts): Likewise.
> > >         * doc/gcov-dump.texi: Remove -w option.
> > >         * gcov-dump.c (dump_working_sets): Remove.
> > >         (main): Do not support '-w' option.
> > >         (print_usage): Likewise.
> > >         (tag_summary): Likewise.
> > >         * gcov-io.c (gcov_write_summary): Do not dump
> > >         histogram.
> > >         (gcov_read_summary): Likewise.
> > >         (gcov_histo_index): Remove.
> > >         (gcov_histogram_merge): Likewise.
> > >         (compute_working_sets): Likewise.
> > >         * gcov-io.h (GCOV_TAG_OBJECT_SUMMARY): Mark
> > >         it not obsolete.
> > >         (GCOV_TAG_PROGRAM_SUMMARY): Mark it obsolete.
> > >         (GCOV_TAG_SUMMARY_LENGTH): Adjust.
> > >         (GCOV_HISTOGRAM_SIZE): Remove.
> > >         (GCOV_HISTOGRAM_BITVECTOR_SIZE): Likewise.
> > >         (struct gcov_summary): Simplify rapidly just
> > >         to runs and sum_max fields.
> > >         (gcov_histo_index): Remove.
> > >         (NUM_GCOV_WORKING_SETS): Likewise.
> > >         (compute_working_sets): Likewise.
> > >         * gcov-tool.c (print_overlap_usage_message): Remove
> > >         trailing empty line.
> > >         * gcov.c (read_count_file): Read GCOV_TAG_OBJECT_SUMMARY.
> > >         (output_lines): Remove program related line.
> > >         * ipa-profile.c (ipa_profile): Do not consider GCOV histogram.
> > >         * lto-cgraph.c (output_profile_summary): Do not stream GCOV
> > >         histogram.
> > >         (input_profile_summary): Do not read it.
> > >         (merge_profile_summaries): And do not merge it.
> > >         (input_symtab): Do not call removed function.
> > >         * modulo-sched.c (sms_schedule): Do not print sum_max.
> > >         * params.def (HOT_BB_COUNT_FRACTION): Reincarnate param that was
> > >         removed when histogram method was invented.
> > >         (HOT_BB_COUNT_WS_PERMILLE): Mention that it's used only in LTO
> > >         mode.
> > >         * postreload-gcse.c (eliminate_partially_redundant_load): Fix
> > >         GCOV coding style.
> > >         * predict.c (get_hot_bb_threshold): Use HOT_BB_COUNT_FRACTION
> > >         and dump selected value.
> > >         * profile.c (add_working_set): Remove.
> > >         (get_working_sets): Likewise.
> > >         (find_working_set): Likewise.
> > >         (get_exec_counts): Do not work with working sets.
> > >         (read_profile_edge_counts): Do not inform as sum_max is removed.
> > >         (compute_branch_probabilities): Likewise.
> > >         (compute_value_histograms): Remove argument for call of
> > >         get_coverage_counts.
> > >         * profile.h: Do not make gcov_summary const.
> > >
> > > libgcc/ChangeLog:
> > >
> > > 2018-09-19  Martin Liska  <mliska@suse.cz>
> > >
> > >         * libgcov-driver.c (crc32_unsigned): Remove.
> > >         (gcov_histogram_insert): Likewise.
> > >         (gcov_compute_histogram): Likewise.
> > >         (compute_summary): Simplify rapidly.
> > >         (merge_one_data): Do not handle PROGRAM_SUMMARY tag.
> > >         (merge_summary): Rapidly simplify.
> > >         (dump_one_gcov): Ignore gcov_summary.
> > >         (gcov_do_dump): Do not handle program summary, it's not
> > >         used.
> > >         * libgcov-util.c (tag_summary): Remove.
> > >         (read_gcda_finalize): Fix coding style.
> > >         (read_gcda_file): Initialize curr_object_summary.
> > >         (compute_summary): Remove.
> > >         (calculate_overlap): Remove settings of run_max.
> > > ---
> > >   gcc/auto-profile.c      |  21 +--
> > >   gcc/coverage.c          |  59 +-----
> > >   gcc/coverage.h          |   4 +-
> > >   gcc/doc/gcov-dump.texi  |   6 +-
> > >   gcc/gcov-dump.c         |  81 +-------
> > >   gcc/gcov-io.c           | 398 +---------------------------------------
> > >   gcc/gcov-io.h           |  71 +------
> > >   gcc/gcov-tool.c         |   1 -
> > >   gcc/gcov.c              |   7 +-
> > >   gcc/ipa-profile.c       |  26 +--
> > >   gcc/lto-cgraph.c        | 136 +-------------
> > >   gcc/modulo-sched.c      |   8 -
> > >   gcc/params.def          |   7 +-
> > >   gcc/postreload-gcse.c   |   2 +-
> > >   gcc/predict.c           |   9 +-
> > >   gcc/profile.c           | 116 +-----------
> > >   gcc/profile.h           |   2 +-
> > >   libgcc/libgcov-driver.c | 324 ++++----------------------------
> > >   libgcc/libgcov-util.c   |  39 +---
> > >   19 files changed, 101 insertions(+), 1216 deletions(-)
> > >
> > >



More information about the Gcc-patches mailing list