On 10/31/18 12:34 AM, bin.cheng wrote:
> Hi,
> This patch fixes AutoFDO breakage on trunk.  The main reason for breakage is 
> AutoFDO
> relies on standalone edge count computing and propagating profile 
> count/probability info
> on CFG, but in new infra, edge count is actually computed from probability, 
> which leads
> to chicken-egg problem and corrupted profile count.  This patch fixes the 
> issue by using
> explicit edge count.
> 
> There is another issue not touched yet that, in quite common case, profiled 
> samples are
> not enough and profile info computed for lots of blocks is ZERO.  In the 
> future, we may
> add some heuristics checking quality of sampled counts and reverting to 
> guessed profile
> count if necessary.  I think change made in this patch is also needed for 
> that.
> 
> Package mysql server is used in test of this patch set.  It can't be compiled 
> with autofdo
> on trunk, even with compilation issues worked-around, there isn't performance 
> improvement.
> I local experiments, with this patch set it's improved by 12.3%, 4.3% 
> irrespectively for
> read-only/write-heavy benchmarks.  Unfortunately,  this patch set was written 
> against
> GCC 8 branch a while ago, improvement gets worse on trunk and I haven't 
> investigated
> the reason yet.  I guess there are still other issues which need to be fixed 
> in the future.
> 
> Bootstrap and test on x86_64 in patch set.  Is it OK?
> 
> Thanks,
> bin
> 2018-10-31  Bin Cheng  <bin.ch...@linux.alibaba.com>
> 
>       * auto-profile.c (AFDO_EINFO): New macro.
>       (struct edge_info): New structure.
>       (is_edge_annotated, set_edge_annotated): Delete.
>       (afdo_propagate_edge, afdo_propagate_circuit, afdo_propagate): Remove
>       parameter.  Adjust edge count computation and annotation using struct
>       edge_info.
>       (afdo_calculate_branch_prob): Ditto.
>       (afdo_annotate_cfg): Simplify code setting basic block profile count.
> 
> 
> 0004-Fix-AutoFDO-breakage-after-profile-count-rewriting.patch
> 
> From 6506c12d1b633b6d1bfae839b3633a4f99b3a481 Mon Sep 17 00:00:00 2001
> From: chengbin <bin.ch...@linux.alibaba.com>
> Date: Mon, 20 Aug 2018 15:25:02 +0800
> Subject: [PATCH 4/4] Fix AutoFDO breakage after profile count rewriting.
> 
> ---
>  gcc/auto-profile.c | 190 
> ++++++++++++++++++++++++++---------------------------
>  1 file changed, 95 insertions(+), 95 deletions(-)
> 
> diff --git a/gcc/auto-profile.c b/gcc/auto-profile.c
> index cde4f41c1d9..ff3ea23d830 100644
> --- a/gcc/auto-profile.c
> +++ b/gcc/auto-profile.c
> @@ -101,6 +101,17 @@ along with GCC; see the file COPYING3.  If not see
>  namespace autofdo
>  {
>  
> +/* Intermediate edge info used when propagating AutoFDO profile information.
> +   We can't edge->count() directly since it's computed from edge's 
> probability
> +   while probability is yet not decided during propagation.  */
> +#define AFDO_EINFO(e)                     ((struct edge_info *) e->aux)
> +struct edge_info
> +{
> +  edge_info () : count (profile_count::zero ().afdo ()), annotated_p (false) 
> {}
> +  profile_count count;
> +  bool annotated_p;
> +};
edge_info isn't POD, so make it a class rather than a struct.

OK with that change assuming it does not have a hard dependency on prior
patches in this series.

jeff

Reply via email to