convert.py
来自「M5,一个功能强大的多处理器系统模拟器.很多针对处理器架构,性能的研究都使用它作」· Python 代码 · 共 251 行
PY
251 行
# Copyright (c) 2005# The Regents of The University of Michigan# All Rights Reserved## This code is part of the M5 simulator.## 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.## Authors: Nathan L. Binkert# metric prefixesexa = 1.0e18peta = 1.0e15tera = 1.0e12giga = 1.0e9mega = 1.0e6kilo = 1.0e3milli = 1.0e-3micro = 1.0e-6nano = 1.0e-9pico = 1.0e-12femto = 1.0e-15atto = 1.0e-18# power of 2 prefixeskibi = 1024mebi = kibi * 1024gibi = mebi * 1024tebi = gibi * 1024pebi = tebi * 1024exbi = pebi * 1024# memory size configuration stuffdef toFloat(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) if value.endswith('Ei'): return float(value[:-2]) * exbi elif value.endswith('Pi'): return float(value[:-2]) * pebi elif value.endswith('Ti'): return float(value[:-2]) * tebi elif value.endswith('Gi'): return float(value[:-2]) * gibi elif value.endswith('Mi'): return float(value[:-2]) * mebi elif value.endswith('ki'): return float(value[:-2]) * kibi elif value.endswith('E'): return float(value[:-1]) * exa elif value.endswith('P'): return float(value[:-1]) * peta elif value.endswith('T'): return float(value[:-1]) * tera elif value.endswith('G'): return float(value[:-1]) * giga elif value.endswith('M'): return float(value[:-1]) * mega elif value.endswith('k'): return float(value[:-1]) * kilo elif value.endswith('m'): return float(value[:-1]) * milli elif value.endswith('u'): return float(value[:-1]) * micro elif value.endswith('n'): return float(value[:-1]) * nano elif value.endswith('p'): return float(value[:-1]) * pico elif value.endswith('f'): return float(value[:-1]) * femto else: return float(value)def toInteger(value): value = toFloat(value) result = long(value) if value != result: raise ValueError, "cannot convert '%s' to integer" % value return result_bool_dict = { 'true' : True, 't' : True, 'yes' : True, 'y' : True, '1' : True, 'false' : False, 'f' : False, 'no' : False, 'n' : False, '0' : False }def toBool(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) value = value.lower() result = _bool_dict.get(value, None) if result == None: raise ValueError, "cannot convert '%s' to bool" % value return resultdef toFrequency(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) if value.endswith('THz'): return float(value[:-3]) * tera elif value.endswith('GHz'): return float(value[:-3]) * giga elif value.endswith('MHz'): return float(value[:-3]) * mega elif value.endswith('kHz'): return float(value[:-3]) * kilo elif value.endswith('Hz'): return float(value[:-2]) raise ValueError, "cannot convert '%s' to frequency" % valuedef toLatency(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) if value.endswith('ps'): return float(value[:-2]) * pico elif value.endswith('ns'): return float(value[:-2]) * nano elif value.endswith('us'): return float(value[:-2]) * micro elif value.endswith('ms'): return float(value[:-2]) * milli elif value.endswith('s'): return float(value[:-1]) raise ValueError, "cannot convert '%s' to latency" % valuedef anyToLatency(value): """result is a clock period""" if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) try: val = toFrequency(value) if val != 0: val = 1 / val return val except ValueError: pass try: val = toLatency(value) return val except ValueError: pass raise ValueError, "cannot convert '%s' to clock period" % valuedef anyToFrequency(value): """result is a clock period""" if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) try: val = toFrequency(value) return val except ValueError: pass try: val = toLatency(value) if val != 0: val = 1 / val return val except ValueError: pass raise ValueError, "cannot convert '%s' to clock period" % valuedef toNetworkBandwidth(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) if value.endswith('Tbps'): return float(value[:-4]) * tera elif value.endswith('Gbps'): return float(value[:-4]) * giga elif value.endswith('Mbps'): return float(value[:-4]) * mega elif value.endswith('kbps'): return float(value[:-4]) * kilo elif value.endswith('bps'): return float(value[:-3]) else: return float(value) raise ValueError, "cannot convert '%s' to network bandwidth" % valuedef toMemoryBandwidth(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) if value.endswith('PB/s'): return float(value[:-4]) * pebi elif value.endswith('TB/s'): return float(value[:-4]) * tebi elif value.endswith('GB/s'): return float(value[:-4]) * gibi elif value.endswith('MB/s'): return float(value[:-4]) * mebi elif value.endswith('kB/s'): return float(value[:-4]) * kibi elif value.endswith('B/s'): return float(value[:-3]) raise ValueError, "cannot convert '%s' to memory bandwidth" % valuedef toMemorySize(value): if not isinstance(value, str): raise TypeError, "wrong type '%s' should be str" % type(value) if value.endswith('PB'): return long(value[:-2]) * pebi elif value.endswith('TB'): return long(value[:-2]) * tebi elif value.endswith('GB'): return long(value[:-2]) * gibi elif value.endswith('MB'): return long(value[:-2]) * mebi elif value.endswith('kB'): return long(value[:-2]) * kibi elif value.endswith('B'): return long(value[:-1]) raise ValueError, "cannot convert '%s' to memory size" % value
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?