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

Jan Hubicka hubicka@ucw.cz
Thu Sep 20 09:34:00 GMT 2018


> 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
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