summaryrefslogtreecommitdiff
path: root/external/clBLAS/src/scripts/perf/plotPerformance.py
diff options
context:
space:
mode:
Diffstat (limited to 'external/clBLAS/src/scripts/perf/plotPerformance.py')
-rw-r--r--external/clBLAS/src/scripts/perf/plotPerformance.py309
1 files changed, 0 insertions, 309 deletions
diff --git a/external/clBLAS/src/scripts/perf/plotPerformance.py b/external/clBLAS/src/scripts/perf/plotPerformance.py
deleted file mode 100644
index 0c62fcce..00000000
--- a/external/clBLAS/src/scripts/perf/plotPerformance.py
+++ /dev/null
@@ -1,309 +0,0 @@
-# ########################################################################
-# Copyright 2013 Advanced Micro Devices, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-# ########################################################################
-
-# to use this script, you will need to download and install the 32-BIT VERSION of:
-# - Python 2.7 x86 (32-bit) - http://www.python.org/download/releases/2.7.1
-#
-# you will also need the 32-BIT VERSIONS of the following packages as not all the packages are available in 64bit at the time of this writing
-# The ActiveState python distribution is recommended for windows
-# (make sure to get the python 2.7-compatible packages):
-# - NumPy 1.5.1 (32-bit, 64-bit unofficial, supports Python 2.4 - 2.7 and 3.1 - 3.2.) - http://sourceforge.net/projects/numpy/files/NumPy/
-# - matplotlib 1.0.1 (32-bit & 64-bit, supports Python 2.4 - 2.7) - http://sourceforge.net/projects/matplotlib/files/matplotlib/
-#
-# For ActiveState Python, all that one should need to type is 'pypm install matplotlib'
-
-import datetime
-import sys
-import argparse
-import subprocess
-import itertools
-import os
-import matplotlib
-import pylab
-from matplotlib.backends.backend_pdf import PdfPages
-from blasPerformanceTesting import *
-
-def plotGraph(dataForAllPlots, title, plottype, plotkwargs, xaxislabel, yaxislabel):
- """
- display a pretty graph
- """
- colors = ['k','y','m','c','r','b','g']
- #plottype = 'plot'
- for thisPlot in dataForAllPlots:
- getattr(pylab, plottype)(thisPlot.xdata, thisPlot.ydata,
- '{}.-'.format(colors.pop()),
- label=thisPlot.label, **plotkwargs)
- if len(dataForAllPlots) > 1:
- pylab.legend(loc='best')
-
- pylab.title(title)
- pylab.xlabel(xaxislabel)
- pylab.ylabel(yaxislabel)
- pylab.grid(True)
-
- if args.outputFilename == None:
- # if no pdf output is requested, spit the graph to the screen . . .
- pylab.show()
- else:
- pylab.savefig(args.outputFilename,dpi=(1024/8))
- # . . . otherwise, gimme gimme pdf
- #pdf = PdfPages(args.outputFilename)
- #pdf.savefig()
- #pdf.close()
-
-######## plotFromDataFile() Function to plot from data file begins ########
-def plotFromDataFile():
- data = []
- """
- read in table(s) from file(s)
- """
- for thisFile in args.datafile:
- if not os.path.isfile(thisFile):
- print 'No file with the name \'{}\' exists. Please indicate another filename.'.format(thisFile)
- quit()
-
- results = open(thisFile, 'r')
- results_contents = results.read()
- results_contents = results_contents.rstrip().split('\n')
-
- firstRow = results_contents.pop(0)
- print firstRow
- print blas_table_header()
- print firstRow.rstrip()==blas_table_header()
- if firstRow.rstrip() != blas_table_header():
- print 'ERROR: input file \'{}\' does not match expected format.'.format(thisFile)
- quit()
-
- for row in results_contents:
- row = row.split(',')
- row = TableRow(BlasTestCombination(row[0],row[1],row[2],row[3],row[4],row[5],row[6],row[7],row[8],row[9],row[10],row[11],row[12],row[13],row[14], row[15], row[16], row[17][1:], row[17][0], row[18], row[19], row[20]), row[21])
- data.append(BlasGraphPoint(row.parameters.sizem, row.parameters.sizen, row.parameters.sizek, row.parameters.lda, row.parameters.ldb, row.parameters.ldc, row.parameters.offa , row.parameters.offb , row.parameters.offc , row.parameters.device, row.parameters.order, row.parameters.transa, row.parameters.transb, row.parameters.precision + row.parameters.function, row.parameters.library, row.parameters.label, row.gflops))
-
- """
- data sanity check
- """
- # if multiple plotvalues have > 1 value among the data rows, the user must specify which to plot
- multiplePlotValues = []
- for option in plotvalues:
- values = []
- for point in data:
- values.append(getattr(point, option))
- multiplePlotValues.append(len(set(values)) > 1)
- if multiplePlotValues.count(True) > 1 and args.plot == None:
- print 'ERROR: more than one parameter of {} has multiple values. Please specify which parameter to plot with --plot'.format(plotvalues)
- quit()
-
- # if args.graphxaxis is not 'problemsize', the user should know that the results might be strange
- #if args.graphxaxis != 'problemsize':
- # xaxisvalueSet = []
- # for option in xaxisvalues:
- # if option != 'problemsize':
- # values = []
- # for point in data:
- # values.append(getattr(point, option))
- # xaxisvalueSet.append(len(set(values)) > 1)
- # if xaxisvalueSet.count(True) > 1:
- # print 'WARNING: more than one parameter of {} is varied. unexpected results may occur. please double check your graphs for accuracy.'.format(xaxisvalues)
-
- # multiple rows should not have the same input values
- #pointInputs = []
- #for point in data:
- # pointInputs.append(point.__str__().split(';')[0])
- #if len(set(pointInputs)) != len(data):
- # print 'ERROR: imported table has duplicate rows with identical input parameters'
- # quit()
-
- """
- figure out if we have multiple plots on this graph (and what they should be)
- """
- if args.plot != None:
- multiplePlots = args.plot
- elif multiplePlotValues.count(True) == 1 and plotvalues[multiplePlotValues.index(True)] != 'sizek':
- # we don't ever want to default to sizek, because it's probably going to vary for most plots
- # we'll require the user to explicitly request multiple plots on sizek if necessary
- multiplePlots = plotvalues[multiplePlotValues.index(True)]
- else:
- # default to device if none of the options to plot have multiple values
- multiplePlots = 'device'
-
- """
- assemble data for the graphs
- """
- data.sort(key=lambda row: int(getattr(row, args.graphxaxis)))
-
- # choose scale for x axis
- if args.xaxisscale == None:
- # user didn't specify. autodetect
- if int(getattr(data[len(data)-1], args.graphxaxis)) > 2000: # big numbers on x-axis
- args.xaxisscale = 'log2'
- elif int(getattr(data[len(data)-1], args.graphxaxis)) > 10000: # bigger numbers on x-axis
- args.xaxisscale = 'log10'
- else: # small numbers on x-axis
- args.xaxisscale = 'linear'
-
- if args.xaxisscale == 'linear':
- plotkwargs = {}
- plottype = 'plot'
- elif args.xaxisscale == 'log2':
- plottype = 'semilogx'
- plotkwargs = {'basex':2}
- elif args.xaxisscale == 'log10':
- plottype = 'semilogx'
- plotkwargs = {'basex':10}
- else:
- print 'ERROR: invalid value for x-axis scale'
- quit()
-
- plots = set(getattr(row, multiplePlots) for row in data)
-
- class DataForOnePlot:
- def __init__(self, inlabel, inxdata, inydata):
- self.label = inlabel
- self.xdata = inxdata
- self.ydata = inydata
-
- dataForAllPlots = []
- for plot in plots:
- dataForThisPlot = itertools.ifilter( lambda x: getattr(x, multiplePlots) == plot, data)
- dataForThisPlot = list(itertools.islice(dataForThisPlot, None))
- #if args.graphxaxis == 'problemsize':
- # xdata = [int(row.x) * int(row.y) * int(row.z) * int(row.batchsize) for row in dataForThisPlot]
- #else:
- xdata = [getattr(row, args.graphxaxis) for row in dataForThisPlot]
- ydata = [getattr(row, args.graphyaxis) for row in dataForThisPlot]
- dataForAllPlots.append(DataForOnePlot(plot,xdata,ydata))
-
- """
- assemble labels for the graph or use the user-specified ones
- """
- if args.graphtitle:
- # use the user selection
- title = args.graphtitle
- else:
- # autogen a lovely title
- title = 'Performance vs. ' + args.graphxaxis.capitalize()
-
- if args.xaxislabel:
- # use the user selection
- xaxislabel = args.xaxislabel
- else:
- # autogen a lovely x-axis label
- if args.graphxaxis == 'cachesize':
- units = '(bytes)'
- else:
- units = '(datapoints)'
-
- xaxislabel = args.graphxaxis + ' ' + units
-
- if args.yaxislabel:
- # use the user selection
- yaxislabel = args.yaxislabel
- else:
- # autogen a lovely y-axis label
- if args.graphyaxis == 'gflops':
- units = 'GFLOPS'
- yaxislabel = 'Performance (' + units + ')'
-
- """
- display a pretty graph
- """
- colors = ['k','y','m','c','r','b','g']
-
- for thisPlot in dataForAllPlots:
- getattr(pylab, plottype)(thisPlot.xdata, thisPlot.ydata, '{}.-'.format(colors.pop()), label=thisPlot.label, **plotkwargs)
-
- if len(dataForAllPlots) > 1:
- pylab.legend(loc='best')
-
- pylab.title(title)
- pylab.xlabel(xaxislabel)
- pylab.ylabel(yaxislabel)
- pylab.grid(True)
-
- if args.outputFilename == None:
- # if no pdf output is requested, spit the graph to the screen . . .
- pylab.show()
- else:
- # . . . otherwise, gimme gimme pdf
- #pdf = PdfPages(args.outputFilename)
- #pdf.savefig()
- #pdf.close()
- pylab.savefig(args.outputFilename,dpi=(1024/8))
-######### plotFromDataFile() Function to plot from data file ends #########
-
-
-
-######## "main" program begins #####
-"""
-define and parse parameters
-"""
-xaxisvalues = ['sizem','sizen','sizek']
-yaxisvalues = ['gflops']
-plotvalues = ['lda','ldb','ldc','sizek','device','label','order','transa','transb','function','library']
-
-
-
-parser = argparse.ArgumentParser(description='Plot performance of the clblas\
- library. clblas.plotPerformance.py reads in data tables from clblas.\
- measurePerformance.py and plots their values')
-fileOrDb = parser.add_mutually_exclusive_group(required=True)
-fileOrDb.add_argument('-d', '--datafile',
- dest='datafile', action='append', default=None, required=False,
- help='indicate a file to use as input. must be in the format output by\
- clblas.measurePerformance.py. may be used multiple times to indicate\
- multiple input files. e.g., -d cypressOutput.txt -d caymanOutput.txt')
-parser.add_argument('-x', '--x_axis',
- dest='graphxaxis', default=None, choices=xaxisvalues, required=True,
- help='indicate which value will be represented on the x axis. problemsize\
- is defined as x*y*z*batchsize')
-parser.add_argument('-y', '--y_axis',
- dest='graphyaxis', default='gflops', choices=yaxisvalues,
- help='indicate which value will be represented on the y axis')
-parser.add_argument('--plot',
- dest='plot', default=None, choices=plotvalues,
- help='indicate which of {} should be used to differentiate multiple plots.\
- this will be chosen automatically if not specified'.format(plotvalues))
-parser.add_argument('--title',
- dest='graphtitle', default=None,
- help='the desired title for the graph generated by this execution. if\
- GRAPHTITLE contains any spaces, it must be entered in \"double quotes\".\
- if this option is not specified, the title will be autogenerated')
-parser.add_argument('--x_axis_label',
- dest='xaxislabel', default=None,
- help='the desired label for the graph\'s x-axis. if XAXISLABEL contains\
- any spaces, it must be entered in \"double quotes\". if this option\
- is not specified, the x-axis label will be autogenerated')
-parser.add_argument('--x_axis_scale',
- dest='xaxisscale', default=None, choices=['linear','log2','log10'],
- help='the desired scale for the graph\'s x-axis. if nothing is specified,\
- it will be selected automatically')
-parser.add_argument('--y_axis_label',
- dest='yaxislabel', default=None,
- help='the desired label for the graph\'s y-axis. if YAXISLABEL contains any\
- spaces, it must be entered in \"double quotes\". if this option is not\
- specified, the y-axis label will be autogenerated')
-parser.add_argument('--outputfile',
- dest='outputFilename', default=None,
- help='name of the file to output graphs. Supported formats: emf, eps, pdf, png, ps, raw, rgba, svg, svgz.')
-
-args = parser.parse_args()
-
-if args.datafile != None:
- plotFromDataFile()
-else:
- print "Atleast specify if you want to use text files or database for plotting graphs. Use -h or --help option for more details"
- quit()
-