| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689 |
- import argparse
- import sqlite3
- import re
- import pandas as pd
- import numpy as np
- from TestScripts.doc.Structure import *
- from TestScripts.doc.Format import *
- import os.path
- runidCMD = "runid = ?"
- # Command to get last runid
- lastID="""SELECT runid FROM RUN ORDER BY runid DESC LIMIT 1
- """
- # Command to get last runid and date
- lastIDAndDate="""SELECT date FROM RUN WHERE runid=?
- """
- # Command to get last runid
- runIDDetails="""SELECT distinct core FROM %s
- INNER JOIN CORE USING(coreid)
- WHERE %s
- """
- def joinit(iterable, delimiter):
- # Intersperse a delimiter between element of a list
- it = iter(iterable)
- yield next(it)
- for x in it:
- yield delimiter
- yield x
- def getLastRunID():
- r=c.execute(lastID)
- return(int(r.fetchone()[0]))
- def getrunIDDate(forID):
- r=c.execute(lastIDAndDate,(forID,))
- return(r.fetchone()[0])
- runid = 1
- parser = argparse.ArgumentParser(description='Generate summary benchmarks')
- parser.add_argument('-b', nargs='?',type = str, default="bench.db", help="Database")
- parser.add_argument('-o', nargs='?',type = str, default="full.md", help="Full summary")
- parser.add_argument('-r', action='store_true', help="Regression database")
- parser.add_argument('-t', nargs='?',type = str, default="md", help="type md or html")
- parser.add_argument('-byc', action='store_true', help="Result oganized by Compiler")
- parser.add_argument('-g', action='store_true', help="Include graphs in regression report")
- parser.add_argument('-details', action='store_true', help="Details about runids")
- parser.add_argument('-lastid', action='store_true', help="Get last ID")
- parser.add_argument('-comments', nargs='?',type = str, default="comments.txt", help="Comment section")
- # For runid or runid range
- parser.add_argument('others', nargs=argparse.REMAINDER,help="Run ID")
- args = parser.parse_args()
- c = sqlite3.connect(args.b)
- if args.others:
- if len(args.others) == 1:
- if re.search(r'[,]',args.others[0]):
- runidval=tuple([int(x) for x in args.others[0].split(",")])
- runidCMD=["runid == ?" for x in runidval]
- runidCMD = "".join(joinit(runidCMD," OR "))
- runidHeader="".join(joinit([str(x) for x in runidval]," , "))
- runidCMD = "(" + runidCMD + ")"
- else:
- runid=int(args.others[0])
- runidHeader="%d" % runid
- runidval = (runid,)
- else:
- runidCMD = "runid >= ? AND runid <= ?"
- runid=int(args.others[1])
- runidLOW=int(args.others[0])
- runidval = (runidLOW,runid)
- runidHeader="%d <= runid <= %d" % runidval
- else:
- runid=getLastRunID()
- print("Last run ID = %d\n" % runid)
- runidval=(runid,)
- runidHeader="%d" % runid
- # We extract data only from data tables
- # Those tables below are used for descriptions
- REMOVETABLES=['TESTNAME','TESTDATE','RUN','CORE', 'PLATFORM', 'COMPILERKIND', 'COMPILER', 'TYPE', 'CATEGORY', 'CONFIG']
- # This is assuming the database is generated by the regression script
- # So platform is the same for all benchmarks.
- # Category and type is coming from the test name in the yaml
- # So no need to add this information here
- # Name is removed here because it is added at the beginning
- REMOVECOLUMNS=['runid','name','type','platform','category','coredef','OPTIMIZED','HARDFP','FASTMATH','NEON','HELIUM','UNROLL','ROUNDING','DATE','compilerkindid','date','categoryid', 'ID', 'platformid', 'coreid', 'compilerid', 'typeid']
- REMOVECOLUMNSFORHISTORY=['Regression','MAXREGCOEF','name','type','platform','category','coredef','OPTIMIZED','HARDFP','FASTMATH','NEON','HELIUM','UNROLL','ROUNDING','DATE','compilerkindid','date','categoryid', 'ID', 'platformid', 'coreid', 'compilerid', 'typeid']
- # Get existing benchmark tables
- def getBenchTables():
- r=c.execute("SELECT name FROM sqlite_master WHERE type='table'")
- benchtables=[]
- for table in r:
- if not table[0] in REMOVETABLES:
- benchtables.append(table[0])
- return(benchtables)
- # get existing types in a table
- def getExistingTypes(benchTable):
- r=c.execute("select distinct typeid from %s order by typeid desc" % benchTable).fetchall()
- result=[x[0] for x in r]
- return(result)
- def getrunIDDetails():
- tables=getBenchTables()
- r=[]
- for table in tables:
- r += [x[0] for x in c.execute(runIDDetails % (table,runidCMD),runidval).fetchall()]
- r=list(set(r))
- print(r)
- if args.lastid:
- quit()
-
- if args.details:
- getrunIDDetails()
- quit()
- # Get compilers from specific type and table
- allCompilers="""select distinct compilerid from %s WHERE typeid=?"""
- # Get compilers from specific type and table
- allCores="""select distinct coreid from %s WHERE typeid=?"""
- compilerDesc="""select compiler,version from COMPILER
- INNER JOIN COMPILERKIND USING(compilerkindid) WHERE compilerid=?"""
- coreDesc="""select core from CORE WHERE coreid=?"""
- # Get existing compiler in a table for a specific type
- # (In case report is structured by types)
- def getExistingCompiler(benchTable,typeid):
- r=c.execute(allCompilers % benchTable,(typeid,)).fetchall()
- return([x[0] for x in r])
- def getExistingCores(benchTable,typeid):
- r=c.execute(allCores % benchTable,(typeid,)).fetchall()
- return([x[0] for x in r])
- def getCoreDesc(compilerid):
- r=c.execute(coreDesc,(compilerid,)).fetchone()
- return(r)
- def getCompilerDesc(compilerid):
- r=c.execute(compilerDesc,(compilerid,)).fetchone()
- return(r)
- # Get type name from type id
- def getTypeName(typeid):
- r=c.execute("select type from TYPE where typeid=?",(typeid,)).fetchone()
- return(r[0])
-
- # Diff of 2 lists
- def diff(first, second):
- second = set(second)
- return [item for item in first if item not in second]
- # Command to get data for specific core
- # and type
- historyCmd="""select %s from %s
- INNER JOIN CATEGORY USING(categoryid)
- INNER JOIN PLATFORM USING(platformid)
- INNER JOIN CORE USING(coreid)
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- INNER JOIN TYPE USING(typeid)
- INNER JOIN TESTNAME USING(testnameid)
- WHERE compilerid=? AND coreid=? AND typeid = ? AND ID = ? AND runid > (? - 10)
- """
- compilersForHistory="""select distinct compilerid,compiler,version from %s
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- WHERE coreid=? AND typeid = ? AND ID = ? AND runid > (? - 10)
- """
- # Command to get data for specific core
- # and type
- benchCmdForCore="""select %s from %s
- INNER JOIN CATEGORY USING(categoryid)
- INNER JOIN PLATFORM USING(platformid)
- INNER JOIN CORE USING(coreid)
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- INNER JOIN TYPE USING(typeid)
- INNER JOIN TESTNAME USING(testnameid)
- WHERE coreid=? AND typeid = ? AND %s
- """
- coresForHistory="""select distinct coreid,core from %s
- INNER JOIN CORE USING(coreid)
- WHERE compilerid=? AND typeid = ? AND ID = ? AND runid > (? - 10)
- """
- # Command to get data for specific compiler
- # and type
- benchCmdForCompiler="""select %s from %s
- INNER JOIN CATEGORY USING(categoryid)
- INNER JOIN PLATFORM USING(platformid)
- INNER JOIN CORE USING(coreid)
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- INNER JOIN TYPE USING(typeid)
- INNER JOIN TESTNAME USING(testnameid)
- WHERE compilerid=? AND typeid = ? AND %s
- """
- # Command to get test names for specific compiler
- # and type
- benchNamesForCore="""select distinct ID,name from %s
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- INNER JOIN TYPE USING(typeid)
- INNER JOIN TESTNAME USING(testnameid)
- WHERE coreid=? AND typeid = ? AND %s
- """
- # Command to get test names for specific compiler
- # and type
- benchNamesForCompiler="""select distinct ID,name from %s
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- INNER JOIN TYPE USING(typeid)
- INNER JOIN TESTNAME USING(testnameid)
- WHERE compilerid=? AND typeid = ? AND %s
- """
- # Command to get columns for specific table
- benchCmdColumns="""select * from %s
- INNER JOIN CATEGORY USING(categoryid)
- INNER JOIN PLATFORM USING(platformid)
- INNER JOIN CORE USING(coreid)
- INNER JOIN COMPILER USING(compilerid)
- INNER JOIN COMPILERKIND USING(compilerkindid)
- INNER JOIN TESTNAME USING(testnameid)
- INNER JOIN TYPE USING(typeid)
- """
- def joinit(iterable, delimiter):
- it = iter(iterable)
- yield next(it)
- for x in it:
- yield delimiter
- yield x
- # Is not a column name finishing by id
- # (often primary key for thetable)
- def isNotIDColumn(col):
- if re.match(r'^.*id$',col):
- return(False)
- else:
- return(True)
- # Get test names
- # for specific typeid and core (for the data)
- def getTestNamesForCore(benchTable,core,typeid):
- vals=(core,typeid) + runidval
- result=c.execute(benchNamesForCore % (benchTable,runidCMD),vals).fetchall()
- names=[(x[0],x[1]) for x in list(result)]
- return(names)
- # Get test names
- # for specific typeid and compiler (for the data)
- def getTestNamesForCompiler(benchTable,comp,typeid):
- vals=(comp,typeid) + runidval
- result=c.execute(benchNamesForCompiler % (benchTable,runidCMD),vals).fetchall()
- names=[(x[0],x[1]) for x in list(result)]
- return(names)
- # Command to get data for specific core
- # and type
- nbElemsInBenchAndTypeAndCoreCmd="""select count(*) from %s
- WHERE coreid=? AND typeid = ? AND %s
- """
- # Command to get data for specific compiler
- # and type
- nbElemsInBenchAndTypeAndCompilerCmd="""select count(*) from %s
- WHERE compilerid=? AND typeid = ? AND %s
- """
- nbElemsInBenchAndTypeCmd="""select count(*) from %s
- WHERE typeid = ? AND %s
- """
- nbElemsInBenchCmd="""select count(*) from %s
- WHERE %s
- """
- categoryName="""select distinct category from %s
- INNER JOIN CATEGORY USING(categoryid)
- WHERE %s
- """
- def getCategoryName(benchTable,runid):
- result=c.execute(categoryName % (benchTable,runidCMD),runidval).fetchone()
- return(result[0])
- # Get nb elems in a table
- def getNbElemsInBenchAndTypeAndCoreCmd(benchTable,coreid,typeid):
- vals=(coreid,typeid) + runidval
- result=c.execute(nbElemsInBenchAndTypeAndCoreCmd % (benchTable,runidCMD),vals).fetchone()
- return(result[0])
- # Get nb elems in a table
- def getNbElemsInBenchAndTypeAndCompilerCmd(benchTable,comp,typeid):
- vals=(comp,typeid) + runidval
- result=c.execute(nbElemsInBenchAndTypeAndCompilerCmd % (benchTable,runidCMD),vals).fetchone()
- return(result[0])
- def getNbElemsInBenchAndTypeCmd(benchTable,typeid):
- vals=(typeid,) + runidval
- result=c.execute(nbElemsInBenchAndTypeCmd % (benchTable,runidCMD),vals).fetchone()
- return(result[0])
- def getNbElemsInBenchCmd(benchTable):
- result=c.execute(nbElemsInBenchCmd % (benchTable,runidCMD),runidval).fetchone()
- return(result[0])
- # Get names of columns and data for a table
- # for specific typeid and coreid (for the data)
- def getColNamesAndHistory(benchTable,compiler,core,typeid,testid):
- cursor=c.cursor()
- result=cursor.execute(benchCmdColumns % (benchTable))
- cols= [member[0] for member in cursor.description]
- keepCols = ['name','runid'] + [c for c in diff(cols , REMOVECOLUMNSFORHISTORY) if isNotIDColumn(c)]
- keepColsStr = "".join(joinit(keepCols,","))
- vals=(compiler,core,typeid,testid,runid)
- result=cursor.execute(historyCmd % (keepColsStr,benchTable),vals)
- vals =np.array([list(x) for x in list(result)])
- return(keepCols,vals)
- # Get names of columns and data for a table
- # for specific typeid and coreid (for the data)
- def getColNamesAndDataForCore(benchTable,core,typeid):
- cursor=c.cursor()
- result=cursor.execute(benchCmdColumns % (benchTable))
- cols= [member[0] for member in cursor.description]
- keepCols = ['name'] + [c for c in diff(cols , REMOVECOLUMNS) if isNotIDColumn(c)]
- keepColsStr = "".join(joinit(keepCols,","))
- vals=(core,typeid) + runidval
- result=cursor.execute(benchCmdForCore % (keepColsStr,benchTable,runidCMD),vals)
- vals =np.array([list(x) for x in list(result)])
- return(keepCols,vals)
- # Get names of columns and data for a table
- # for specific typeid and compiler (for the data)
- def getColNamesAndDataForCompiler(benchTable,comp,typeid):
- cursor=c.cursor()
- result=cursor.execute(benchCmdColumns % (benchTable))
- cols= [member[0] for member in cursor.description]
- keepCols = ['name'] + [c for c in diff(cols , REMOVECOLUMNS) if isNotIDColumn(c)]
- keepColsStr = "".join(joinit(keepCols,","))
- vals=(comp,typeid) + runidval
- result=cursor.execute(benchCmdForCompiler % (keepColsStr,benchTable,runidCMD),vals)
- vals =np.array([list(x) for x in list(result)])
- return(keepCols,vals)
- PARAMS=["NB","NumTaps", "NBA", "NBB", "Factor", "NumStages","VECDIM","NBR","NBC","NBI","IFFT", "BITREV"]
- def regressionTableFor(byname,name,section,ref,toSort,indexCols,field):
- data=ref.pivot_table(index=indexCols, columns=byname,
- values=[field], aggfunc='first')
-
- data=data.sort_values(toSort)
-
- cores = [c[1] for c in list(data.columns)]
- columns = diff(indexCols,['name'])
- dataTable=Table(columns,cores)
- section.addContent(dataTable)
- dataForFunc=data.loc[name]
- if type(dataForFunc) is pd.DataFrame:
- bars={'cols':columns,'cores':cores,'data':[]}
- for row in dataForFunc.itertuples():
- row=list(row)
- if type(row[0]) is int:
- row=[row[0]] + row[1:]
- else:
- row=list(row[0]) + row[1:]
- if field=="MAXREGCOEF":
- newrow = row
- newrow[len(columns):] = [("%.3f" % x) for x in row[len(columns):]]
- row=newrow
- dataTable.addRow(row)
- bars['data'].append(row)
- return(bars)
- else:
- if field=="MAXREGCOEF":
- dataForFunc=[("%.3f" % x) for x in dataForFunc]
- dataTable.addRow(dataForFunc)
- return(list(zip(cores,dataForFunc)))
- def formatColumnName(c):
- return("".join(joinit(c,":")))
- def getCoresForHistory(benchTable,compilerid,typeid,testid,runid):
- vals=(compilerid,typeid,testid,runid)
- result=c.execute(coresForHistory % benchTable,vals).fetchall()
- ids=[(x[0],x[1]) for x in list(result)]
- return(ids)
- def getCompilerForHistory(benchTable,coreid,typeid,testid,runid):
- vals=(coreid,typeid,testid,runid)
- result=c.execute(compilersForHistory % benchTable,vals).fetchall()
- ids=[(x[0],x[1],x[2]) for x in list(result)]
- return(ids)
- def getHistory(desc,testid,indexCols):
- benchName,sectionID,typeid,runid = desc
- #print(benchName)
- #print(sectionID)
- #print(typeid)
- #print(testid)
- columns = diff(indexCols,['name'])
- #print(columns)
- if args.byc:
- coreid=sectionID
- compilerids=getCompilerForHistory(benchName,coreid,typeid,testid,runid)
- series={}
- for compilerid,compilername,version in compilerids:
- result=getColNamesAndHistory(benchName,compilerid,coreid,typeid,testid)
- #print("%s:%s" % (compilername,version))
- maxpos = result[0].index('MAX')
- lrunid = result[0].index('runid')
- r=[[int(x[lrunid]),int(x[maxpos])] for x in result[1:][0]]
- series[corename]=r
- hist=History(series,runid)
- return(hist)
- else:
- compilerid=sectionID
- coreids = getCoresForHistory(benchName,compilerid,typeid,testid,runid)
- series={}
- for coreid,corename in coreids:
- result=getColNamesAndHistory(benchName,compilerid,coreid,typeid,testid)
- #print(corename)
- maxpos = result[0].index('MAX')
- corepos = result[0].index('core')
- lrunid = result[0].index('runid')
- r=[[int(x[lrunid]),int(x[maxpos])] for x in result[1:][0]]
- series[corename]=r
- hist=History(series,runid)
- return(hist)
- def formatTableBy(desc,byname,section,typeSection,testNames,cols,vals):
- if vals.size != 0:
- ref=pd.DataFrame(vals,columns=cols)
- toSort=["name"]
-
- for param in PARAMS:
- if param in ref.columns:
- ref[param]=pd.to_numeric(ref[param])
- toSort.append(param)
- if args.r:
- # Regression table
- ref['MAX']=pd.to_numeric(ref['MAX'])
- ref['MAXREGCOEF']=pd.to_numeric(ref['MAXREGCOEF'])
-
- indexCols=diff(cols,byname + ['Regression','MAXREGCOEF','MAX'] + section)
- valList = ['Regression']
- else:
- ref['CYCLES']=pd.to_numeric(ref['CYCLES'])
-
- indexCols=diff(cols,byname + ['CYCLES'] + section)
- valList = ['CYCLES']
-
-
- for testid,name in testNames:
- if args.r:
- testSection = Section(name)
- typeSection.addSection(testSection)
- maxCyclesSection = Section("Max cycles")
- testSection.addSection(maxCyclesSection)
- theCycles=regressionTableFor(byname,name,maxCyclesSection,ref,toSort,indexCols,'MAX')
- if args.g:
- if type(theCycles) is dict:
- nbParams=len(theCycles['cols'])
- for bar in theCycles['data']:
- params=bar[0:nbParams]
- values=bar[nbParams:]
- title=[("%s=%s" % x) for x in list(zip(theCycles['cols'],params))]
- title="".join(joinit(title," "))
- sec=Section(title)
- maxCyclesSection.addSection(sec)
- values=list(zip(theCycles['cores'],values))
- barChart=BarChart(values)
- sec.addContent(barChart)
- else:
- #print(theCycles)
- sec=Section("Graph")
- maxCyclesSection.addSection(sec)
- barChart=BarChart(theCycles)
- sec.addContent(barChart)
- #history=getHistory(desc,testid,indexCols)
- #testSection.addContent(history)
- regressionSection = Section("Regression")
- testSection.addSection(regressionSection)
- regressionTableFor(byname,name,regressionSection,ref,toSort,indexCols,'Regression')
-
-
- maxRegCoefSection = Section("Max Reg Coef")
- testSection.addSection(maxRegCoefSection)
- regressionTableFor(byname,name,maxRegCoefSection,ref,toSort,indexCols,'MAXREGCOEF')
- else:
- data=ref.pivot_table(index=indexCols, columns=byname,
- values=valList, aggfunc='first')
-
- data=data.sort_values(toSort)
-
- #print(list(data.columns))
- columnsID = [formatColumnName(c[1:]) for c in list(data.columns)]
- columns = diff(indexCols,['name'])
- testSection = Section(name)
- typeSection.addSection(testSection)
- dataTable=Table(columns,columnsID)
- testSection.addContent(dataTable)
- dataForFunc=data.loc[name]
- if type(dataForFunc) is pd.DataFrame:
- for row in dataForFunc.itertuples():
- row=list(row)
- if type(row[0]) is int:
- row=[row[0]] + row[1:]
- else:
- row=list(row[0]) + row[1:]
- dataTable.addRow(row)
- else:
- dataTable.addRow(dataForFunc)
- # Add a report for each table
- def addReportFor(document,runid,benchName):
- nbElems = getNbElemsInBenchCmd(benchName)
- if nbElems > 0:
- categoryName = getCategoryName(benchName,runid)
- benchSection = Section(categoryName)
- document.addSection(benchSection)
- print("Process %s\n" % benchName)
- allTypes = getExistingTypes(benchName)
- # Add report for each type
- for aTypeID in allTypes:
- nbElems = getNbElemsInBenchAndTypeCmd(benchName,aTypeID)
- if nbElems > 0:
- typeName = getTypeName(aTypeID)
- typeSection = Section(typeName)
- benchSection.addSection(typeSection)
- if args.byc:
- ## Add report for each core
- allCores = getExistingCores(benchName,aTypeID)
- for core in allCores:
- #print(core)
- nbElems = getNbElemsInBenchAndTypeAndCoreCmd(benchName,core,aTypeID)
- # Print test results for table, type, compiler
- if nbElems > 0:
- coreName=getCoreDesc(core)
- coreSection = Section("%s" % coreName)
- typeSection.addSection(coreSection)
- cols,vals=getColNamesAndDataForCore(benchName,core,aTypeID)
- desc=(benchName,core,aTypeID,runid)
- names=getTestNamesForCore(benchName,core,aTypeID)
- formatTableBy(desc,['compiler','version'],['core'],coreSection,names,cols,vals)
- else:
- ## Add report for each compiler
- allCompilers = getExistingCompiler(benchName,aTypeID)
- for compiler in allCompilers:
- #print(compiler)
- nbElems = getNbElemsInBenchAndTypeAndCompilerCmd(benchName,compiler,aTypeID)
- # Print test results for table, type, compiler
- if nbElems > 0:
- compilerName,version=getCompilerDesc(compiler)
- compilerSection = Section("%s (%s)" % (compilerName,version))
- typeSection.addSection(compilerSection)
- cols,vals=getColNamesAndDataForCompiler(benchName,compiler,aTypeID)
- desc=(benchName,compiler,aTypeID,runid)
- names=getTestNamesForCompiler(benchName,compiler,aTypeID)
- formatTableBy(desc,['core'],['version','compiler'],compilerSection,names,cols,vals)
-
- toc=[Hierarchy("BasicMathsBenchmarks"),
- Hierarchy("ComplexMathsBenchmarks"),
- Hierarchy("FastMath"),
- Hierarchy("Filters",
- [Hierarchy("FIR"),
- Hierarchy("BIQUAD"),
- Hierarchy("DECIM"),
- Hierarchy("MISC")]),
- Hierarchy("Support Functions",
- [Hierarchy("Support"),
- Hierarchy("SupportBar")]),
-
- Hierarchy("Matrix Operations" ,
- [Hierarchy("Binary"),
- Hierarchy("Unary")]),
- Hierarchy("Transform"),
- ]
- processed=[]
- def addComments(document):
- if os.path.exists(args.comments):
- section=Section("Measurement Context")
- document.addSection(section)
- para=""
- with open(args.comments,"r") as r:
- for l in r:
- if l.strip():
- para += l
- else:
- section.addContent(Text(para))
- para=""
- if para:
- section.addContent(Text(para))
- def createDoc(document,sections,benchtables):
- global processed
- for s in sections:
- if s.name in benchtables:
- addReportFor(document,runid,s.name)
- processed.append(s.name)
- else:
- section=Section(s.name)
- document.addSection(section)
- createDoc(section,s.sections,benchtables)
- try:
- benchtables=getBenchTables()
- theDate = getrunIDDate(runid)
- document = Document(runidHeader)
- addComments(document)
- createDoc(document,toc,benchtables)
-
- misc=Section("Miscellaneous")
- document.addSection(misc)
- remaining=diff(benchtables,processed)
- for bench in remaining:
- addReportFor(misc,runid,bench)
- #for bench in benchtables:
- # addReportFor(document,bench)
- with open(args.o,"w") as output:
- if args.t=="md":
- document.accept(Markdown(output))
- if args.t=="html":
- document.accept(HTML(output,args.r))
- finally:
- c.close()
-
|