source: icGREP/icgrep-devel/performance/viewer.py @ 4915

Last change on this file since 4915 was 4151, checked in by linmengl, 5 years ago

experimental support for BLOCK_SIZE 256 ready to test

File size: 2.7 KB
Line 
1######################
2#Viewer for *-perf.json files
3######################
4
5import argparse
6import json
7import numpy as np
8import matplotlib.pyplot as plt
9import os
10import os.path
11
12
13stat_set = set()
14def prepare_data(perf1, perf2):
15    #key: 'cycles:u', 'instructions:u'
16    #value: perf data
17    y1 = {}
18    y2 = {}
19
20    # program, file, expression, stat
21    p1 = perf1.keys()[0]
22    p2 = perf2.keys()[0]
23
24    for f in perf1[p1]:
25        for e in perf1[p1][f]:
26            for s in perf1[p1][f][e]:
27                if s not in y1:
28                    y1[s] = []
29                if s not in y2:
30                    y2[s] = []
31
32                stat_set.add(s)
33                y1[s].append(perf1[p1][f][e][s])
34                y2[s].append(perf2[p2][f][e][s])
35
36    return y1, y2
37
38if __name__ == "__main__":
39    #Parse args
40    parser = argparse.ArgumentParser()
41    parser.add_argument("-t", "--text", help="generate text-based view", action="store_true")
42    parser.add_argument("-l", "--latex", help="generate latex table of the view", action="store_true")
43    args = parser.parse_args()
44
45    file_list = [f for f in os.listdir('.') if os.path.isfile(f) and "-perf.json" in f]
46    print "Found the following perf data:"
47    for f in enumerate(file_list):
48        print "{0} ... {1}".format(f[0], f[1])
49    f1 = input("Choose the 1st file:")
50    f2 = input("Choose the 2nd file:")
51
52    perf1 = json.load(fp = open(file_list[f1], 'r'))
53    perf2 = json.load(fp = open(file_list[f2], 'r'))
54
55    y1,y2 = prepare_data(perf1, perf2)
56
57    if len(y1) != len(y2):
58        print "Error: number of data doesn't match"
59        exit(0)
60
61    stat_set = list(stat_set)
62    print "Found the following stats available:"
63    for f in enumerate(stat_set):
64        print "{0} ... {1}".format(f[0], f[1])
65
66    while True:
67        s1 = input("Choose the stat (any illegal number to quit):")
68        if s1 < 0 or s1 >= len(stat_set):
69            exit(0)
70
71        stat = stat_set[s1]
72
73        if not args.text and not args.latex:
74            ind = np.arange(len(y1[stat]))
75
76            width = (2 - 0.4 * 2) / 2.0
77
78            p1 = plt.bar(ind * 2, y1[stat], width=width, color='y')
79            p2 = plt.bar(ind * 2 + width, y2[stat], width=width, color='r')
80            plt.ylabel(stat)
81            plt.legend((p1[0], p2[0]), (file_list[f1], file_list[f2]))
82
83            plt.show()
84
85        if args.text:
86            row_format = "{:>20}" * 3
87            print row_format.format("y1", "y2", "y2 : y1")
88            print "-" * 20 * 3
89            for i in xrange(0, len(y1[stat])):
90                print row_format.format(y1[stat][i], y2[stat][i],
91                                        y2[stat][i] * 1.0 / y1[stat][i])
92            print "-" * 20 * 3
93            print 'y1 = ' + file_list[f1]
94            print 'y2 = ' + file_list[f2]
95
Note: See TracBrowser for help on using the repository browser.