On Fri, Apr 2, 2021 at 4:32 PM Tadeus Prastowo <tadeus.prast...@unitn.it> wrote:
>
> Hi Arthur,
>
> On Fri, Apr 2, 2021 at 5:04 PM Arthur Gautier
> <gcc.gnu....@superbaloo.net> wrote:
> >
> > Hi Tadeus,
> >
> > On Fri, Apr 2, 2021 at 9:07 AM Tadeus Prastowo <tadeus.prast...@unitn.it> 
> > wrote:
[...]
>
> By "the manual", do you refer to
> https://gcc.gnu.org/install/build.html#Building-with-profile-feedback
> ?
yes
>
> Quoting the page:
>   When ‘make profiledbootstrap’ is run, it will first build a stage1 compiler.
>   This compiler is used to build a stageprofile compiler instrumented
> to collect execution counts of instruction and branch probabilities.
>   Training run is done by building stagetrain compiler.
>   Finally a stagefeedback compiler is built using the information collected.
> End quote.
>
> Based on the quote, a reproducible build is to expected for the
> following compilers:
> 1. The stage1 compiler.
> 2. The stageprofile compiler, which is built by the stage1 compiler.
> 3. The stagetrain compiler, which is built by the stageprofile compiler.
>
> Then, a reproducible build is expected for the stagefeedback compiler
> on the condition that the same information, which was collected by the
> stageprofile compiler when building the stagegrain compiler, is used.
>
> Do you agree with that reasoning?
Yes, and as far as I can tell, up to the stageprofile I get the same result.
Only the output of the stagetrain compilation changes, which affects
the stagefeedback compilation.

>
> > And I would expect, given
> > the same input provided in the same order, two different architectures
> > to take the same branch, and not observe any difference.
>
> In other words, you expect that branch statistics depends only on the
> given source code.  Correct?
That would be my understanding (although very limited).

What I'm trying to understand is: what "local behavior" is injected in
my build, and see if I could get rid of that, and only keep branch
statistics/execution counts, which I expect to be reproducible.

>
> > I understand
> > that with autoprofiled builds, the local architecture behavior is
> > injected in the build, but I don't use that.
> > I'm not using any -march in the build either (as far as I can
> > understand/tell). So I do not expect the build to change its
> > instruction set either.
> >
> > Is that normal that two different architectures would issue two
> > different "execution counts of instruction and branch probabilities"?
>
> I guess that it would be the case.
>
> > Or is there something more?
>
> Perhaps you can have the reproducible build that you want by first
> isolating the information that is collected by the stageprofile
> compiler when building the stagegrain compiler and then reusing the
> same information when building every other stagefeedback compiler.

Yeah, but said information is not reproducible itself (that would
defeat the purpose of the effort).

Reply via email to