| import log_reader | |
| import interactive_host | |
| import sys | |
| from typing import Sequence | |
| def evict_advice(tensor_values: Sequence[log_reader.TensorValue]): | |
| # this advisor just picks the first legal register to evict, which is | |
| # identifiable by the "mask" feature | |
| for tv in tensor_values: | |
| if tv.spec().name != "mask": | |
| continue | |
| for i, v in enumerate(tv): | |
| if v == 1: | |
| return i | |
| # i.e. invalid: | |
| return -1 | |
| def li_size(tensor_values: Sequence[log_reader.TensorValue]) -> float: | |
| for tv in tensor_values: | |
| if tv.spec().name == "li_size": | |
| return float(tv[0]) | |
| return 0.0 | |
| # A constant policy is indistinguishable from any other, because RAGreedy then | |
| # breaks all the resulting ties on the vreg number. | |
| def split_policy(large_advice: float): | |
| def advice(tvs): | |
| size = li_size(tvs) | |
| return large_advice if size > 100 else size | |
| return advice | |
| PRIORITY_POLICIES = { | |
| "low": split_policy(0.0), | |
| "high": split_policy(4.0e9), | |
| "negative": split_policy(-1.0), | |
| "huge": split_policy(1.0e30), | |
| } | |
| def main(args): | |
| if args[0].startswith("--priority="): | |
| name = args[0][len("--priority=") :] | |
| if name not in PRIORITY_POLICIES: | |
| sys.exit( | |
| f"unknown priority policy {name!r}, expected one of " | |
| f"{sorted(PRIORITY_POLICIES)}" | |
| ) | |
| advice = PRIORITY_POLICIES[name] | |
| args = args[1:] | |
| else: | |
| advice = evict_advice | |
| interactive_host.run_interactive(args[0], advice, args[1:]) | |
| if __name__ == "__main__": | |
| main(sys.argv[1:]) |