Hi.

The second follow up patch adds new script which is a simple wrapper around
analyze_brprob.py and can be used to dump statistics for results that are in
different folder (like SPEC benchmarks).

Sample:
./contrib/analyze_brprob_spec.py --sorting=hitrate 
/home/marxin/Programming/cpu2006/benchspec/CPU2006/

Sample output:
401.bzip2
HEURISTICS                           BRANCHES  (REL)  HITRATE                
COVERAGE COVERAGE  (REL)
no prediction                             107  14.0%  19.45% /  84.37%     
2768134733    2.77G  10.8%
opcode values nonequal (on trees)          76  10.0%  32.24% /  85.06%     
4034681344    4.03G  15.8%
call                                       95  12.5%  45.50% /  93.31%      
152224913  152.22M   0.6%
DS theory                                 275  36.1%  45.56% /  84.30%     
7308863904    7.31G  28.6%
continue                                   14   1.8%  48.44% /  73.14%     
1479774996    1.48G   5.8%
guessed loop iterations                    12   1.6%  68.30% /  71.61%      
269705737  269.71M   1.1%
combined                                  762 100.0%  69.52% /  89.32%    
25553311262   25.55G 100.0%
goto                                       40   5.2%  72.41% /  98.80%      
882062676  882.06M   3.5%
opcode values positive (on trees)          40   5.2%  76.74% /  88.09%     
1394104926    1.39G   5.5%
pointer (on trees)                         61   8.0%  83.79% / 100.00%         
931107  931.11K   0.0%
early return (on trees)                    31   4.1%  84.39% /  84.41%     
2548058402    2.55G  10.0%
first match                               380  49.9%  89.79% /  92.57%    
15476312625   15.48G  60.6%
loop exit                                 316  41.5%  90.09% /  92.88%    
15065219828   15.07G  59.0%
guess loop iv compare                       2   0.3%  99.61% /  99.61%       
26987995   26.99M   0.1%
loop iv compare                             1   0.1%  99.61% /  99.61%         
105411  105.41K   0.0%
loop iterations                            38   5.0%  99.64% /  99.64%      
140236649  140.24M   0.5%
null return                                 2   0.3% 100.00% / 100.00%          
   18    18.00   0.0%
noreturn call                              13   1.7% 100.00% / 100.00%        
1045000    1.04M   0.0%
const return                                2   0.3% 100.00% / 100.00%          
  816   816.00   0.0%
negative return                            62   8.1% 100.00% / 100.00%      
618097152  618.10M   2.4%

410.bwaves
HEURISTICS                           BRANCHES  (REL)  HITRATE                
COVERAGE COVERAGE  (REL)
call                                        1   0.6%   0.00% / 100.00%          
   20    20.00   0.0%
no prediction                               6   3.7%   0.28% /  99.72%        
2704184    2.70M   0.1%
opcode values nonequal (on trees)           4   2.4%  60.00% /  70.00%          
  200   200.00   0.0%
loop iterations                             7   4.3%  80.00% /  80.00%      
112892000  112.89M   2.4%
first match                                83  50.6%  81.67% /  81.67%     
4393885465    4.39G  92.1%
loop exit                                  76  46.3%  81.71% /  81.71%     
4280993465    4.28G  89.8%
combined                                  164 100.0%  83.05% /  83.11%     
4768545507    4.77G 100.0%
DS theory                                  75  45.7% 100.00% / 100.00%      
371955858  371.96M   7.8%
early return (on trees)                     3   1.8% 100.00% / 100.00%          
  688   688.00   0.0%
opcode values positive (on trees)          71  43.3% 100.00% / 100.00%      
371955658  371.96M   7.8%

...

Thanks,
Martin

>From ca9806bf77bd90df43913f5f1552ed16379dcf38 Mon Sep 17 00:00:00 2001
From: marxin <mli...@suse.cz>
Date: Fri, 3 Jun 2016 12:46:43 +0200
Subject: [PATCH 4/4] Add new analyze_brprob_spec.py script

contrib/ChangeLog:

2016-06-08  Martin Liska  <mli...@suse.cz>

	* analyze_brprob_spec.py: New file.
---
 contrib/analyze_brprob_spec.py | 58 ++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100755 contrib/analyze_brprob_spec.py

diff --git a/contrib/analyze_brprob_spec.py b/contrib/analyze_brprob_spec.py
new file mode 100755
index 0000000..a28eaac
--- /dev/null
+++ b/contrib/analyze_brprob_spec.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python3
+
+# This file is part of GCC.
+#
+# GCC is free software; you can redistribute it and/or modify it under
+# the terms of the GNU General Public License as published by the Free
+# Software Foundation; either version 3, or (at your option) any later
+# version.
+#
+# GCC is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+# for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.  */
+
+import sys
+import os
+import subprocess
+import tempfile
+import argparse
+
+script_location = os.path.realpath(__file__)
+
+parser = argparse.ArgumentParser()
+parser.add_argument('location', metavar = 'dump_file', help = 'Location with SPEC benchmarks')
+parser.add_argument('-s', '--sorting', dest = 'sorting', choices = ['branches', 'hitrate', 'coverage'], default = 'branches')
+
+args = parser.parse_args()
+
+benchmarks = os.listdir(args.location)
+
+for b in sorted(benchmarks):
+    dumps = []
+    for root, dirs, files in os.walk(os.path.join(args.location, b)):
+        for x in files:
+            if x.endswith('.profile'):
+                dumps.append(os.path.join(root, x))
+
+    if len(dumps) == 0:
+        continue
+
+    temp = tempfile.NamedTemporaryFile(delete = False)
+    for d in dumps:
+        temp.write(open(d, 'rb').read())
+
+    temp.close()
+
+    print()
+    print(b)
+    sys.stdout.flush()
+    p = [os.path.join(os.path.dirname(script_location), 'analyze_brprob.py'), temp.name, '--sorting', args.sorting]
+    p = subprocess.check_call(p)
+    sys.stdout.flush()
+
+    os.remove(temp.name)
-- 
2.8.3

Reply via email to