112269Sradhika.jagtap@arm.com#! /usr/bin/python 212269Sradhika.jagtap@arm.com# 312269Sradhika.jagtap@arm.com# Copyright (c) 2017 ARM Limited 412269Sradhika.jagtap@arm.com# All rights reserved 512269Sradhika.jagtap@arm.com# 612269Sradhika.jagtap@arm.com# The license below extends only to copyright in the software and shall 712269Sradhika.jagtap@arm.com# not be construed as granting a license to any other intellectual 812269Sradhika.jagtap@arm.com# property including but not limited to intellectual property relating 912269Sradhika.jagtap@arm.com# to a hardware implementation of the functionality of the software 1012269Sradhika.jagtap@arm.com# licensed hereunder. You may use the software subject to the license 1112269Sradhika.jagtap@arm.com# terms below provided that you ensure that this notice is replicated 1212269Sradhika.jagtap@arm.com# unmodified and in its entirety in all distributions of the software, 1312269Sradhika.jagtap@arm.com# modified or unmodified, in source code or in binary form. 1412269Sradhika.jagtap@arm.com# 1512269Sradhika.jagtap@arm.com# Redistribution and use in source and binary forms, with or without 1612269Sradhika.jagtap@arm.com# modification, are permitted provided that the following conditions are 1712269Sradhika.jagtap@arm.com# met: redistributions of source code must retain the above copyright 1812269Sradhika.jagtap@arm.com# notice, this list of conditions and the following disclaimer; 1912269Sradhika.jagtap@arm.com# redistributions in binary form must reproduce the above copyright 2012269Sradhika.jagtap@arm.com# notice, this list of conditions and the following disclaimer in the 2112269Sradhika.jagtap@arm.com# documentation and/or other materials provided with the distribution; 2212269Sradhika.jagtap@arm.com# neither the name of the copyright holders nor the names of its 2312269Sradhika.jagtap@arm.com# contributors may be used to endorse or promote products derived from 2412269Sradhika.jagtap@arm.com# this software without specific prior written permission. 2512269Sradhika.jagtap@arm.com# 2612269Sradhika.jagtap@arm.com# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 2712269Sradhika.jagtap@arm.com# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2812269Sradhika.jagtap@arm.com# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 2912269Sradhika.jagtap@arm.com# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 3012269Sradhika.jagtap@arm.com# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 3112269Sradhika.jagtap@arm.com# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 3212269Sradhika.jagtap@arm.com# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 3312269Sradhika.jagtap@arm.com# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 3412269Sradhika.jagtap@arm.com# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 3512269Sradhika.jagtap@arm.com# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 3612269Sradhika.jagtap@arm.com# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 3712269Sradhika.jagtap@arm.com# 3812269Sradhika.jagtap@arm.com# Authors: Radhika Jagtap 3912269Sradhika.jagtap@arm.com 4012269Sradhika.jagtap@arm.comimport PlotPowerStates as plotter 4112269Sradhika.jagtap@arm.comimport argparse 4212269Sradhika.jagtap@arm.comimport os 4312269Sradhika.jagtap@arm.comfrom subprocess import call 4412269Sradhika.jagtap@arm.com 4512269Sradhika.jagtap@arm.comparser = argparse.ArgumentParser(formatter_class= 4612269Sradhika.jagtap@arm.com argparse.ArgumentDefaultsHelpFormatter) 4712269Sradhika.jagtap@arm.com 4812269Sradhika.jagtap@arm.comparser.add_argument("--statsfile", required=True, help="stats file path") 4912269Sradhika.jagtap@arm.com 5012269Sradhika.jagtap@arm.comparser.add_argument("--bankutils", default="b1 b2 b3", help="target bank " \ 5112269Sradhika.jagtap@arm.com "utilization values separated by space, e.g. \"1 4 8\"") 5212269Sradhika.jagtap@arm.com 5312269Sradhika.jagtap@arm.comparser.add_argument("--seqbytes", default="s1 s2 s3", help="no. of " \ 5412269Sradhika.jagtap@arm.com "sequential bytes requested by each traffic gen request." \ 5512269Sradhika.jagtap@arm.com " e.g. \"64 256 512\"") 5612269Sradhika.jagtap@arm.com 5712269Sradhika.jagtap@arm.comparser.add_argument("--delays", default="d1 d2 d3", help="string of delay" 5812269Sradhika.jagtap@arm.com " values separated by a space. e.g. \"1 20 100\"") 5912269Sradhika.jagtap@arm.com 6012269Sradhika.jagtap@arm.comparser.add_argument("--outdir", help="directory to output plots", 6112269Sradhika.jagtap@arm.com default='plot_test') 6212269Sradhika.jagtap@arm.com 6312269Sradhika.jagtap@arm.comparser.add_argument("--pdf", action='store_true', help="output Latex and pdf") 6412269Sradhika.jagtap@arm.com 6512269Sradhika.jagtap@arm.comdef main(): 6612269Sradhika.jagtap@arm.com args = parser.parse_args() 6712269Sradhika.jagtap@arm.com if not os.path.isfile(args.statsfile): 6812269Sradhika.jagtap@arm.com exit('Error! File not found: %s' % args.statsfile) 6912269Sradhika.jagtap@arm.com if not os.path.isdir(args.outdir): 7012269Sradhika.jagtap@arm.com os.mkdir(args.outdir) 7112269Sradhika.jagtap@arm.com 7212269Sradhika.jagtap@arm.com bank_util_list = args.bankutils.strip().split() 7312269Sradhika.jagtap@arm.com seqbyte_list = args.seqbytes.strip().split() 7412269Sradhika.jagtap@arm.com delays = args.delays.strip().split() 7512269Sradhika.jagtap@arm.com plotter.plotLowPStates(args.outdir + '/', args.statsfile, bank_util_list, 7612269Sradhika.jagtap@arm.com seqbyte_list, delays) 7712269Sradhika.jagtap@arm.com 7812269Sradhika.jagtap@arm.com if args.pdf: 7912269Sradhika.jagtap@arm.com textwidth = '0.5' 8012269Sradhika.jagtap@arm.com 8112269Sradhika.jagtap@arm.com ### Time and energy plots ### 8212269Sradhika.jagtap@arm.com ############################# 8312269Sradhika.jagtap@arm.com # place tex and pdf files in outdir 8412269Sradhika.jagtap@arm.com os.chdir(args.outdir) 8512269Sradhika.jagtap@arm.com texfile_s = 'stacked_lowp_sweep.tex' 8612269Sradhika.jagtap@arm.com print "\t", texfile_s 8712269Sradhika.jagtap@arm.com outfile = open(texfile_s, 'w') 8812269Sradhika.jagtap@arm.com 8912269Sradhika.jagtap@arm.com startDocText(outfile) 9012269Sradhika.jagtap@arm.com outfile.write("\\begin{figure} \n\centering\n") 9112269Sradhika.jagtap@arm.com ## Time plots for all delay values 9212269Sradhika.jagtap@arm.com for delay in delays: 9312269Sradhika.jagtap@arm.com # Time 9412269Sradhika.jagtap@arm.com filename = plotter.stateTimePlotName(str(delay) + '-') 9512269Sradhika.jagtap@arm.com outfile.write(wrapForGraphic(filename, textwidth)) 9612269Sradhika.jagtap@arm.com outfile.write(getCaption(delay)) 9712269Sradhika.jagtap@arm.com outfile.write("\end{figure}\n") 9812269Sradhika.jagtap@arm.com 9912269Sradhika.jagtap@arm.com # Energy plots for all delay values 10012269Sradhika.jagtap@arm.com outfile.write("\\begin{figure} \n\centering\n") 10112269Sradhika.jagtap@arm.com for delay in delays: 10212269Sradhika.jagtap@arm.com # Energy 10312269Sradhika.jagtap@arm.com filename = plotter.stateEnergyPlotName(str(delay) + '-') 10412269Sradhika.jagtap@arm.com outfile.write(wrapForGraphic(filename, textwidth)) 10512269Sradhika.jagtap@arm.com outfile.write(getCaption(delay)) 10612269Sradhika.jagtap@arm.com outfile.write("\end{figure}\n") 10712269Sradhika.jagtap@arm.com 10812269Sradhika.jagtap@arm.com endDocText(outfile) 10912269Sradhika.jagtap@arm.com outfile.close() 11012269Sradhika.jagtap@arm.com 11112269Sradhika.jagtap@arm.com print "\n Generating pdf file" 11212269Sradhika.jagtap@arm.com print "*******************************" 11312269Sradhika.jagtap@arm.com print "\tpdflatex ", texfile_s 11412269Sradhika.jagtap@arm.com # Run pdflatex to generate to pdf 11512269Sradhika.jagtap@arm.com call(["pdflatex", texfile_s]) 11612269Sradhika.jagtap@arm.com call(["open", texfile_s.split('.')[0] + '.pdf']) 11712269Sradhika.jagtap@arm.com 11812269Sradhika.jagtap@arm.com 11912269Sradhika.jagtap@arm.comdef getCaption(delay): 12012269Sradhika.jagtap@arm.com return ('\caption{' + 12112269Sradhika.jagtap@arm.com 'itt delay = ' + str(delay) + 12212269Sradhika.jagtap@arm.com '}\n') 12312269Sradhika.jagtap@arm.com 12412269Sradhika.jagtap@arm.comdef wrapForGraphic(filename, width='1.0'): 12512269Sradhika.jagtap@arm.com # \t is tab and needs to be escaped, therefore \\textwidth 12612269Sradhika.jagtap@arm.com return '\includegraphics[width=' + width + \ 12712269Sradhika.jagtap@arm.com '\\textwidth]{' + filename + '}\n' 12812269Sradhika.jagtap@arm.com 12912269Sradhika.jagtap@arm.comdef startDocText(outfile): 13012269Sradhika.jagtap@arm.com 13112269Sradhika.jagtap@arm.com start_stuff = ''' 13212269Sradhika.jagtap@arm.com\documentclass[a4paper,landscape,twocolumn]{article} 13312269Sradhika.jagtap@arm.com 13412269Sradhika.jagtap@arm.com\usepackage{graphicx} 13512269Sradhika.jagtap@arm.com\usepackage[margin=0.5cm]{geometry} 13612269Sradhika.jagtap@arm.com\\begin{document} 13712269Sradhika.jagtap@arm.com''' 13812269Sradhika.jagtap@arm.com outfile.write(start_stuff) 13912269Sradhika.jagtap@arm.com 14012269Sradhika.jagtap@arm.comdef endDocText(outfile): 14112269Sradhika.jagtap@arm.com 14212269Sradhika.jagtap@arm.com end_stuff = ''' 14312269Sradhika.jagtap@arm.com 14412269Sradhika.jagtap@arm.com\end{document} 14512269Sradhika.jagtap@arm.com 14612269Sradhika.jagtap@arm.com''' 14712269Sradhika.jagtap@arm.com outfile.write(end_stuff) 14812269Sradhika.jagtap@arm.com 14912269Sradhika.jagtap@arm.com# Call main 15012269Sradhika.jagtap@arm.comif __name__ == '__main__': 15112269Sradhika.jagtap@arm.com main()