From fe7c3614fb617d864b22bbf697939371b53b4d7b Mon Sep 17 00:00:00 2001
From: Maria Kotsifakou <kotsifa2@burman.cs.illinois.edu>
Date: Wed, 3 Jun 2015 16:11:21 -0500
Subject: [PATCH] Edited script for plotting

---
 llvm/test/VISC/parboil/parboilParser.py | 142 +++++++++++++-----------
 1 file changed, 78 insertions(+), 64 deletions(-)

diff --git a/llvm/test/VISC/parboil/parboilParser.py b/llvm/test/VISC/parboil/parboilParser.py
index e2d4e567c1..980f6735a9 100755
--- a/llvm/test/VISC/parboil/parboilParser.py
+++ b/llvm/test/VISC/parboil/parboilParser.py
@@ -219,11 +219,14 @@ def printTimerDecomposition(csvDict, isVisc):
         line = line + csvDict[app][v][test][t][cat] + ","
     print line 
 
-def plotTimerDecomposition(csvDict, isVisc):
+def plotTimerDecomposition(csvDict, plotapp):
   global num_figs
 
   # get apps
-  apps = csvDict.keys()
+  if not plotapp:
+    apps = csvDict.keys()
+  else:
+    apps = [ plotapp ]
 
   # get tests for each app
   tests = dict()
@@ -231,79 +234,89 @@ def plotTimerDecomposition(csvDict, isVisc):
     tests[app] = getTests(app, csvDict)
 
   # list of timer-category pairs
-  if isVisc:
-    timers =[('Final', 'Kernel'), 
-             ('Final', 'Load Program Binary'), 
-             ('Final', 'Argument Unpack'), 
-             ('Final', 'Marshal Arguments'), 
-             ('Final', 'Free Memory'), 
-             ('Final', 'Memory Track'), 
-             ('Final', 'Clear Context'), 
-             ('Final', 'Total GPU Computation'), 
-             ('Final', 'Copy Pointer Arguments'), 
-             ('Final', 'Initialize Context'), 
-             ('Final', 'Read Output'), 
-             ('Final', 'Pthread Create'), 
-             ('Final', 'Copy Scalar Arguments'), 
-             ('Final', 'WorkGroup Size Calculation'), 
-             ('Final', 'IO'), 
-             ('Final', 'Output Pack'), 
-             ('Parboil', 'Mem_Untrack'), 
-             ('Parboil', 'Clear_Ctx'),
-             ('GenVISC_Timer', 'Timer Wall Time')]
-  else: 
-    timers =[('Final', 'Init_Ctx'),
-             ('Final', 'Arg_Unpack'), 
-             ('Final', 'Copy_Scalar'), 
-             ('Final', 'Mem_Track'), 
-             ('Final', 'Driver'), 
-             ('Final', 'Output_Unpack'), 
-             ('Final', 'Arg_Pack'), 
-             ('Final', 'Copy'), 
-             ('Final', 'Compute'), 
-             ('Final', 'Setup'), 
-             ('Final', 'Read_Output'), 
-             ('Final', 'IO'), 
-             ('Final', 'Pthread_Create'), 
-             ('Final', 'Kernel'), 
-             ('Final', 'Mem_Free'), 
-             ('Final', 'Copy Async'), 
-             ('Final', 'Copy_Ptr'),
-             ('Final', 'Output_Pack'),
-             ('Final', 'Mem_Untrack'),
-             ('Final', 'Clear_Ctx'),
-             ('Final', 'Timer Wall Time')]
-
-#  num_experiments = 0;
-#  for app in apps:
-#    for test in tests[app]:
-#      num_experiments += 1
+  visc_timers =[('Final', 'Kernel'), 
+                ('Final', 'Load Program Binary'), 
+                ('Final', 'Argument Unpack'), 
+                ('Final', 'Marshal Arguments'), 
+                ('Final', 'Free Memory'), 
+                ('Final', 'Memory Track'), 
+                ('Final', 'Clear Context'), 
+                ('Final', 'Total GPU Computation'), 
+                ('Final', 'Copy Pointer Arguments'), 
+                ('Final', 'Initialize Context'), 
+                ('Final', 'Read Output'), 
+                ('Final', 'Pthread Create'), 
+                ('Final', 'Copy Scalar Arguments'), 
+                ('Final', 'WorkGroup Size Calculation'), 
+                ('Final', 'IO'), 
+                ('Final', 'Output Pack'), 
+                ('Parboil', 'Mem_Untrack'), 
+                ('Parboil', 'Clear_Ctx'),
+                ('GenVISC_Timer', 'Timer Wall Time')]
+  opencl_timers =[('Final', 'Init_Ctx'),
+                  ('Final', 'Arg_Unpack'), 
+                  ('Final', 'Copy_Scalar'), 
+                  ('Final', 'Mem_Track'), 
+                  ('Final', 'Driver'), 
+                  ('Final', 'Output_Unpack'), 
+                  ('Final', 'Arg_Pack'), 
+                  ('Final', 'Copy'), 
+                  ('Final', 'Compute'), 
+                  ('Final', 'Setup'), 
+                  ('Final', 'Read_Output'), 
+                  ('Final', 'IO'), 
+                  ('Final', 'Pthread_Create'), 
+                  ('Final', 'Kernel'), 
+                  ('Final', 'Mem_Free'), 
+                  ('Final', 'Copy Async'), 
+                  ('Final', 'Copy_Ptr'),
+                  ('Final', 'Output_Pack'),
+                  ('Final', 'Mem_Untrack'),
+                  ('Final', 'Clear_Ctx'),
+                  ('Final', 'Timer Wall Time')]
 
