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

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

RE perf script changes

File size: 6.8 KB
Line 
1from subprocess import call, Popen
2from collections import *
3import csv
4import StringIO
5import os.path
6import sys
7import shutil
8
9def execute(execution):
10        if not os.path.exists(execution.file.file+'.11'):
11                file = open(execution.file.file,'r')
12                contents = file.read()
13                file.close()
14                file11 = open(execution.file.file+'.11','w')
15                for i in range(11):
16                        file11.write(contents)
17                file11.close
18        if not os.path.exists(execution.file.file+'.5'):
19                file = open(execution.file.file,'r')
20                contents = file.read()
21                file.close()
22                file5 = open(execution.file.file+'.5','w')
23                for i in range(5):
24                        file5.write(contents)
25                file5.close
26
27        #quick version
28        outputpath = 'output/'+execution.file.description+'/'+execution.expression.description+'/'+execution.program
29        if not os.path.exists(outputpath):
30                os.makedirs(outputpath)
31        one=execute_one(execution,1)
32        results_file = open(outputpath+'/'+execution.stat,'w')
33        results_file.write(str(one))
34        results_file.close()
35        return one,one,one,one
36
37        #slower version
38        #execute_one(execution,1)
39        #one=execute_one(execution,10)
40        #execution5=Execution(execution.stat, execution.program, File(execution.file.file+'.5',execution.file.description+'.5',execution.file.types), execution.expression)
41        #execute_one(execution5,1)
42        #five=execute_one(execution5,10)
43        #execution11=Execution(execution.stat, execution.program, File(execution.file.file+'.11',execution.file.description+'.11',execution.file.types), execution.expression)
44        #execute_one(execution11,1)
45        #eleven=execute_one(execution11,10)
46        #return (eleven-one)/10,one,five/5,eleven/11
47
48
49
50
51def execute_one(execution, count):
52        outputpath = 'output/'+execution.file.description+'/'+execution.expression.description+'/'+execution.program
53        log_file = open('perflog.txt', 'a')
54        log_file.write('\nEXECUTION: '+execution.file.description+' '+ execution.expression.description+' '+ execution.program+' '+ execution.stat+'\n')
55        log_file.close()
56        redirectoutput= ' 2>&1 | tee '+outputpath+'/output.txt >> perflog.txt'
57        if execution.program=='bitstreams':
58               
59                re_home = '../'
60                re_input_file = open(re_home+'input/test/test1.re', 'w')
61                re_input_file.write(execution.expression.expression+'\n')
62                re_input_file.close()
63                call('make -C '+re_home + redirectoutput,shell=True)
64                call('make -C '+re_home+'output/' + redirectoutput,shell=True)
65                call('make -C '+re_home+'output/src/' + redirectoutput,shell=True)
66                shutil.copyfile(re_home+'output/re_pablo_cc.py', outputpath+'/re_pablo_cc.py')
67                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+re_home+'output/src/re '+ execution.file.file + redirectoutput]
68                p = Popen(cmd,shell=True)
69                p.wait()
70        if execution.program=='grep':
71                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' grep -c -E \'' + execution.expression.expression + '\' '+ execution.file.file + redirectoutput]
72                p = Popen(cmd,shell=True)
73                p.wait()
74        if execution.program=='nrgrep':
75                nrgreplocation='nrgrep-1.0/nrgrep'
76                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+nrgreplocation+' -c \'' + execution.expression.expression + '\' '+ execution.file.file + redirectoutput]
77                p = Popen(cmd,shell=True)
78                p.wait()
79        if execution.program=='agrep':
80                agreplocation='agrep-3.41/agrep'
81                cmd = ['perf stat -x, -o perfoutput -r '+str(count)+' -e '+ execution.stat+ ' '+agreplocation+' -c \'' + execution.expression.expression + '\' '+ execution.file.file + redirectoutput]
82                p = Popen(cmd,shell=True)
83                p.wait()
84        output_file = open('perfoutput', 'r')
85        output = output_file.read()
86        endpos = output.rfind(execution.stat)-1
87        startpos=endpos-1
88        while output[startpos-1].isdigit():
89                startpos-=1
90        return int(output[startpos:endpos])
91               
92
93
94Expression = namedtuple('Expression', ['expression', 'description', 'types'])
95expressions = []
96File = namedtuple('File',['file','description','types'])
97files = []
98executions = []
99Execution = namedtuple('Execution', ['stat', 'program', 'file', 'expression'])
100
101
102
103
104
105
106#http://sljit.sourceforge.net/regex_perf.html
107files.append(File('data/mark.txt','mark_twain',('regex_perf',)))
108expressions.append(Expression('Twain', 'Twain', ('regex_perf',)))
109expressions.append(Expression('^Twain', '^Twain', ('regex_perf',)))
110expressions.append(Expression('Twain$', 'Twain$', ('regex_perf',)))
111expressions.append(Expression('Huck[a-zA-Z]+|Finn[a-zA-Z]+', 'Huck[a-zA-Z]+|Finn[a-zA-Z]+', ('regex_perf',)))
112expressions.append(Expression('a[^x]{20}b', 'a[^x]{20}b', ('regex_perf',)))
113expressions.append(Expression('Tom|Sawyer|Huckleberry|Finn', 'Tom|Sawyer|Huckleberry|Finn', ('regex_perf',)))
114expressions.append(Expression('.{0,3}(Tom|Sawyer|Huckleberry|Finn)', '.{0,3}(Tom|Sawyer|Huckleberry|Finn)', ('regex_perf',)))
115expressions.append(Expression('[a-zA-Z]+ing', '[a-zA-Z]+ing', ('regex_perf',)))
116expressions.append(Expression('^[a-zA-Z]{0,4}ing[^a-zA-Z]', '^[a-zA-Z]{0,4}ing[^a-zA-Z]', ('regex_perf',)))
117expressions.append(Expression('[a-zA-Z]+ing$', '[a-zA-Z]+ing$', ('regex_perf',)))
118expressions.append(Expression('^[a-zA-Z ]{5,}$', '^[a-zA-Z ]{5,}$', ('regex_perf',)))
119expressions.append(Expression('^.{16,20}$', '^.{16,20}$', ('regex_perf',)))
120expressions.append(Expression('([a-f](.[d-m].){0,2}[h-n]){2}', '([a-f](.[d-m].){0,2}[h-n]){2}', ('regex_perf',)))
121expressions.append(Expression('([A-Za-z]awyer|[A-Za-z]inn)[^a-zA-Z]', '([A-Za-z]awyer|[A-Za-z]inn)[^a-zA-Z]', ('regex_perf',)))
122expressions.append(Expression('"[^"]{0,30}[?!\.]"', '"[^"]{0,30}[?!\.]"', ('regex_perf',)))
123expressions.append(Expression('Tom.{10,25}river|river.{10,25}Tom', 'Tom.{10,25}river|river.{10,25}Tom', ('regex_perf',)))
124
125
126
127
128
129
130#http://lh3lh3.users.sourceforge.net/reb.shtml
131files.append(File('data/howto','howto',('reb',)))
132expressions.append(Expression('([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?', 'URI', ('reb',)))
133expressions.append(Expression('([^ @]+)@([^ @]+)', 'Email', ('reb',)))
134expressions.append(Expression('([0-9][0-9]?)/([0-9][0-9]?)/([0-9][0-9]([0-9][0-9])?)', 'Date', ('reb',)))
135expressions.append(Expression('([a-zA-Z][a-zA-Z0-9]*)://([^ /]+)(/[^ ]*)?|([^ @]+)@([^ @]+)', 'URIorEmail', ('reb',)))
136
137
138programs = ['bitstreams','grep','nrgrep','agrep']
139stats = ['cycles', 'instructions']
140
141typeargument=False
142if len(sys.argv)>1:
143        type=sys.argv[1]
144        typeargument=True
145
146for file in files:
147        for expression in expressions:
148                match = False
149                for type1 in file.types:
150                        for type2 in expression.types:
151                                if type1 == type2:
152                                        if typeargument:
153                                                if type1==type:
154                                                        match = True
155                                        else:
156                                                match = True
157                if match:
158                        for program in programs:
159                                for stat in stats:
160                                        executions.append(Execution(stat, program, file, expression))
161csv_output = StringIO.StringIO()
162writer = csv.writer(csv_output)
163
164log_file = open('perflog.txt', 'w')
165log_file.close()
166
167for execution in executions:
168        calc,one,five,eleven = execute(execution)
169        writer.writerow((execution.file.description, execution.expression.description, execution.program, execution.stat, calc,one,five,eleven))
170
171print csv_output.getvalue()
Note: See TracBrowser for help on using the repository browser.