From 8b2c96c41066ccf7dba2e040c40649afef968dea Mon Sep 17 00:00:00 2001 From: Yifan Zhao <yifanz16@illinois.edu> Date: Tue, 6 Apr 2021 23:43:27 -0500 Subject: [PATCH] Changing metadata protocol --- predtuner/pipedbin.py | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/predtuner/pipedbin.py b/predtuner/pipedbin.py index bfa277c..81581b6 100644 --- a/predtuner/pipedbin.py +++ b/predtuner/pipedbin.py @@ -165,37 +165,31 @@ class PipedBinaryApp(ModeledApp): metadata = json.load(f) op_costs = metadata["op_cost"] op_knobs = metadata["op_knobs"] - knob_speedup = metadata["knob_speedup"] - knob_devices = metadata["knob_devices"] - baseline_knob = metadata["baseline_knob"] + knobs = metadata["knobs"] # Check sanity if set(op_costs.keys()) != set(op_knobs.keys()): raise ValueError( "Operators listed in layer_cost and knobs_of_layer mismatch" ) - if set(knob_speedup.keys()) != set(knob_devices.keys()): - raise ValueError( - "Knobs listed in knob_speedup and knob_devices mismatch" - ) knobs_used = set().union(*[set(knobs) for knobs in op_knobs.values()]) - knobs_defined = set(knob_speedup.keys()) + knobs_defined = set(knobs.keys()) undefined = knobs_used - knobs_defined if undefined: raise ValueError( f"These knobs used in knobs_of_layer are undefined: {undefined}" ) - if baseline_knob not in knobs_defined: - raise ValueError(f"baseline_knob {baseline_knob} is undefined") # Create actual knob object from knob names - name2knob = { - s: ApproxKnob(s, knob_devices[s], (0 if s == baseline_knob else None)) - for s in knobs_used - } - op_knobs = {op: [name2knob[k] for k in knobs] for op, knobs in op_knobs.items()} + knob_objs = {} + knob_speedup = {} + for knob_name, knob_args in knobs.items(): + knob_speedup[knob_name] = knob_args.pop("speedup") + knob_objs[knob_name] = ApproxKnob(knob_name, **knob_args) + op_knobs = {op: [knob_objs[k] for k in knobs] for op, knobs in op_knobs.items()} + # Process other fields in metadata tune_labels_file = Path(metadata["tune_labels_path"]) tune_labels = torch.from_numpy(np.fromfile(tune_labels_file, dtype=np.int32)) conf_file = Path(metadata["conf_path"]) - # Our "w" file is the binary's "r" file, vice versa + # -- Our "w" file is the binary's "r" file, vice versa fifo_r_file = Path(metadata["fifo_path_w"]) fifo_w_file = Path(metadata["fifo_path_r"]) return ( -- GitLab