public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH]: Dump the "degree of overlap" to compare static profile with instrumentation profile
@ 2011-09-22  4:03 Dehao Chen
  0 siblings, 0 replies; only message in thread
From: Dehao Chen @ 2011-09-22  4:03 UTC (permalink / raw)
  To: gcc-patches

Hello!

During performance tuning, it's useful to know if the static profile
is accurate. This patch compares static profiles to instrumentation
profiles, and uses "degree of overlap" to measure its accuracy. Degree
of overlap is a number between 0 and 1, representing the correlation
between two profiles, and 1 means two profiles are identical. This
number is dumped if the instrumentation based profile is available and
-fdump-ipa-profile is specified.

Ok for mainline?
Thanks,
Dehao

2011-09-20  Dehao Chen  <dehao@google.com>

	* profile.c (compute_branch_probabilities): Compute and dump the
	overlap between the static estimation and the instrumentation profile.
	(OVERLAP_BASE): New macro.
	(compute_frequency_overlap): New function


Index: gcc/profile.c
===================================================================
--- gcc/profile.c	(revision 179073)
+++ gcc/profile.c	(working copy)
@@ -437,6 +437,39 @@ read_profile_edge_counts (gcov_type *exe
     return num_edges;
 }

+#define OVERLAP_BASE 10000
+
+/* Compare the static estimated profile to the actual profile, and
+   return the "degree of overlap" measure between them.
+
+   Degree of overlap is a number between 0 and OVERLAP_BASE. It is
+   the sum of each basic block's minimum relative weights between
+   two profiles. And overlap of OVERLAP_BASE means two profiles are
+   identical.  */
+
+static int
+compute_frequency_overlap (void)
+{
+  gcov_type count_total = 0, freq_total = 0;
+  int overlap = 0;
+  basic_block bb;
+
+  FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
+    {
+      count_total += bb->count;
+      freq_total += bb->frequency;
+    }
+
+  if (count_total == 0 || freq_total == 0)
+    return 0;
+
+  FOR_BB_BETWEEN (bb, ENTRY_BLOCK_PTR, NULL, next_bb)
+    overlap += MIN (bb->count * OVERLAP_BASE / count_total,
+		    bb->frequency * OVERLAP_BASE / freq_total);
+
+  return overlap;
+}
+
 /* Compute the branch probabilities for the various branches.
    Annotate them accordingly.

@@ -607,7 +640,13 @@ compute_branch_probabilities (unsigned c
 	}
     }
   if (dump_file)
-    dump_flow_info (dump_file, dump_flags);
+    {
+      int overlap = compute_frequency_overlap ();
+      dump_flow_info (dump_file, dump_flags);
+      fprintf (dump_file, "Static profile overlap: %d.%d%%\n",
+	       overlap / (OVERLAP_BASE / 100),
+	       overlap % (OVERLAP_BASE / 100));
+    }

   total_num_passes += passes;
   if (dump_file)

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2011-09-22  1:09 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-09-22  4:03 [PATCH]: Dump the "degree of overlap" to compare static profile with instrumentation profile Dehao Chen

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).