source: proto/RE/performance/perf.py @ 3484

Last change on this file since 3484 was 3484, checked in by bhull, 6 years ago

Perf script changes.

File size: 13.3 KB
Line 
1from subprocess import call, Popen
2from collections import *
3import csv
4import StringIO
5import os.path
6import sys
7import shutil
8
9
10def execute(execution):
11        if not os.path.exists(execution.file.file+'.11'):
12                file = open(execution.file.file,'r')
13                contents = file.read()
14                file.close()
15                file11 = open(execution.file.file+'.11','w')
16                for i in range(11):
17                        file11.write(contents)
18                file11.close
19        if not os.path.exists(execution.file.file+'.5'):
20                file = open(execution.file.file,'r')
21                contents = file.read()
22                file.close()
23                file5 = open(execution.file.file+'.5','w')
24                for i in range(5):
25                        file5.write(contents)
26                file5.close
27
28        #quick version
29        outputpath = 'output/'+execution.file.description+'/'+execution.expression.description+'/'+execution.program
30        if not os.path.exists(outputpath):
31                os.makedirs(outputpath)
32        if not os.path.exists(outputpath+'/'+execution.stat):           
33                one=execute_one(execution,1)
34                results_file = open(outputpath+'/'+execution.stat,'w')
35                results_file.write(str(one))
36                results_file.close()
37        else:
38                results_file = open(outputpath+'/'+execution.stat,'r')
39                one=int(results_file.read())
40                results_file.close()
41        # if not os.path.exists(outputpath+'/'+execution.stat):         
42        #       one=execute_one(execution,1)
43        #       results_file = open(outputpath+'/'+execution.stat,'w')
44        #       results_file.write(str(one))
45        #       results_file.close()
46        # else:
47        #       results_file = open(outputpath+'/'+execution.stat,'r')
48        #       one=int(results_file.read())
49        #       results_file.close()
50
51       
52        return one,one,one,one
53
54        #slower version
55        #execute_one(execution,1)
56        #one=execute_one(execution,10)
57        #execution5=Execution(execution.stat, execution.program, File(execution.file.file+'.5',execution.file.description+'.5',execution.file.types), execution.expression)
58        #execute_one(execution5,1)
59        #five=execute_one(execution5,10)
60        #execution11=Execution(execution.stat, execution.program, File(execution.file.file+'.11',execution.file.description+'.11',execution.file.types), execution.expression)
61        #execute_one(execution11,1)
62        #eleven=execute_one(execution11,10)
63        #return (eleven-one)/10,one,five/5,eleven/11
64
65
66def escape_quotes(e):  return e.replace("'", "'\\''")
67
68
69def execute_one(execution, count):
70        outputpath = 'output/'+execution.file.description+'/'+execution.expression.description+'/'+execution.program
71        log_file = open('perflog.txt', 'a')
72        log_file.write('\nEXECUTION: '+execution.file.description+' '+ execution.expression.description+' '+ execution.program+' '+ execution.stat+'\n')
73        log_file.close()
74        redirectoutput= ' 2>&1 | tee '+outputpath+'/output.txt >> perflog.txt'
75        if execution.program=='bitstreams':             
76                re_home = '../'
77                re_input_file = open(re_home+'input/test/test1.re', 'w')
78                re_input_file.write(execution.expression.expression+'\n')
79                re_input_file.close()
80                call('make -C '+re_home + redirectoutput,shell=True)
81                call('make -C '+re_home+'output/' + redirectoutput,shell=True)
82                call('make -C '+re_home+'output/src/' + redirectoutput,shell=True)
83                shutil.copyfile(re_home+'output/re_pablo_cc.py', outputpath+'/re_pablo_cc.py')
84                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+re_home+'output/src/re -c '+ execution.file.file + redirectoutput]
85                p = Popen(cmd,shell=True)
86                p.wait()
87        if execution.program=='bitstreams_avx2':
88                re_home = '../'
89                re_input_file = open(re_home+'input/test/test1.re', 'w')
90                re_input_file.write(execution.expression.expression+'\n')
91                re_input_file.close()
92                call('make -C '+re_home + redirectoutput,shell=True)
93                call('make -C '+re_home+'output/' + redirectoutput,shell=True)
94                call('make avx2 -C '+re_home+'output/src/' + redirectoutput,shell=True)
95                shutil.copyfile(re_home+'output/re_pablo_cc.py', outputpath+'/re_pablo_cc.py')
96                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+re_home+'output/src/re -c '+ execution.file.file + redirectoutput]
97                p = Popen(cmd,shell=True)
98                p.wait()       
99        if execution.program=='gpu':
100                re_home = '../'
101                re_input_file = open(re_home+'input/test/test1.re', 'w')
102                re_input_file.write(execution.expression.expression+'\n')
103                re_input_file.close()
104                call('make -C '+re_home + redirectoutput,shell=True)
105                call('make all_gpu -C '+re_home+'output/' + redirectoutput,shell=True)
106                shutil.copyfile(re_home+'output/re_pablo_cc.py', outputpath+'/re_pablo_cc.py')
107                shutil.copyfile(re_home+'output/src/re.cpp', outputpath+'/re.cpp')
108                shutil.copyfile(re_home+'performance/GPU_fixer.py', outputpath+'/GPU_fixer.py')
109                shutil.copyfile(re_home+'performance/Regxp.cl', outputpath+'/Regxp.cl')
110                p = Popen(['python '+outputpath+'/GPU_fixer.py '+outputpath+'/re.cpp'] ,shell=True)
111                p.wait()
112        if execution.program=='grep':
113                escaped_e = escape_quotes(execution.expression.expression)
114                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' grep -c -E \'' + escaped_e + '\' '+ execution.file.file + redirectoutput]
115                p = Popen(cmd,shell=True)
116                p.wait()
117        if execution.program=='nrgrep112':
118                nrgreplocation='nrgrep-1.1.2/nrgrep'
119                e = execution.expression.expression
120                if nrgrep_override.has_key(e): e = nrgrep_override[e]
121                e = escape_quotes(e)
122                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+nrgreplocation+' -c \'' + e + '\' '+ execution.file.file + redirectoutput]
123                p = Popen(cmd,shell=True)
124                p.wait()
125        if execution.program=='nrgrep':
126                nrgreplocation='nrgrep-1.0/nrgrep'
127                e = execution.expression.expression
128                if nrgrep_override.has_key(e): e = nrgrep_override[e]
129                e = escape_quotes(e)
130                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+nrgreplocation+' -c \'' + e + '\' '+ execution.file.file + redirectoutput]
131                p = Popen(cmd,shell=True)
132                p.wait()
133        if execution.program=='pcregrep':
134                pcregreplocation='pcre-8.12/pcregrep'
135                e = escape_quotes(execution.expression.expression)
136                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+pcregreplocation+' -c  \'' + e + '\' '+ execution.file.file + redirectoutput]
137                p = Popen(cmd,shell=True)
138                p.wait()
139        if execution.program=='agrep':
140                agreplocation='agrep-3.41/agrep'
141                e = execution.expression.expression
142                if agrep_override.has_key(e): e = agrep_override[e]
143                e = escape_quotes(e)
144                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+agreplocation+' -0 -c \'' + e + '\' '+ execution.file.file + redirectoutput]
145                p = Popen(cmd,shell=True)
146                p.wait()
147        output_file = open('perfoutput', 'r')
148        output = output_file.read()
149        endpos = output.rfind(execution.stat)-1
150        startpos=endpos-1
151        while output[startpos-1].isdigit():
152                startpos-=1
153        return int(output[startpos:endpos])
154               
155
156
157Expression = namedtuple('Expression', ['expression', 'description', 'types'])
158expressions = []
159File = namedtuple('File',['file','description','types'])
160files = []
161executions = []
162Execution = namedtuple('Execution', ['stat', 'program', 'file', 'expression'])
163
164#http://sljit.sourceforge.net/regex_perf.html
165files.append(File('data/mark.txt','mark_twain',('regex_perf',)))
166expressions.append(Expression('Twain', 'Twain', ('regex_perf',)))
167expressions.append(Expression('^Twain', '^Twain', ('regex_perf',)))
168expressions.append(Expression('Twain$', 'Twain$', ('regex_perf',)))
169expressions.append(Expression('Huck[a-zA-Z]+|Finn[a-zA-Z]+', 'Huck_or_Finn_', ('regex_perf',)))
170expressions.append(Expression('a[^x]{20}b', 'a----b', ('regex_perf',)))
171expressions.append(Expression('Tom|Sawyer|Huckleberry|Finn', 'Tom_or_Huck', ('regex_perf',)))
172expressions.append(Expression('.{0,3}(Tom|Sawyer|Huckleberry|Finn)', '__Tom_or_Huck', ('regex_perf',)))
173expressions.append(Expression('[a-zA-Z]+ing', '___ing', ('regex_perf',)))
174expressions.append(Expression('^[a-zA-Z]{0,4}ing[^a-zA-Z]', '....ing_', ('regex_perf',)))
175expressions.append(Expression('[a-zA-Z]+ing$', '___ing$', ('regex_perf',)))
176expressions.append(Expression('^[a-zA-Z ]{5,}$', 'symline5+$', ('regex_perf',)))
177expressions.append(Expression('^.{16,20}$', 'line16-20', ('regex_perf',)))
178expressions.append(Expression('([a-f](.[d-m].){0,2}[h-n]){2}', 'af_hnaf_hn', ('regex_perf',)))
179expressions.append(Expression('([A-Za-z]awyer|[A-Za-z]inn)[^a-zA-Z]', '_awyer_or_inn', ('regex_perf',)))
180expressions.append(Expression('"[^"]{0,30}[?!.]"', 'quoted_sentence0-30', ('regex_perf',)))
181expressions.append(Expression('Tom.{10,25}river|river.{10,25}Tom', 'Tom_near_river', ('regex_perf',)))
182
183
184expressions.append(Expression('a[^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x]b', 'a----b', ('regex_perf2',)))
185expressions.append(Expression('.?.?.?(Tom|Sawyer|Huckleberry|Finn)', '__Tom_or_Huck', ('regex_perf2',)))
186expressions.append(Expression('^[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?ing[^a-zA-Z]', '....ing_', ('regex_perf2',)))
187expressions.append(Expression('^[a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ]*$', 'symline5+$', ('regex_perf2',)))
188expressions.append(Expression('^.................?.?.?.?$', 'line16-20', ('regex_perf2',)))
189expressions.append(Expression('([a-f](.[d-m].)?(.[d-m].)?[h-n])([a-f](.[d-m].)?(.[d-m].)?[h-n])', 'af_hnaf_hn', ('regex_perf2',)))
190expressions.append(Expression('"[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[?!.]"', 'quoted_sentence0-30', ('regex_perf2',)))
191expressions.append(Expression('Tom...........?.?.?.?.?.?.?.?.?.?.?.?.?.?.?river|river...........?.?.?.?.?.?.?.?.?.?.?.?.?.?.?Tom', 'Tom_near_river', ('regex_perf2',)))
192
193nrgrep_override = {}
194nrgrep_override['a[^x]{20}b'] = 'a[^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x][^x]b'
195nrgrep_override['.{0,3}(Tom|Sawyer|Huckleberry|Finn)'] = '.?.?.?(Tom|Sawyer|Huckleberry|Finn)'
196nrgrep_override['^[a-zA-Z]{0,4}ing[^a-zA-Z]'] = '^[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?[a-zA-Z]?ing[^a-zA-Z]'
197nrgrep_override['^[a-zA-Z ]{5,}$'] = '^[a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ][a-zA-Z ]*[\x0d]$'
198nrgrep_override['^.{16,20}$'] = '^................?.?.?.?[\x0d]$'
199nrgrep_override['([a-f](.[d-m].){0,2}[h-n]){2}'] = '[a-f](.[d-m].)?(.[d-m].)?[h-n][a-f](.[d-m].)?(.[d-m].)?[h-n]'
200nrgrep_override['"[^"]{0,30}[?!.]"'] = '"[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[^"]?[?!.]"'
201nrgrep_override['Tom.{10,25}river|river.{10,25}Tom'] = 'Tom...........?.?.?.?.?.?.?.?.?.?.?.?.?.?.?river|river...........?.?.?.?.?.?.?.?.?.?.?.?.?.?.?Tom'
202
203agrep_override = nrgrep_override
204agrep_override['Huck[a-zA-Z]+|Finn[a-zA-Z]+'] = 'Huck[a-zA-Z][a-zA-Z]*|Finn[a-zA-Z][a-zA-Z]*'
205agrep_override['[a-zA-Z]+ing'] = '[a-zA-Z][a-zA-Z]*ing'
206agrep_override['[a-zA-Z]+ing$'] = '[a-zA-Z][a-zA-Z]*ing$'
207agrep_override['([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?'] = '([a-zA-Z][a-zA-Z0-9]*)://([^ /][^ /]*)(/[^ ]*)?'
208agrep_override['([^ @]+)@([^ @]+)'] = '([^ @][^ @]*)@([^ @][^ @]*)'
209agrep_override['([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?|([^ @]+)@([^ @]+)'] = '([a-zA-Z][a-zA-Z0-9]*)://([^ /][^ /]*)(/[^ ]*)?|([^ @][^ @]*)@([^ @][^ @]*)'
210agrep_override['[0-9]+[.][0-9]+, *[0-9]+[.][0-9]+'] = '[0-9][0-9]*[.][0-9][0-9]*\, *[0-9][0-9]*[.][0-9][0-9]*'
211
212
213#http://lh3lh3.users.sourceforge.net/reb.shtml
214files.append(File('data/howto','howto',('reb',)))
215expressions.append(Expression('@', 'at', ('reb',)))
216expressions.append(Expression('([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?', 'URI', ('reb',)))
217expressions.append(Expression('([^ @]+)@([^ @]+)', 'Email', ('reb',)))
218expressions.append(Expression('([0-9][0-9]?)/([0-9][0-9]?)/([0-9][0-9]([0-9][0-9])?)', 'Date', ('reb',)))
219expressions.append(Expression('([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?|([^ @]+)@([^ @]+)', 'URIorEmail', ('reb',)))
220
221
222files.append(File('../../../trunk/QA/TD/roads-2.gml', 'roads', ('gml',)))
223expressions.append(Expression('<!--([^-]|-[^-])*-->', 'comment', ('gml',)))
224expressions.append(Expression('<[^!?][^>]*>', 'tag', ('gml',)))
225expressions.append(Expression('<gml:[^>]* xmlns:gml="[^"]*"[^>]*>', 'xmlns:gml', ('gml',)))
226expressions.append(Expression('[0-9]+[.][0-9]+, *[0-9]+[.][0-9]+', 'coord', ('gml',)))
227expressions.append(Expression(r"""["']|&quot;|&apos;|&#0*3[49];|&#x0*2[27];""", 'xquote', ('gml',)))
228
229
230expressions.append(Expression('(^|[^A-Z0-9:])([A-F0-9]{1,4}:){7}[A-F0-9]{1,4}($|[^A-Z0-9:])', 'IPv6', ('reb',)))
231
232programs = ['bitstreams', 'grep', 'nrgrep112']#, 'agrep', 'pcregrep']
233#programs = ['bitstreams','grep']
234#programs = ['bitstreams_avx2']
235
236#stats = ['cycles:u', 'instructions:u', 'cache-misses:u', 'L1-dcache-load-misses:u', 'L1-dcache-store-misses:u', 'L1-dcache-prefetch-misses:u', 'L1-icache-load-misses:u']
237stats = ['cycles:u','instructions:u','branch-misses:u','cpu-clock','task-clock']
238
239
240typeargument=False
241if len(sys.argv)>1:
242        type=sys.argv[1]
243        typeargument=True
244
245for file in files:
246        for expression in expressions:
247                match = False
248                for type1 in file.types:
249                        for type2 in expression.types:
250                                if type1 == type2:
251                                        if typeargument:
252                                                if type1==type:
253                                                        match = True
254                                        else:
255                                                match = True
256                if match:
257                        for program in programs:
258                                for stat in stats:
259                                        executions.append(Execution(stat, program, file, expression))
260csv_output = StringIO.StringIO()
261writer = csv.writer(csv_output)
262
263log_file = open('perflog.txt', 'w')
264log_file.close()
265
266for execution in executions:
267        calc,one,five,eleven = execute(execution)
268        writer.writerow((execution.file.description, execution.expression.description, execution.program, execution.stat, calc,one,five,eleven))
269
270print csv_output.getvalue()
Note: See TracBrowser for help on using the repository browser.