timfuz: cleanup help

Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
John McMaster 2018-09-17 14:23:00 -07:00
parent 3b686de46f
commit bf5b435a69
12 changed files with 55 additions and 62 deletions

View File

@ -119,7 +119,7 @@ def run(
def main():
import argparse
parser = argparse.ArgumentParser(description='Timing fuzzer')
parser = argparse.ArgumentParser(description='Matrix solving performance tests')
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--sparse', action='store_true', help='')

View File

@ -108,11 +108,11 @@ def main():
import argparse
parser = argparse.ArgumentParser(
description='Check sub.json solution feasibility')
description='Check if sub.json would make a linear equation solvable')
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--sub-json', help='')
parser.add_argument('fns_in', nargs='*', help='timing3.csv input files')
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
args = parser.parse_args()
# Store options in dict to ease passing through functions
bench = Benchmark()

View File

@ -31,7 +31,7 @@ def main():
'--auto-name', action='store_true', help='timing3.csv => timing3c.csv')
parser.add_argument('--out', default=None, help='Output csv')
parser.add_argument('--corner', help='Output csv')
parser.add_argument('fns_in', nargs='*', help='timing3.csv input files')
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
args = parser.parse_args()
bench = Benchmark()

View File

@ -34,7 +34,8 @@ def run(fns_in, fnout, sub_json, strict=False, verbose=False):
def main():
import argparse
parser = argparse.ArgumentParser(description='Solve timing solution')
parser = argparse.ArgumentParser(
description='Substitute .csv to group correlated symbols')
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--strict', action='store_true', help='')
@ -44,7 +45,7 @@ def main():
required=True,
help='Group substitutions to make fully ranked')
parser.add_argument('--out', help='Output sub.json substitution result')
parser.add_argument('fns_in', nargs='*', help='timing3.txt input files')
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
args = parser.parse_args()
# Store options in dict to ease passing through functions
bench = Benchmark()

View File

@ -52,37 +52,44 @@ def gen_flat(fnin, sub_json, corner=None):
yield zero, zero_row
def run(fnin, fnout, sub_json, corner=None, sort=False, verbose=False):
def run(fns_in, fnout, sub_json, corner=None, sort=False, verbose=False):
'''
if sort:
sortf = sorted
else:
sortf = lambda x: x
'''
with open(fnout, 'w') as fout:
fout.write('ico,fast_max fast_min slow_max slow_min,rows...\n')
#for name, corners in sortf(gen_flat(fnin, sub_json)):
for name, corners in gen_flat(fnin, sub_json, corner=corner):
row_ico = 1
items = [str(row_ico), corners2csv(corners)]
items.append('%u %s' % (1, name))
fout.write(','.join(items) + '\n')
for fnin in fns_in:
#for name, corners in sortf(gen_flat(fnin, sub_json)):
for name, corners in gen_flat(fnin, sub_json, corner=corner):
row_ico = 1
items = [str(row_ico), corners2csv(corners)]
items.append('%u %s' % (1, name))
fout.write(','.join(items) + '\n')
def main():
import argparse
parser = argparse.ArgumentParser(description='Solve timing solution')
parser = argparse.ArgumentParser(
description='Substitute .csv to ungroup correlated symbols')
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--sort', action='store_true', help='')
#parser.add_argument('--sort', action='store_true', help='')
parser.add_argument('--sub-csv', help='')
parser.add_argument(
'--sub-json',
required=True,
help='Group substitutions to make fully ranked')
parser.add_argument('--corner', default=None, help='')
parser.add_argument('fnin', default=None, help='input timing delay .csv')
parser.add_argument('fnout', default=None, help='output timing delay .csv')
parser.add_argument('--out', default=None, help='output timing delay .csv')
parser.add_argument(
'fns_in',
default=None,
help='input timing delay .csv (NOTE: must be single column)')
args = parser.parse_args()
# Store options in dict to ease passing through functions
bench = Benchmark()
@ -91,10 +98,10 @@ def main():
try:
run(
args.fnin,
args.fnout,
args.fns_in,
args.out,
sub_json=sub_json,
sort=args.sort,
#sort=args.sort,
verbose=args.verbose,
corner=args.corner)
finally:

View File

@ -37,7 +37,7 @@ build/$(CORNER)/linprog.csv: build/$(CORNER)/leastsq.csv build/grouped.csv
build/$(CORNER)/flat.csv: build/$(CORNER)/linprog.csv
# Take separated variables and back-annotate them to the original timing variables
python3 $(TIMFUZ_DIR)/csv_group2flat.py --sub-json build/sub.json --corner $(CORNER) --sort build/$(CORNER)/linprog.csv build/$(CORNER)/flat.csv.tmp
python3 $(TIMFUZ_DIR)/csv_group2flat.py --sub-json build/sub.json --corner $(CORNER) --sort --out build/$(CORNER)/flat.csv.tmp build/$(CORNER)/linprog.csv
mv build/$(CORNER)/flat.csv.tmp build/$(CORNER)/flat.csv
build/$(CORNER)/tilea.json: build/$(CORNER)/flat.csv

View File

