Merge branch 'upstream' into dfsg-orig
[debian/gnuradio] / gcell / apps / plot_speedup.py
1 #!/usr/bin/env python
2
3 from optparse import OptionParser
4 from pylab import *
5 from pprint import pprint
6 import os.path
7
8
9 def add_entry(d, nspes, speedup, work_incr):
10     if d.has_key(work_incr):
11         d[work_incr].append((nspes, speedup))
12     else:
13         d[work_incr] = [(nspes, speedup)]
14     
15 def parse_file(f):
16     d = {}
17     for line in f:
18         items = [float(x) for x in line.split()]
19         # print "items =", items
20         nspes = items[0]
21         work_incr = int(1e6 * items[1])
22         speedup = items[4]
23         add_entry(d, nspes, speedup, work_incr)
24     return d
25
26
27 class plot_data(object):
28     def __init__(self, filenames, output_filename):
29         self.fig = figure(1, figsize=(8, 6), facecolor='w')
30         self.sp = self.fig.add_subplot(1,1,1)
31         self.sp.set_xlabel("nspes", fontweight="bold")
32         self.sp.set_ylabel("speedup", fontweight="bold")
33         self.sp.grid(True)
34         # print 'rcParams["legend.fontsize"] =', rcParams["legend.fontsize"]
35         rcParams["legend.fontsize"] = 10
36
37
38         self.markers = {
39               5 : 'x',
40              10 : 'o',
41              50 : 's',
42             100 : '^',
43             200 : 'D',
44             300 : 'v',
45             400 : '>',
46             500 : 'h'
47             }
48         
49         if len(filenames) == 1:
50             f = filenames[0]
51             d = parse_file(open(f))
52             self.make_single_plot(d, f)
53             
54         else:
55             for f in filenames:
56                 d = parse_file(open(f))
57                 self.make_plot(d, f, f == filenames[0])
58
59         if output_filename:
60             savefig(output_filename)
61         else:
62             show()
63
64
65     def make_single_plot(self, d, filename):
66         def style(k):
67             return self.markers[k]
68
69         tag, ext = os.path.splitext(os.path.basename(filename))
70         title(tag)
71         keys = d.keys()
72         keys.sort()
73         keys.reverse()
74         for k in keys:
75             vlist = d[k]         # list of 2-tuples
76             xs = [v[0] for v in vlist]
77             ys = [v[1] for v in vlist]
78             plot(xs, ys, style(k), label="%d us" % (k,))
79
80         x = legend(loc=2)
81
82     def make_plot(self, d, filename, first):
83         def style(k):
84             if first:
85                 return self.markers[k]
86             else:
87                 return 'k' + self.markers[k]
88
89         tag, ext = os.path.splitext(os.path.basename(filename))
90         keys = d.keys()
91         keys.sort()
92         keys.reverse()
93         for k in keys:
94             vlist = d[k]         # list of 2-tuples
95             xs = [v[0] for v in vlist]
96             ys = [v[1] for v in vlist]
97             plot(xs, ys, style(k), label="%s %d us" % (tag, k))
98
99         x = legend(loc=2)
100
101 def main():
102     usage="%prog: [options] input_filename..."
103     description = "Plot R*.avg files from benchmark_nop.py"
104     parser = OptionParser(usage=usage, description=description)
105     parser.add_option('-o', '--output', default=None,  metavar="FILE",
106                       help="generate .png file")
107     (options, args) = parser.parse_args()
108     if len(args) < 1:
109         parser.print_help()
110         raise SystemExit, 1
111
112     filenames = args
113     dc = plot_data(filenames, options.output)
114
115
116         
117 if __name__ == '__main__':
118     try:
119         main()
120     except KeyboardInterrupt:
121         pass
122