find_best.py 1.72 KB
Newer Older
wangkx1's avatar
init  
wangkx1 committed
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
60
61
import json
import argparse
class LineParser:
    def __init__(self) -> None:
        self.data = {}

    def parse(self, line):
        def startswith(line, lst):
            for ele in lst:
                if line.startswith(ele):
                    return True
            return False

        if not startswith(line, ['1', '2', '3', '4', '5', '6', '7', '8', '9']):
            return

        eles = line.strip().split()
        key = eles[0]
        if key not in self.data:
            self.data[key] = []
        
        self.data[key].append([eles[1], float(eles[2])])
    
    def sort(self):
        for k, v in self.data.items():
            nv = sorted(v, key=lambda x: x[1])
            self.data[k] = nv
    
    def display_best(self):
        for k, v in self.data.items():
            print(f'{k} \t {v[0][0]} \t {v[0][1]:.4f} \t {v[1][0]} \t {v[1][1]:.4f}')
    
    def display_best_python(self, output):
        res = {}
        def parse(spec):
            d_stride = int(spec.split('/')[0])
            thread = int(spec.split('/')[1].split('(')[0])
            m = int(spec.split('(')[1].split(')')[0])
            return d_stride, thread, m

        for k, v in self.data.items():
            res[k] = parse(v[0][0])

        with open(output, "w") as f:
            json.dump(res, f, indent=4)

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('--input', type=str)
    parser.add_argument('--output', type=str)
    args = parser.parse_args()

    with open(args.input) as f:
        lines = f.readlines()

    lineparser = LineParser()
    for line in lines:
        lineparser.parse(line)
    lineparser.sort()
    lineparser.display_best()
    lineparser.display_best_python(args.output)