db.py
来自「linux下基于c++的处理器仿真平台。具有处理器流水线」· Python 代码 · 共 474 行 · 第 1/2 页
PY
474 行
# Copyright (c) 2003, 2004# The Regents of The University of Michigan# All Rights Reserved## This code is part of the M5 simulator, developed by Nathan Binkert,# Erik Hallnor, Steve Raasch, and Steve Reinhardt, with contributions# from Ron Dreslinski, Dave Greene, Lisa Hsu, Kevin Lim, Ali Saidi,# and Andrew Schultz.## Permission is granted to use, copy, create derivative works and# redistribute this software and such derivative works for any purpose,# so long as the copyright notice above, this grant of permission, and# the disclaimer below appear in all copies made; and so long as the# name of The University of Michigan is not used in any advertising or# publicity pertaining to the use or distribution of this software# without specific, written prior authorization.## THIS SOFTWARE IS PROVIDED AS IS, WITHOUT REPRESENTATION FROM THE# UNIVERSITY OF MICHIGAN AS TO ITS FITNESS FOR ANY PURPOSE, AND WITHOUT# WARRANTY BY THE UNIVERSITY OF MICHIGAN OF ANY KIND, EITHER EXPRESS OR# IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED WARRANTIES OF# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE REGENTS OF# THE UNIVERSITY OF MICHIGAN SHALL NOT BE LIABLE FOR ANY DAMAGES,# INCLUDING DIRECT, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL# DAMAGES, WITH RESPECT TO ANY CLAIM ARISING OUT OF OR IN CONNECTION# WITH THE USE OF THE SOFTWARE, EVEN IF IT HAS BEEN OR IS HEREAFTER# ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.import MySQLdb, re, stringdef statcmp(a, b): v1 = a.split('.') v2 = b.split('.') last = min(len(v1), len(v2)) - 1 for i,j in zip(v1[0:last], v2[0:last]): if i != j: return cmp(i, j) # Special compare for last element. if len(v1) == len(v2): return cmp(v1[last], v2[last]) else: return cmp(len(v1), len(v2))class RunData: def __init__(self, row): self.run = int(row[0]) self.name = row[1] self.user = row[2] self.project = row[3]class SubData: def __init__(self, row): self.stat = int(row[0]) self.x = int(row[1]) self.y = int(row[2]) self.name = row[3] self.descr = row[4]class Data: def __init__(self, row): if len(row) != 5: raise 'stat db error' self.stat = int(row[0]) self.run = int(row[1]) self.x = int(row[2]) self.y = int(row[3]) self.data = float(row[4]) def __repr__(self): return '''Data(['%d', '%d', '%d', '%d', '%f'])''' % ( self.stat, self.run, self.x, self.y, self.data) class StatData(object): def __init__(self, row): self.stat = int(row[0]) self.name = row[1] self.desc = row[2] self.type = row[3] self.prereq = int(row[5]) self.precision = int(row[6]) import flags self.flags = 0 if int(row[4]): self.flags |= flags.printable if int(row[7]): self.flags |= flags.nozero if int(row[8]): self.flags |= flags.nonan if int(row[9]): self.flags |= flags.total if int(row[10]): self.flags |= flags.pdf if int(row[11]): self.flags |= flags.cdf if self.type == 'DIST' or self.type == 'VECTORDIST': self.min = float(row[12]) self.max = float(row[13]) self.bktsize = float(row[14]) self.size = int(row[15]) if self.type == 'FORMULA': self.formula = self.db.allFormulas[self.stat]class Node(object): def __init__(self, name): self.name = name def __str__(self): return self.nameclass Database(object): def __init__(self): self.host = 'zizzer.pool' self.user = '' self.passwd = '' self.db = 'm5stats' self.cursor = None self.allStats = [] self.allStatIds = {} self.allStatNames = {} self.allSubData = {} self.allRuns = [] self.allRunIds = {} self.allRunNames = {} self.allBins = [] self.allBinIds = {} self.allBinNames = {} self.allFormulas = {} self.stattop = {} self.statdict = {} self.statlist = [] self.mode = 'sum'; self.runs = None self.bins = None self.ticks = None self.__dict__['get'] = type(self).sum def query(self, sql): self.cursor.execute(sql) def update_dict(self, dict): dict.update(self.stattop) def append(self, stat): statname = re.sub(':', '__', stat.name) path = string.split(statname, '.') pathtop = path[0] fullname = '' x = self while len(path) > 1: name = path.pop(0) if not x.__dict__.has_key(name): x.__dict__[name] = Node(fullname + name) x = x.__dict__[name] fullname = '%s%s.' % (fullname, name) name = path.pop(0) x.__dict__[name] = stat self.stattop[pathtop] = self.__dict__[pathtop] self.statdict[statname] = stat self.statlist.append(statname) def connect(self): # connect self.thedb = MySQLdb.connect(db=self.db, host=self.host, user=self.user, passwd=self.passwd) # create a cursor self.cursor = self.thedb.cursor() self.query('''select rn_id,rn_name,rn_sample,rn_user,rn_project from runs''') for result in self.cursor.fetchall(): run = RunData(result); self.allRuns.append(run) self.allRunIds[run.run] = run self.allRunNames[run.name] = run self.query('select * from bins') for id,name in self.cursor.fetchall(): self.allBinIds[int(id)] = name self.allBinNames[name] = int(id) self.query('select sd_stat,sd_x,sd_y,sd_name,sd_descr from subdata') for result in self.cursor.fetchall(): subdata = SubData(result) if self.allSubData.has_key(subdata.stat): self.allSubData[subdata.stat].append(subdata) else: self.allSubData[subdata.stat] = [ subdata ] self.query('select * from formulas') for id,formula in self.cursor.fetchall(): self.allFormulas[int(id)] = formula.tostring() StatData.db = self self.query('select * from stats') import info for result in self.cursor.fetchall(): stat = info.NewStat(StatData(result)) self.append(stat) self.allStats.append(stat) self.allStatIds[stat.stat] = stat self.allStatNames[stat.name] = stat # Name: listbins # Desc: Prints all bins matching regex argument, if no argument # is given all bins are returned def listBins(self, regex='.*'): print '%-50s %-10s' % ('bin name', 'id') print '-' * 61 names = self.allBinNames.keys() names.sort() for name in names: id = self.allBinNames[name] print '%-50s %-10d' % (name, id) # Name: listruns # Desc: Prints all runs matching a given user, if no argument # is given all runs are returned def listRuns(self, user=None): print '%-40s %-10s %-5s' % ('run name', 'user', 'id') print '-' * 62 for run in self.allRuns: if user == None or user == run.user: print '%-40s %-10s %-10d' % (run.name, run.user, run.run) # Name: listTicks # Desc: Prints all samples for a given run
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?