Parallel Programming - Tidied things up
[matches/honours.git] / course / semester2 / pprog / assignment1 / get_data.py
diff --git a/course/semester2/pprog/assignment1/get_data.py b/course/semester2/pprog/assignment1/get_data.py
new file mode 100755 (executable)
index 0000000..8ef8241
--- /dev/null
@@ -0,0 +1,76 @@
+#!/usr/bin/python -u
+
+# @file get_data.py
+# @purpose Extract statistics from repeated runs of N-Body simulators
+# @author Sam Moore (20503628) - 2012
+
+import sys
+import os
+import subprocess
+
+import Gnuplot, Gnuplot.funcutils
+plot = Gnuplot.Gnuplot(persist=0)
+
+programs = {
+       "single-thread" : "./single-thread/nbody -g -v 5"
+}
+for n in range(1, 5):
+       programs.update({"mthread"+str(n) : "./mthread/nbody -g -v 5 -n "+str(n)})
+
+
+
+def RunProgram(string):
+       p = subprocess.Popen(string.split(" "), stdout=subprocess.PIPE)
+       results = []
+       for line in p.stdout:
+               results.append(map(float, line.strip(" \r\n\t").split("\t")))
+       results.sort(key = lambda e : e[0])
+       return results
+
+def RunForSteps(program, field, steps):
+       results = []
+       #print(str(program) + " -s "+str(steps) + " " + str(field))
+       results.append(RunProgram(str(program) + " -s "+str(steps) + " " + str(field)))
+       return results
+
+def VaryField(program, steps, fields):
+       results = []
+       for f in fields:
+               results.append(RunProgram(program + " -s " +str(steps) + " " + str(field)))
+       return results
+
+def VaryTime(program, field, time_min, time_max, time_inc=10):
+       results = []
+       for t in range(time_min, time_max, time_inc):
+               results.append(RunProgram(program + " -t "+str(t) + " " + str(field)))
+       return results
+
+def main(argv):
+       plot("set xlabel \"steps\"")
+       plot("set ylabel \"real time (s)\"")
+       plot("set title \"Time .vs. Steps Computed\"")
+       plot("set key outside right")
+       data = {}
+       data.update(programs)
+
+       fields = map(int, os.listdir("fields"))
+       fields.sort(key = lambda e : e)
+       
+       for n in fields:
+               for p in data.keys():
+                       data[p] = [RunForSteps(programs[p], "fields/"+str(n), 200), n]
+                       #print(str(data[p]))
+                       if (len(data[p]) > 0):
+                               plot.replot(Gnuplot.Data(data[p][0], title=str(p)+":"+str(n), with_="lp linecolor "+str(fields.index(n))))
+
+       #print(str(data.items()))
+       # Score the programs
+       
+       #for p in sorted(data.items(), key = lambda e : e[1][0][len(e[1][0])-1][1]):
+       #       print(str(p[0])+":"+str(n)+"\t"+str(p[1][0][len(p[1][0])-1][1]))
+               
+       sys.stdin.readline()
+       return 0
+
+if __name__ == "__main__":
+       sys.exit(main(sys.argv))

UCC git Repository :: git.ucc.asn.au