-
Notifications
You must be signed in to change notification settings - Fork 5
/
driver.py
executable file
·126 lines (110 loc) · 4.14 KB
/
driver.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#!/usr//bin/python
#
# driver.py - The driver tests the correctness of the student's cache
# simulator and the correctness and performance of their transpose
# function. It uses ./test-csim to check the correctness of the
# simulator and it runs ./test-trans on three different sized
# matrices (32x32, 64x64, and 61x67) to test the correctness and
# performance of the transpose function.
#
import subprocess;
import re;
import os;
import sys;
import optparse;
#
# computeMissScore - compute the score depending on the number of
# cache misses
#
def computeMissScore(miss, lower, upper, full_score):
if miss <= lower:
return full_score
if miss >= upper:
return 0
score = (miss - lower) * 1.0
range = (upper- lower) * 1.0
return round((1 - score / range) * full_score, 1)
#
# main - Main function
#
def main():
# Configure maxscores here
maxscore= {};
maxscore['csim'] = 27
maxscore['transc'] = 1
maxscore['trans32'] = 8
maxscore['trans64'] = 8
maxscore['trans61'] = 10
# Parse the command line arguments
p = optparse.OptionParser()
p.add_option("-A", action="store_true", dest="autograde",
help="emit autoresult string for Autolab");
opts, args = p.parse_args()
autograde = opts.autograde
# Check the correctness of the cache simulator
print "Part A: Testing cache simulator"
print "Running ./test-csim"
p = subprocess.Popen("./test-csim",
shell=True, stdout=subprocess.PIPE)
stdout_data = p.communicate()[0]
# Emit the output from test-csim
stdout_data = re.split('\n', stdout_data)
for line in stdout_data:
if re.match("TEST_CSIM_RESULTS", line):
resultsim = re.findall(r'(\d+)', line)
else:
print "%s" % (line)
# Check the correctness and performance of the transpose function
# 32x32 transpose
print "Part B: Testing transpose function"
print "Running ./test-trans -M 32 -N 32"
p = subprocess.Popen("./test-trans -M 32 -N 32 | grep TEST_TRANS_RESULTS",
shell=True, stdout=subprocess.PIPE)
stdout_data = p.communicate()[0]
result32 = re.findall(r'(\d+)', stdout_data)
# 64x64 transpose
print "Running ./test-trans -M 64 -N 64"
p = subprocess.Popen("./test-trans -M 64 -N 64 | grep TEST_TRANS_RESULTS",
shell=True, stdout=subprocess.PIPE)
stdout_data = p.communicate()[0]
result64 = re.findall(r'(\d+)', stdout_data)
# 61x67 transpose
print "Running ./test-trans -M 61 -N 67"
p = subprocess.Popen("./test-trans -M 61 -N 67 | grep TEST_TRANS_RESULTS",
shell=True, stdout=subprocess.PIPE)
stdout_data = p.communicate()[0]
result61 = re.findall(r'(\d+)', stdout_data)
# Compute the scores for each step
csim_cscore = map(int, resultsim[0:1])
trans_cscore = int(result32[0]) * int(result64[0]) * int(result61[0]);
miss32 = int(result32[1])
miss64 = int(result64[1])
miss61 = int(result61[1])
trans32_score = computeMissScore(miss32, 300, 600, maxscore['trans32']) * trans_cscore
trans64_score = computeMissScore(miss64, 1300, 2000, maxscore['trans64']) * trans_cscore
trans61_score = computeMissScore(miss61, 2000, 3000, maxscore['trans61']) * trans_cscore
total_score = csim_cscore[0] + trans_cscore + trans32_score + trans64_score + trans61_score
# Summarize the results
print "\nCache Lab summary:"
print "%-22s%8s%10s%8s" % ("", "Points", "Max pts", "Misses")
print "%-22s%8.1f%10d" % ("Csim correctness", csim_cscore[0],
maxscore['csim'])
print "%-22s%8.1f%10d" % ("Trans correctness", trans_cscore,
maxscore['transc'])
print "%-22s%8.1f%10d%8d" % ("Trans perf 32x32", trans32_score,
maxscore['trans32'], miss32)
print "%-22s%8.1f%10d%8d" % ("Trans perf 64x64", trans64_score,
maxscore['trans64'], miss64)
print "%-22s%8.1f%10d%8d" % ("Trans perf 61x67", trans61_score,
maxscore['trans61'], miss61)
print "%22s%8.1f%10d" % ("Total points", total_score,
maxscore['csim'] + maxscore['transc'] +
maxscore['trans32'] + maxscore['trans64'] +
maxscore['trans61'])
# Emit autoresult string for Autolab
if autograde:
autoresult="%.1f:%d:%d:%d" % (total_score, miss32, miss64, miss61)
print "\nAUTORESULT_STRING=%s" % autoresult
# execute main only if called as a script
if __name__ == "__main__":
main()