3 class TimingScriptGenerator
:
4 """Used to generate a bash script which will invoke the toy and time it"""
5 def __init__(self
, scriptname
, outputname
):
6 self
.shfile
= open(scriptname
, 'w')
7 self
.timeFile
= outputname
8 self
.shfile
.write("echo \"\" > %s\n" % self
.timeFile
)
10 def writeTimingCall(self
, irname
, callname
):
11 """Echo some comments and invoke both versions of toy"""
14 rootname
= irname
[:irname
.rfind('.')]
15 self
.shfile
.write("echo \"%s: Calls %s\" >> %s\n" % (callname
, irname
, self
.timeFile
))
16 self
.shfile
.write("echo \"\" >> %s\n" % self
.timeFile
)
17 self
.shfile
.write("echo \"With MCJIT\" >> %s\n" % self
.timeFile
)
18 self
.shfile
.write("/usr/bin/time -f \"Command %C\\n\\tuser time: %U s\\n\\tsytem time: %S s\\n\\tmax set: %M kb\"")
19 self
.shfile
.write(" -o %s -a " % self
.timeFile
)
20 self
.shfile
.write("./toy -suppress-prompts -use-mcjit=true -enable-lazy-compilation=true -use-object-cache -input-IR=%s < %s > %s-mcjit.out 2> %s-mcjit.err\n" % (irname
, callname
, rootname
, rootname
))
21 self
.shfile
.write("echo \"\" >> %s\n" % self
.timeFile
)
22 self
.shfile
.write("echo \"With MCJIT again\" >> %s\n" % self
.timeFile
)
23 self
.shfile
.write("/usr/bin/time -f \"Command %C\\n\\tuser time: %U s\\n\\tsytem time: %S s\\n\\tmax set: %M kb\"")
24 self
.shfile
.write(" -o %s -a " % self
.timeFile
)
25 self
.shfile
.write("./toy -suppress-prompts -use-mcjit=true -enable-lazy-compilation=true -use-object-cache -input-IR=%s < %s > %s-mcjit.out 2> %s-mcjit.err\n" % (irname
, callname
, rootname
, rootname
))
26 self
.shfile
.write("echo \"\" >> %s\n" % self
.timeFile
)
27 self
.shfile
.write("echo \"With JIT\" >> %s\n" % self
.timeFile
)
28 self
.shfile
.write("/usr/bin/time -f \"Command %C\\n\\tuser time: %U s\\n\\tsytem time: %S s\\n\\tmax set: %M kb\"")
29 self
.shfile
.write(" -o %s -a " % self
.timeFile
)
30 self
.shfile
.write("./toy -suppress-prompts -use-mcjit=false -input-IR=%s < %s > %s-mcjit.out 2> %s-mcjit.err\n" % (irname
, callname
, rootname
, rootname
))
31 self
.shfile
.write("echo \"\" >> %s\n" % self
.timeFile
)
32 self
.shfile
.write("echo \"\" >> %s\n" % self
.timeFile
)
34 class LibScriptGenerator
:
35 """Used to generate a bash script which will invoke the toy and time it"""
36 def __init__(self
, filename
):
37 self
.shfile
= open(filename
, 'w')
39 def writeLibGenCall(self
, libname
, irname
):
40 self
.shfile
.write("./toy -suppress-prompts -use-mcjit=false -dump-modules < %s 2> %s\n" % (libname
, irname
))
42 def splitScript(inputname
, libGenScript
, timingScript
):
43 rootname
= inputname
[:-2]
44 libname
= rootname
+ "-lib.k"
45 irname
= rootname
+ "-lib.ir"
46 callname
= rootname
+ "-call.k"
47 infile
= open(inputname
, "r")
48 libfile
= open(libname
, "w")
49 callfile
= open(callname
, "w")
50 print "Splitting %s into %s and %s" % (inputname
, callname
, libname
)
52 if not line
.startswith("#"):
53 if line
.startswith("print"):
57 libGenScript
.writeLibGenCall(libname
, irname
)
58 timingScript
.writeTimingCall(irname
, callname
)
60 # Execution begins here
61 libGenScript
= LibScriptGenerator("make-libs.sh")
62 timingScript
= TimingScriptGenerator("time-lib.sh", "lib-timing.txt")
64 script_list
= ["test-5000-3-50-50.k", "test-5000-10-100-10.k", "test-5000-10-5-10.k", "test-5000-10-1-0.k",
65 "test-1000-3-10-50.k", "test-1000-10-100-10.k", "test-1000-10-5-10.k", "test-1000-10-1-0.k",
66 "test-200-3-2-50.k", "test-200-10-40-10.k", "test-200-10-2-10.k", "test-200-10-1-0.k"]
68 for script
in script_list
:
69 splitScript(script
, libGenScript
, timingScript
)