File: verify.py

package info (click to toggle)
cccl 2.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 39,248 kB
  • sloc: cpp: 264,457; python: 6,421; sh: 2,762; perl: 460; makefile: 114; xml: 13
file content (59 lines) | stat: -rwxr-xr-x 2,270 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#!/usr/bin/env python3

import sys
import argparse
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()