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

Last change on this file since 3655 was 3655, checked in by cameron, 5 years ago

Update for producing paper data

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