public inbox for gcc-cvs@sourceware.org help / color / mirror / Atom feed
From: Ondrej Kubanek <kubaneko@gcc.gnu.org> To: gcc-cvs@gcc.gnu.org Subject: [gcc(refs/users/kubaneko/heads/histogram)] added histogram_counters structure Date: Thu, 23 Feb 2023 23:22:07 +0000 (GMT) [thread overview] Message-ID: <20230223232207.79FAC385B50D@sourceware.org> (raw) https://gcc.gnu.org/g:1aa8abc66731f6256653ef54607eb0b759ce1467 commit 1aa8abc66731f6256653ef54607eb0b759ce1467 Author: kubaneko <kubanek0ondrej@gmail.com> Date: Tue Nov 8 15:27:20 2022 +0000 added histogram_counters structure Diff: --- gcc/cfgloop.cc | 2 ++ gcc/cfgloop.h | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++-- gcc/profile.cc | 6 +++++- 3 files changed, 57 insertions(+), 3 deletions(-) diff --git a/gcc/cfgloop.cc b/gcc/cfgloop.cc index 8523c11fe95..201893f1624 100644 --- a/gcc/cfgloop.cc +++ b/gcc/cfgloop.cc @@ -1769,6 +1769,8 @@ loop_preheader_edge (const class loop *loop) edge e; edge_iterator ei; + // gcc_assert (loops_state_satisfies_p (LOOPS_HAVE_PREHEADERS) + // && ! loops_state_satisfies_p (LOOPS_MAY_HAVE_MULTIPLE_LATCHES)); FOR_EACH_EDGE (e, ei, loop->header->preds) if (e->src != loop->latch) diff --git a/gcc/cfgloop.h b/gcc/cfgloop.h index 63c75e8a0de..7b9a854f266 100644 --- a/gcc/cfgloop.h +++ b/gcc/cfgloop.h @@ -92,6 +92,55 @@ struct loop_exit_hasher : ggc_ptr_hash<loop_exit> static void remove (loop_exit *); }; +// Information about histogram of the loop from profiling + +struct histogram_counters{ + gcov_type hist[69]; + gcov_type sum; + + // need to think about overflows + // quantil function for the distribution + // returns index under which is koef part of the distribution + int quantil(float koef){ + gcc_assert(0<koef && koef<=1); + gcov_type quant=0; + int i=0; + for (;i<69;++i) { + if (quant+hist[i]<koef*sum) { + quant+=hist[i]; + } else { + break; + } + } + return i; + }; + // aproximate distribution mean value of the random variable to a power + float mean_value(int power){ + gcov_type values=0; + for (int i=0;i<8;i++){ + gcov_type val=1; + for (int j=1; j<=power;j++) { + val*=i; + } + values+=val*hist[i]; + } + for (int i=8;i<69;i++){ + gcov_type val=1; + for (int j=1; j<=power; j++) { + val*=1<<(i-5); + } + values+=val*hist[i]; + } + return ((float)values)/sum; + }; + // returns aproximate variance of the distribution + float variance(){ + float one=mean_value(1); + return mean_value(2)-one*one; + }; +}; + + typedef class loop *loop_p; /* An integer estimation of the number of iterations. Estimate_state @@ -275,8 +324,7 @@ public: reused. */ basic_block former_header; - // We store histogram values here - gcov_type hist[69]; + histogram_counters* counters=NULL; }; /* Set if the loop is known to be infinite. */ diff --git a/gcc/profile.cc b/gcc/profile.cc index 1ffc3e35210..675ad036e96 100644 --- a/gcc/profile.cc +++ b/gcc/profile.cc @@ -928,9 +928,13 @@ compute_value_histograms (histogram_values values, unsigned cfg_checksum, { auto lp = hist->hvalue.lp; if (act_count[t]){ + lp->counters=(histogram_counters*) xcalloc (1, sizeof (histogram_counters)); + gcov_type sum=0; for (int i=0;i<69;++i){ - lp->hist[i]=act_count[t][i]; + lp->counters->hist[i]=act_count[t][i]; + sum+=act_count[t][i]; } + lp->counters->sum=sum; } continue; }
next reply other threads:[~2023-02-23 23:22 UTC|newest] Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-02-23 23:22 Ondrej Kubanek [this message] -- strict thread matches above, loose matches on Subject: below -- 2023-02-16 16:28 Ondrej Kubanek 2022-11-22 13:13 Ondrej Kubanek
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230223232207.79FAC385B50D@sourceware.org \ --to=kubaneko@gcc.gnu.org \ --cc=gcc-cvs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).