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

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

Performance script changes

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