73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
|
#!/usr/bin/env python3
|
||
|
|
|
||
|
|
import argparse
|
||
|
|
import sys
|
||
|
|
|
||
|
|
import cccl.bench
|
||
|
|
|
||
|
|
|
||
|
|
def parse_arguments():
|
||
|
|
parser = argparse.ArgumentParser(description="Verify tuning variant")
|
||
|
|
parser.add_argument(
|
||
|
|
"--variant", type=str, help="Variant to verify", default=None, required=True
|
||
|
|
)
|
||
|
|
|
||
|
|
variant = parser.parse_known_args()[0].variant
|
||
|
|
sys.argv.remove("--variant={}".format(variant))
|
||
|
|
|
||
|
|
return variant
|
||
|
|
|
||
|
|
|
||
|
|
def workload_header(ct_workload_space, rt_workload_space):
|
||
|
|
for ct_workload in ct_workload_space:
|
||
|
|
for rt_workload in rt_workload_space:
|
||
|
|
workload_point = ct_workload + rt_workload
|
||
|
|
return ", ".join([x.split("=")[0] for x in workload_point])
|
||
|
|
|
||
|
|
|
||
|
|
def workload_entry(ct_workload, rt_workload):
|
||
|
|
workload_point = ct_workload + rt_workload
|
||
|
|
return ", ".join([x.split("=")[1] for x in workload_point])
|
||
|
|
|
||
|
|
|
||
|
|
class VerifySeeker:
|
||
|
|
def __init__(self, variant_label):
|
||
|
|
self.label = variant_label
|
||
|
|
self.estimator = cccl.bench.MedianCenterEstimator()
|
||
|
|
|
||
|
|
def __call__(self, algname, ct_workload_space, rt_workload_space):
|
||
|
|
variant_point = cccl.bench.Config().label_to_variant_point(algname, self.label)
|
||
|
|
|
||
|
|
print(
|
||
|
|
"{}, MinS, MedianS, MaxS".format(
|
||
|
|
workload_header(ct_workload_space, rt_workload_space)
|
||
|
|
)
|
||
|
|
)
|
||
|
|
for ct_workload in ct_workload_space:
|
||
|
|
bench = cccl.bench.Bench(algname, variant_point, list(ct_workload))
|
||
|
|
if bench.build():
|
||
|
|
base = bench.get_base()
|
||
|
|
for rt_workload in rt_workload_space:
|
||
|
|
workload_point = ct_workload + rt_workload
|
||
|
|
base_samples, base_elapsed = base.do_run(workload_point, None)
|
||
|
|
variant_samples, _ = bench.do_run(workload_point, base_elapsed * 10)
|
||
|
|
min_speedup = min(base_samples) / min(variant_samples)
|
||
|
|
median_speedup = self.estimator(base_samples) / self.estimator(
|
||
|
|
variant_samples
|
||
|
|
)
|
||
|
|
max_speedup = max(base_samples) / max(variant_samples)
|
||
|
|
point_str = workload_entry(ct_workload, rt_workload)
|
||
|
|
print(
|
||
|
|
"{}, {}, {}, {}".format(
|
||
|
|
point_str, min_speedup, median_speedup, max_speedup
|
||
|
|
)
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
def main():
|
||
|
|
cccl.bench.search(VerifySeeker(parse_arguments()))
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
main()
|