source: icGREP/icgrep-devel/performance/datgenavx.py @ 5808

Last change on this file since 5808 was 4126, checked in by linmengl, 5 years ago

initial checkin of performance script; based on Ben's script, will do correctness check first and record performance data in json format. A python script will be developed to visualize performance difference.

File size: 6.1 KB
Line 
1from subprocess import call, Popen
2from collections import *
3import csv
4import StringIO
5import os.path
6import sys
7import shutil
8
9InputRow = namedtuple('InputRow', ['file','expression','program','stat','value','value2','value3','value4'])
10
11incsv = []
12try:
13        for row in map(InputRow._make, csv.reader(open("avxoutput.csv", "rb"))):
14                incsv.append(row)
15except TypeError:
16        readFile = open("avxoutput.csv")
17        lines = readFile.readlines()
18        readFile.close()
19        w = open("avxoutput.csv",'w')
20        w.writelines([item for item in lines[:-1]])
21        w.close()
22        for row in map(InputRow._make, csv.reader(open("avxoutput.csv", "rb"))):
23                incsv.append(row)
24
25
26Datfile = namedtuple('Datfile', ['file','program1','program2','stat1','stat2','perbyte','rows'])
27Datrow = namedtuple('Datrow', ['number','fileexpressions'])
28FileExpression=namedtuple('FileExpression', ['file','expression','filesize'])
29
30charts = []
31file1='howto'
32exp1='at'
33size1=39422105
34file2='howto'
35exp2='Date'
36size2=39422105
37file3='howto'
38exp3='Email'
39size3=39422105
40file4='howto'
41exp4='URIorEmail'
42size4=39422105
43file5='roads'
44exp5='xquote'
45size5=11861751
46
47cpms=3200000
48
49chart1=[]
50chart1.append(Datfile('../../../docs/Working/re/data/avxcycles1.dat','bitstreams','bitstreams_avx2','cycles:u','cycles:u',True,(Datrow('0',(FileExpression(file1,exp1,size1),)),Datrow('1',(FileExpression(file2,exp2,size2),)),Datrow('2',(FileExpression(file3,exp3,size3),)),Datrow('3',(FileExpression(file4,exp4,size4),)),Datrow('4',(FileExpression(file5,exp5,size5),)),)))
51charts.append(chart1)
52
53chart2=[]
54chart2.append(Datfile('../../../docs/Working/re/data/avxinstructions1.dat','bitstreams','bitstreams_avx2','instructions:u','instructions:u',True,(Datrow('0',(FileExpression(file1,exp1,size1),)),Datrow('1',(FileExpression(file2,exp2,size2),)),Datrow('2',(FileExpression(file3,exp3,size3),)),Datrow('3',(FileExpression(file4,exp4,size4),)),Datrow('4',(FileExpression(file5,exp5,size5),)),)))
55charts.append(chart2)
56
57chart3=[]
58chart3.append(Datfile('../../../docs/Working/re/data/avxipc1.dat','bitstreams','bitstreams_avx2','instructions:u','cycles:u',True,(Datrow('0',(FileExpression(file1,exp1,size1),)),Datrow('1',(FileExpression(file2,exp2,size2),)),Datrow('2',(FileExpression(file3,exp3,size3),)),Datrow('3',(FileExpression(file4,exp4,size4),)),Datrow('4',(FileExpression(file5,exp5,size5),)),)))
59charts.append(chart3)
60
61#chart4=[]
62#chart4.append(Datfile('../../../docs/Working/re/data/avxbranch-misses.dat','bitstreams_avx2','bitstreams_avx2','branch-misses:u','',True,(Datrow('0',(FileExpression(file1,exp1,size1),)),Datrow('1',(FileExpression(file2,exp2,size2),)),Datrow('2',(FileExpression(file3,exp3,size3),)),Datrow('3',(FileExpression(file4,exp4,size4),)),Datrow('4',(FileExpression(file5,exp5,size5),)),)))
63#chart4.append(Datfile('../../../docs/Working/re/data/ssebranch-misses.dat','bitstreams','bitstreams','branch-misses:u','',True,(Datrow('0',(FileExpression(file1,exp1,size1),)),Datrow('1',(FileExpression(file2,exp2,size2),)),Datrow('2',(FileExpression(file3,exp3,size3),)),Datrow('3',(FileExpression(file4,exp4,size4),)),Datrow('4',(FileExpression(file5,exp5,size5),)),)))
64#charts.append(chart4)
65
66chart5=[]
67chart5.append(Datfile('../../../docs/Working/re/data/avxtime.dat','bitstreams_avx2','bitstreams_avx2','cycles:u','',True,(Datrow('0',(FileExpression(file1,exp1,size1*cpms),)),Datrow('1',(FileExpression(file2,exp2,size2*cpms),)),Datrow('2',(FileExpression(file3,exp3,size3*cpms),)),Datrow('3',(FileExpression(file4,exp4,size4*cpms),)),Datrow('4',(FileExpression(file5,exp5,size5*cpms),)),)))
68chart5.append(Datfile('../../../docs/Working/re/data/ssetime.dat','bitstreams','bitstreams','cycles:u','',True,(Datrow('0',(FileExpression(file1,exp1,size1*cpms),)),Datrow('1',(FileExpression(file2,exp2,size2*cpms),)),Datrow('2',(FileExpression(file3,exp3,size3*cpms),)),Datrow('3',(FileExpression(file4,exp4,size4*cpms),)),Datrow('4',(FileExpression(file5,exp5,size5*cpms),)),)))
69charts.append(chart5)
70
71
72
73for chart in charts:
74        chartmin=10000000
75        for datfile in chart:
76                for datrow in datfile.rows:
77                        value1=0
78                        valuecount1=0
79                        value2=0
80                        valuecount2=0
81                        for row in incsv:
82                                for fileexpression in datrow.fileexpressions:
83                                        if row.expression==fileexpression.expression and row.file == fileexpression.file and row.program==datfile.program1 and row.stat==datfile.stat1:
84                                                if datfile.perbyte:
85                                                        value1=value1+(float(row.value)/fileexpression.filesize)
86                                                else:
87                                                        value1=value1+int(row.value)
88                                                valuecount1=valuecount1+1
89                                        if row.expression==fileexpression.expression and row.file == fileexpression.file and row.program==datfile.program2 and row.stat==datfile.stat2:
90                                                if datfile.perbyte:
91                                                        value2=value2+(float(row.value)/fileexpression.filesize)
92                                                else:
93                                                        value2=value2+int(row.value)                                           
94                                                valuecount2=valuecount2+1
95                        print value1
96                        print value2
97                        if valuecount1>0:
98                                value1 = value1/valuecount1
99                        if valuecount2>0:
100                                value2 = value2/valuecount2
101                        if value2>0:
102                                value = value1/value2
103                        else:
104                                value = value1
105                        if value<chartmin:
106                                chartmin=value
107        for datfile in chart:
108                f = open(datfile.file, 'w')
109                for datrow in datfile.rows:
110                        value1=0
111                        valuecount1=0
112                        value2=0
113                        valuecount2=0
114                        for row in incsv:
115                                for fileexpression in datrow.fileexpressions:
116                                        if row.expression==fileexpression.expression and row.file == fileexpression.file and row.program==datfile.program1 and row.stat==datfile.stat1:
117                                                if datfile.perbyte:
118                                                        value1=value1+(float(row.value)/fileexpression.filesize)
119                                                else:
120                                                        value1=value1+int(row.value)
121                                                valuecount1=valuecount1+1
122                                        if row.expression==fileexpression.expression and row.file == fileexpression.file and row.program==datfile.program2 and row.stat==datfile.stat2:
123                                                if datfile.perbyte:
124                                                        value2=value2+(float(row.value)/fileexpression.filesize)
125                                                else:
126                                                        value2=value2+int(row.value)                                           
127                                                valuecount2=valuecount2+1
128                        print value1
129                        print value2
130                        if valuecount1>0:
131                                value1 = value1/valuecount1
132                        if valuecount2>0:
133                                value2 = value2/valuecount2
134                        if value2>0:
135                                value = value1/value2
136                        else:
137                                value = value1
138                        if False:#value>chartmin*10:
139                                value=chartmin*10
140                        f.write(datrow.number)
141                        f.write(' ')
142                        f.write(str(value))
143                        f.write('\n')
144                f.close()
Note: See TracBrowser for help on using the repository browser.