mirror of https://github.com/openXC7/prjxray.git
timfuz: misc cleanup
Signed-off-by: John McMaster <johndmcmaster@gmail.com>
This commit is contained in:
parent
43ccabe815
commit
d5c9f1d857
|
|
@ -58,10 +58,9 @@ def pds(Ads, s):
|
|||
|
||||
|
||||
def run(fns_in, sub_json=None, verbose=False):
|
||||
# arbitrary...data is thrown away
|
||||
corner = "slow_max"
|
||||
|
||||
Ads, b = loadc_Ads_b(fns_in, corner, ico=True)
|
||||
assert len(fn_ins) > 0
|
||||
# arbitrary corner...data is thrown away
|
||||
Ads, b = loadc_Ads_b(fns_in, "slow_max", ico=True)
|
||||
|
||||
if sub_json:
|
||||
print('Subbing JSON %u rows' % len(Ads))
|
||||
|
|
@ -112,7 +111,7 @@ def main():
|
|||
|
||||
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()
|
||||
|
|
|
|||
|
|
@ -50,11 +50,15 @@ def main():
|
|||
# Store options in dict to ease passing through functions
|
||||
bench = Benchmark()
|
||||
|
||||
fns_in = args.fns_in
|
||||
if not fns_in:
|
||||
fns_in = glob.glob('specimen_*/timing3.csv')
|
||||
|
||||
sub_json = load_sub(args.sub_json)
|
||||
|
||||
try:
|
||||
run(
|
||||
args.fns_in,
|
||||
fns_in,
|
||||
args.out,
|
||||
sub_json=sub_json,
|
||||
strict=args.strict,
|
||||
|
|
|
|||
|
|
@ -1,19 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linprog.html
|
||||
from scipy.optimize import linprog
|
||||
from timfuz import Benchmark, loadc_Ads_bs, load_sub, Ads2bounds, corners2csv, corner_s2i
|
||||
from timfuz_massage import massage_equations
|
||||
import numpy as np
|
||||
import glob
|
||||
import json
|
||||
import math
|
||||
from collections import OrderedDict
|
||||
from fractions import Fraction
|
||||
import sys
|
||||
import datetime
|
||||
import os
|
||||
import time
|
||||
|
||||
|
||||
def gen_flat(fnin, sub_json, corner=None):
|
||||
|
|
|
|||
|
|
@ -1,8 +1,4 @@
|
|||
#!/usr/bin/env python3
|
||||
'''
|
||||
Triaging tool to help understand where we need more timing coverage
|
||||
Finds correlated variables to help make better test cases
|
||||
'''
|
||||
|
||||
from timfuz import Benchmark, Ar_di2np, loadc_Ads_b, index_names, A_ds2np, simplify_rows
|
||||
import numpy as np
|
||||
|
|
@ -193,6 +189,7 @@ def state_rref(state, verbose=False):
|
|||
def run(fnout, fn_ins, simplify=False, corner=None, verbose=0):
|
||||
print('Loading data')
|
||||
|
||||
assert len(fn_ins) > 0
|
||||
state = State.load(fn_ins, simplify=simplify, corner=corner)
|
||||
state_rref(state, verbose=verbose)
|
||||
state.print_stats()
|
||||
|
|
@ -217,14 +214,18 @@ 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.csv 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,
|
||||
fn_ins=args.fns_in,
|
||||
fn_ins=fns_in,
|
||||
simplify=args.simplify,
|
||||
corner=args.corner,
|
||||
verbose=args.verbose)
|
||||
|
|
|
|||
|
|
@ -1,19 +1,14 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linprog.html
|
||||
from scipy.optimize import linprog
|
||||
from timfuz import Benchmark, load_sub, corner_s2i, acorner2csv
|
||||
import timfuz
|
||||
import numpy as np
|
||||
import glob
|
||||
import math
|
||||
from fractions import Fraction
|
||||
import sys
|
||||
import os
|
||||
import time
|
||||
import timfuz_solve
|
||||
import scipy.optimize as optimize
|
||||
from scipy.optimize import least_squares
|
||||
|
||||
|
||||
def mkestimate(Anp, b):
|
||||
|
|
@ -141,7 +136,7 @@ def run_corner(
|
|||
x0 = mkestimate(Anp, b)
|
||||
|
||||
print('Solving')
|
||||
res = least_squares(func, x0, bounds=(0, float('inf')))
|
||||
res = optimize.least_squares(func, x0, bounds=(0, float('inf')))
|
||||
print('Done')
|
||||
|
||||
if outfn:
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linprog.html
|
||||
from scipy.optimize import linprog
|
||||
import scipy.optimize as optimize
|
||||
from timfuz import Benchmark, load_sub, A_ub_np2d, acorner2csv, corner_s2i
|
||||
import numpy as np
|
||||
import glob
|
||||
|
|
@ -151,8 +150,9 @@ def run_corner(
|
|||
print('')
|
||||
# Now find smallest values for delay constants
|
||||
# Due to input bounds (ex: column limit), some delay elements may get eliminated entirely
|
||||
# https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linprog.html
|
||||
print('Running linprog w/ %d r, %d c (%d name)' % (rows, cols, len(names)))
|
||||
res = linprog(
|
||||
res = optimize.linprog(
|
||||
c,
|
||||
A_ub=A_ub,
|
||||
b_ub=b_ub,
|
||||
|
|
|
|||
|
|
@ -1,25 +1,7 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
from timfuz import Benchmark, Ar_di2np, loadc_Ads_b, index_names, A_ds2np, simplify_rows
|
||||
import numpy as np
|
||||
import glob
|
||||
import math
|
||||
from timfuz import Benchmark
|
||||
import json
|
||||
import sympy
|
||||
from collections import OrderedDict
|
||||
from fractions import Fraction
|
||||
|
||||
|
||||
def mlcm(xs):
|
||||
'''
|
||||
Find the LCM between elements in a group
|
||||
'''
|
||||
l = xs[0]
|
||||
for n in xs:
|
||||
for m in xs:
|
||||
lthis = lcm(n, m)
|
||||
l = int(max(lthis, l))
|
||||
return ret
|
||||
|
||||
|
||||
def write_state(state, fout):
|
||||
|
|
|
|||
|
|
@ -339,6 +339,16 @@ def massage_equations(Ads, b, verbose=False, corner=None):
|
|||
Subtract equations from each other to generate additional constraints
|
||||
Helps provide additional guidance to solver for realistic delays
|
||||
|
||||
Ex: given:
|
||||
a >= 10
|
||||
a + b >= 100
|
||||
A valid solution is:
|
||||
a = 100
|
||||
However, a better solution is something like
|
||||
a = 10
|
||||
b = 90
|
||||
This creates derived constraints to provide more realistic results
|
||||
|
||||
Equation pipeline
|
||||
Some operations may generate new equations
|
||||
Simplify after these to avoid unnecessary overhead on redundant constraints
|
||||
|
|
|
|||
|
|
@ -1,19 +1,9 @@
|
|||
#!/usr/bin/env python3
|
||||
|
||||
# https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.optimize.linprog.html
|
||||
from scipy.optimize import linprog
|
||||
from timfuz import Benchmark, simplify_rows, loadc_Ads_b, index_names, A_ds2np, run_sub_json, print_eqns, Ads2bounds, instances, SimplifiedToZero, allow_zero_eqns
|
||||
from timfuz import simplify_rows, loadc_Ads_b, index_names, A_ds2np, run_sub_json, print_eqns, Ads2bounds, instances, SimplifiedToZero, allow_zero_eqns
|
||||
from timfuz_massage import massage_equations
|
||||
import numpy as np
|
||||
import glob
|
||||
import json
|
||||
import math
|
||||
from collections import OrderedDict
|
||||
from fractions import Fraction
|
||||
import sys
|
||||
import datetime
|
||||
import os
|
||||
import time
|
||||
|
||||
|
||||
def check_feasible(A_ub, b_ub):
|
||||
|
|
@ -162,18 +152,6 @@ def run(
|
|||
|
||||
#print
|
||||
#col_dist(A_ubd, 'final', names)
|
||||
print('b10', b[0:100])
|
||||
'''
|
||||
Given:
|
||||
a >= 10
|
||||
a + b >= 100
|
||||
A valid solution is:
|
||||
a = 100
|
||||
However, a better solution is something like
|
||||
a = 10
|
||||
b = 90
|
||||
This creates derived constraints to provide more realistic results
|
||||
'''
|
||||
if massage:
|
||||
try:
|
||||
Ads, b = massage_equations(Ads, b, corner=corner)
|
||||
|
|
|
|||
|
|
@ -12,12 +12,11 @@ from collections import OrderedDict
|
|||
# Speed index: some sort of special value
|
||||
SI_NONE = 0xFFFF
|
||||
|
||||
# prefix to make easier to track
|
||||
# models do not overlap between PIPs and WIREs
|
||||
PREFIX_W = 'WIRE_'
|
||||
PREFIX_P = 'PIP_'
|
||||
|
||||
#PREFIX_W = ''
|
||||
#PREFIX_P = ''
|
||||
|
||||
|
||||
def parse_pip(s):
|
||||
# Entries like
|
||||
|
|
|
|||
Loading…
Reference in New Issue