-#  exp_count = 0
   for app in apps:
-    v = 'visc' if isVisc else getOpenCLVersionName(app)
     for test in tests[app]:
-#      exp_count += 1
+# Plotting visc timers
+      v = 'visc'
       n_vals = 0;
       axis_values = []
-      time_decomp = []
-      for (t, cat) in timers:
+      visc_time_decomp = []
+      for (t, cat) in visc_timers:
         n_vals += 1
         axis_values.append(cat);
-        time_decomp.append(float(csvDict[app][v][test][t][cat])) 
+        visc_time_decomp.append(float(csvDict[app][v][test][t][cat])) 
 
       opacity = 0.4
       num_figs += 1
-      fig, ax = plt.subplots(num=num_figs)
+      fig = plt.figure(num=num_figs)
+      ax = fig.add_subplot(211);
       index = np.arange(n_vals)
-      plt.barh(index, time_decomp, alpha=opacity, color='b', label=v)
+      plt.barh(index, visc_time_decomp, alpha=opacity, color='b', label=v)
       plt.xlabel('Time (s)')
       plt.ylabel('Timers')
       plt.title('Time Decomposition - ' + app + ' ' + test + ' ' + v)
       plt.yticks(index, axis_values)
       plt.tight_layout()
 
+      v = getOpenCLVersionName(app)
+      n_vals = 0;
+      axis_values = []
+      opencl_time_decomp = []
+      for (t, cat) in opencl_timers:
+        n_vals += 1
+        axis_values.append(cat);
+        opencl_time_decomp.append(float(csvDict[app][v][test][t][cat])) 
 
+      opacity = 0.4
+      ax = fig.add_subplot(212);
+      index = np.arange(n_vals)
+      plt.barh(index, opencl_time_decomp, alpha=opacity, color='r', label=v)
+      plt.xlabel('Time (s)')
+      plt.ylabel('Timers')
+      plt.title('Time Decomposition - ' + app + ' ' + test + ' ' + v)
+      plt.yticks(index, axis_values)
+      plt.tight_layout()
 
 
 # command line options parser
@@ -314,9 +327,9 @@ parser.add_option("--print-timers-visc",action="store_true",default=False,dest="
 parser.add_option("--print-timers-opencl",action="store_true",default=False,dest="printTimersOpencl")
 parser.add_option("--print-all",action="store_true",default=False,dest="printAll")
 parser.add_option("--plot-totals",action="store_true",default=False,dest="plotTotals")
-parser.add_option("--plot-timers-visc",action="store_true",default=False,dest="plotTimersVisc")
-parser.add_option("--plot-timers-opencl",action="store_true",default=False,dest="plotTimersOpencl")
+parser.add_option("--plot-timers",action="store_true",default=False,dest="plotTimers")
 parser.add_option("--plot-all",action="store_true",default=False,dest="plotAll")
+parser.add_option("--plot-app",action="store",type="string",dest="plotapp")
 
 # main
 def main():
@@ -350,14 +363,15 @@ def main():
     print ''
 
   # plot graphs
+
   if options.plotTotals or options.plotAll:
     plotTotalExecutionTimeTable(csvDict)
 
-  if options.plotTimersVisc or options.plotAll:
-    plotTimerDecomposition(csvDict, isVisc=True)
-
-  if options.plotTimersOpencl or options.plotAll:
-    plotTimerDecomposition(csvDict, isVisc=False)
+  if options.plotapp and not options.plotapp in csvDict.keys():
+    print "parboilReader.py: Error: No input file was given!"
+    raise OSError
+  elif options.plotapp or options.plotTimers or options.plotAll:
+    plotTimerDecomposition(csvDict, options.plotapp)
 
   plt.show()
   for i in range(num_figs):
-- 
GitLab