On Sat, Oct 18, 2014 at 4:19 PM, Xinliang David Li <davi...@google.com> wrote: > On Sat, Oct 18, 2014 at 3:27 PM, Jan Hubicka <hubi...@ucw.cz> wrote: >>> The difference in instrumentation runtime is huge -- as topn profiler >>> is pretty expensive to run. >>> >>> With FDO, it is probably better to make early inlining more aggressive >>> in order to get more context sensitive profiling. >> >> I agree with that, I just would like to understand where increasing the >> iterations >> helps and if we can handle it without iterating (because Richi originally >> requested to >> drop the iteration for correcness issues) >> Do you have some examples? > > We can do FDO experiment by shutting down einline. (Note that > increasing iteration to 2 did not actually improve performance with > our benchmarks).
Early inlining itself has large performance impact for FDO (the runtime of the profile-use build). With it disabled, the FDO performance drops by >2% on average. The degradation is seen across all benchmarks except for one. David > > David > >> Honza >>> >>> David >>> >>> On Sat, Oct 18, 2014 at 10:05 AM, Jan Hubicka <hubi...@ucw.cz> wrote: >>> >> Increasing the number of early inliner iterations from 1 to 2 enables >>> >> more >>> >> indirect calls to be promoted/inlined before instrumentation. This in >>> >> turn >>> >> reduces the instrumentation overhead, particularly for more expensive >>> >> indirect >>> >> call topn profiling. >>> > >>> > How much difference you get here? One posibility would be also to run >>> > specialized >>> > ipa-cp before profile instrumentation. >>> > >>> > Honza >>> >> >>> >> Passes internal testing and regression tests. Ok for google/4_9? >>> >> >>> >> 2014-10-18 Teresa Johnson <tejohn...@google.com> >>> >> >>> >> Google ref b/17934523 >>> >> * opts.c (finish_options): Increase max-early-inliner-iterations >>> >> to 2 >>> >> for profile-gen and profile-use builds. >>> >> >>> >> Index: opts.c >>> >> =================================================================== >>> >> --- opts.c (revision 216286) >>> >> +++ opts.c (working copy) >>> >> @@ -870,6 +869,14 @@ finish_options (struct gcc_options *opts, struct g >>> >> opts->x_param_values, opts_set->x_param_values); >>> >> } >>> >> >>> >> + if (opts->x_profile_arc_flag >>> >> + || opts->x_flag_branch_probabilities) >>> >> + { >>> >> + maybe_set_param_value >>> >> + (PARAM_EARLY_INLINER_MAX_ITERATIONS, 2, >>> >> + opts->x_param_values, opts_set->x_param_values); >>> >> + } >>> >> + >>> >> if (!(opts->x_flag_auto_profile >>> >> || (opts->x_profile_arc_flag || >>> >> opts->x_flag_branch_probabilities))) >>> >> { >>> >> >>> >> >>> >> -- >>> >> Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413