On Mon, May 4, 2020 at 8:14 AM Andreas Krebbel <kreb...@linux.ibm.com> wrote:
>
> On 30.04.20 18:33, Richard Biener wrote:
> > On Thu, Apr 30, 2020 at 5:14 PM Andreas Krebbel <kreb...@linux.ibm.com> 
> > wrote:
> >>
> >> On 30.04.20 08:25, Richard Biener via Gcc-patches wrote:
> >>> On Wed, Apr 29, 2020 at 5:56 PM Jeff Law <l...@redhat.com> wrote:
> >>>>
> >>>> On Tue, 2020-04-28 at 11:44 +0200, Richard Biener via Gcc-patches wrote:
> >>>>>
> >>>>> Btw, does s390 have different inlining parameters somehow?
> >>>> I think so.  We saw a ton of backend warnings that were specific to the 
> >>>> s390
> >>>> builds in Fedora that appeared to be triggered by different inlining 
> >>>> decisions.
> >>>>
> >>>> It happened enough that one of the ideas we're going to explore is 
> >>>> seeing if we
> >>>> can tune the x86_64 port to use the same heuristics.  That way we can 
> >>>> try to find
> >>>> more of these issues in our tester without having to dramatically 
> >>>> increase s390x
> >>>> resourcing.  This hasn't started, but I expect we'll be looking at it in 
> >>>> the fall
> >>>> (it's unclear if we can just use flags or will need hackery to the x86 
> >>>> port, but
> >>>> we're happy to share whatever we find with the wider community).
> >>>
> >>> Hmm, OK.  Guess if it becomes an issue for openSUSE I'll simply revert 
> >>> those
> >>> s390 backend changes.
> >>
> >> Too bad. I would prefer to fix the root cause of the warnings instead. 
> >> Isn't it a good thing that
> >> thanks to the more aggressive inlining actual bugs in the code get 
> >> revealed? Or do you see other
> >> issues with that?
> >
> > I'm obviously more concerned about latent GCC issues only popping up
> > on s390.  Basically
> > the s390 limits throw much of the QA done on x86_64 targets away when
> > comparing to s390.
> That's indeed a problem. It isn't only about GCC itself. We also see more 
> bugs in distro packages
> revealed on s390.  But in the end these often are actual bugs and should be 
> fixed one way or the
> other. Wouldn't it be better to find more of these bugs upfront?
>
> Would it perhaps make sense to introduce an optimization level which tries to 
> maximize the number of
> warnings produced? I know this might be tricky since some optimizations tend 
> to produce a certain
> set of warnings while reducing warnings in another area at the same time. But 
> still I think there
> would be some value in picking extreme params with that option and have it 
> consistent across archs.
>
> > For example we do burn-in testing of a new GCC release (10.1 here) in
> > openSUSE Factory
> > by using it as system compiler.  Then with GCC 10.2 we ship it as
> > compiler for their own use
> > to SLES users and ISVs.  But obviously all the burn-in testing on
> > openSUSE Factory
> > is very x86_64 centric these days.
> I think Matthias is doing this with Ubuntu also for other archs. Thanks to 
> him we are usually able
> to fix a bunch of problems beforehand. Kudos to him for doing that!

For build testing yes, but does it really receive much usage?

> >>>
> >>> As a general advice to backend developers I _strongly_ discourage to 
> >>> adjust
> >>> --param defaults that affect GIMPLE.
> >>
> >> We did tons of measurements to find these values recently and got a nice 
> >> speedup after increasing
> >> them. We also had a look at the size increase of binaries. It was 
> >> significant but we decided that
> >> the performance benefit is worth it. On IBM Z the function call overhead 
> >> is bigger than on other
> >> archs so inlining in general helps us.
> >>
> >> I'm not sure I understand your recommendation to leave these values as is. 
> >> I assumed that such
> >> parameters are supposed to be used to deal with the characteristics of a 
> >> platform. Are there better
> >> ways to achieve the same effect?
> >
> > Get more inlining than other archs?  No, I don't think so.  But if the
> > call overhead is bigger then
> > you should adjust the cost of calls instead?
> Is there a dedicated knob for adjusting call costs? We played with 
> branch-costs in the past but this
> is not dedicated to just calls. Increasing it usually had negative effects 
> for our target, although
> we might need to re-iterate on that one as well.

There's no --param for call cost, there's some knobs for
prologue/epilogue costs and also
the magic early-inline-insns (which in early days was supposed to be
the call overhead).
There's

/* Initializes weights used by estimate_num_insns.  */

void
init_inline_once (void)
{
  eni_size_weights.call_cost = 1;
  eni_size_weights.indirect_call_cost = 3;
...
  /* Estimating time for call is difficult, since we have no idea what the
     called function does.  In the current uses of eni_time_weights,
     underestimating the cost does less harm than overestimating it, so
     we choose a rather small value here.  */
  eni_time_weights.call_cost = 10;
  eni_time_weights.indirect_call_cost = 15;

which would hint at a place to introduce target dependences.  Note there's
also individual call argument cost handling - not sure where exactly the call
cost on z appears, see estimate_num_insns ().

> > Also the default limits
> > are a delicate compromise
> > between speed and size - of course if you disregard size you get more
> > speed.  You also only
> > adjusted two out of very many params which are not really as
> > independent as one would think...
> > (and you forgot to re-tune after last years big changes/parameter space 
> > splits).
> Oh, we set other inlining params as well. It is just that with z13 we tuned 
> in particular also for
> these two. Since we don't have measurements on other CPU levels we didn't 
> want to risk producing
> regressions and just have left the values as is for those.
>
> > As said you should at least think of adjusting the adjustments to be
> > relative to the default
> > value rather than absolute.
> Ok.
>
> Andreas
> >
> > Richard.
> >
> >> Andreas
> >>
> >>>
> >>> Richard.
> >>>
> >>>> jeff
> >>>>
> >>>>
> >>>>
> >>
>

Reply via email to