diff --git a/predtuner/pipedbin.py b/predtuner/pipedbin.py index bfa277cd00b70deb5e622792e952e880c911da8d..81581b6473c4a2bf05a8445122d71cb79e048c9f 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 (