@ -14,28 +14,12 @@ from collections import OrderedDict
from fractions import Fraction
def fracr(r):
DELTA = 0.0001
for i, x in enumerate(r):
if type(x) is float:
xi = int(x)
assert abs(xi - x) < DELTA
r[i] = xi
return [Fraction(x) for x in r]
def fracm(m):
return [fracr(r) for r in m]
def fracr_quick(r):
return [Fraction(numerator=int(x), denominator=1) for x in r]
# the way I'm doing thing they should all be even integers
# hmm this was only slightly faster
def fracm_quick(m):
'''Convert integer matrix to Fraction matrix'''
t = type(m[0][0])
print('fracm_quick type: %s' % t)
return [fracr_quick(r) for r in m]
@ -149,7 +133,6 @@ def state_rref(state, verbose=False):
#msym = sympy.MutableSparseMatrix(mfrac)
msym = sympy.Matrix(mfrac)
# internal encoding has significnat performance implications
#print(type(msym[3]))
#assert type(msym[0]) is sympy.Integer
if verbose:
@ -221,7 +204,10 @@ def run(fnout, fn_ins, simplify=False, corner=None, verbose=0):
def main():
import argparse
parser = argparse.ArgumentParser(description='Timing fuzzer')
parser = argparse.ArgumentParser(
description=
'Compute reduced row echelon (RREF) to form sub.json (variable groups)'
)
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--simplify', action='store_true', help='')
@ -231,14 +217,10 @@ def main():
default='build_speed/speed.json',
help='Provides speed index to name translation')
parser.add_argument('--out', help='Output sub.json substitution result')
parser.add_argument('fns_in', nargs='+', help='timing3.txt input files')
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
args = parser.parse_args()
bench = Benchmark()
fns_in = args.fns_in
if not fns_in:
fns_in = glob.glob('specimen_*/timing3.csv')
try:
run(
fnout=args.out,

View File

@ -156,13 +156,16 @@ def main():
'Solve timing solution using least squares objective function')
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--massage', action='store_true', help='')
parser.add_argument(
'--massage',
action='store_true',
help='Derive additional constraints to improve solution')
parser.add_argument(
'--sub-json', help='Group substitutions to make fully ranked')
parser.add_argument('--corner', default="slow_max", help='')
parser.add_argument('--corner', required=True, default="slow_max", help='')
parser.add_argument(
'--out', default=None, help='output timing delay .json')
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
parser.add_argument('fns_in', nargs='+', 'timing3.csv input files')
args = parser.parse_args()
# Store options in dict to ease passing through functions
bench = Benchmark()

View File

@ -195,10 +195,10 @@ def main():
parser.add_argument('--sub-csv', help='')
parser.add_argument(
'--sub-json', help='Group substitutions to make fully ranked')
parser.add_argument('--corner', default=None, required=True, help='')
parser.add_argument('--corner', required=True, default="slow_max", help='')
parser.add_argument(
'--out', default=None, help='output timing delay .json')
parser.add_argument('fns_in', nargs='*', help='timing3.csv input files')
parser.add_argument('fns_in', nargs='+', help='timing3.csv input files')
args = parser.parse_args()
# Store options in dict to ease passing through functions
bench = Benchmark()
@ -216,7 +216,7 @@ def main():
run_corner=run_corner,
sub_json=sub_json,
sub_csv=args.sub_csv,
fns_in=fns_in,
fn_in=fn_in,
corner=args.corner,
massage=args.massage,
outfn=args.out,

View File

@ -91,7 +91,7 @@ def main():
parser.add_argument('--verbose', action='store_true', help='')
parser.add_argument('--out', help='Output csv')
parser.add_argument('fns_in', nargs='*', help='sub.json input files')
parser.add_argument('fns_in', nargs='+', help='sub.json input files')
args = parser.parse_args()
bench = Benchmark()

View File

@ -9,16 +9,10 @@ import time
import json
# corner wokraround
def quad(x):
return [x for _ in range(4)]
def run(fnin, fnout, tile_json_fn, verbose=False):
# modified in place
tilej = json.load(open(tile_json_fn, 'r'))
# FIXME: all corners
Ads, bs = loadc_Ads_bs([fnin], ico=True)
bounds = Ads2bounds(Ads, bs)
@ -71,9 +65,12 @@ def run(fnin, fnout, tile_json_fn, verbose=False):
def main():
import argparse
parser = argparse.ArgumentParser(description='')
parser = argparse.ArgumentParser(
description=
'Substitute timgrid timing model names for real timing values')
parser.add_argument('--tile-json', default='tiles.json', help='')
parser.add_argument('fnin', default=None, help='Flattened timing csv')
parser.add_argument(
'fnin', default=None, help='Input flattened timing csv (flat.json)')
parser.add_argument('fnout', default=None, help='output tile .json')
args = parser.parse_args()

View File

@ -255,14 +255,15 @@ def main():
)
parser.add_argument('--verbose', type=int, help='')
# made a bulk conversion easier...keep?
parser.add_argument(
'--auto-name', action='store_true', help='timing3.txt => timing3.csv')
parser.add_argument(
'--speed-json',
default='build_speed/speed.json',
help='Provides speed index to name translation')
parser.add_argument('--out', default=None, help='Output csv')
parser.add_argument('fns_in', nargs='*', help='timing3.txt input files')
parser.add_argument('--out', default=None, help='Output timing3.csv file')
parser.add_argument('fns_in', nargs='+', help='Input timing3.txt files')
args = parser.parse_args()
bench = Benchmark()
@ -274,6 +275,8 @@ def main():
fnout = fnin.replace('.txt', '.csv')
assert fnout != fnin, 'Expect .txt in'
else:
# practically there are too many stray prints to make this work as expected
assert 0, 'File name required'
fnout = '/dev/stdout'
print("Writing to %s" % fnout)
fout = open(fnout, 'w')