8ef824107b23fb48a0927dd80d64360ae2ad39a6
[matches/honours.git] / course / semester2 / pprog / assignment1 / get_data.py
1 #!/usr/bin/python -u
2
3 # @file get_data.py
4 # @purpose Extract statistics from repeated runs of N-Body simulators
5 # @author Sam Moore (20503628) - 2012
6
7 import sys
8 import os
9 import subprocess
10
11 import Gnuplot, Gnuplot.funcutils
12 plot = Gnuplot.Gnuplot(persist=0)
13
14 programs = {
15         "single-thread" : "./single-thread/nbody -g -v 5"
16 }
17 for n in range(1, 5):
18         programs.update({"mthread"+str(n) : "./mthread/nbody -g -v 5 -n "+str(n)})
19
20
21
22 def RunProgram(string):
23         p = subprocess.Popen(string.split(" "), stdout=subprocess.PIPE)
24         results = []
25         for line in p.stdout:
26                 results.append(map(float, line.strip(" \r\n\t").split("\t")))
27         results.sort(key = lambda e : e[0])
28         return results
29
30 def RunForSteps(program, field, steps):
31         results = []
32         #print(str(program) + " -s "+str(steps) + " " + str(field))
33         results.append(RunProgram(str(program) + " -s "+str(steps) + " " + str(field)))
34         return results
35
36 def VaryField(program, steps, fields):
37         results = []
38         for f in fields:
39                 results.append(RunProgram(program + " -s " +str(steps) + " " + str(field)))
40         return results
41
42 def VaryTime(program, field, time_min, time_max, time_inc=10):
43         results = []
44         for t in range(time_min, time_max, time_inc):
45                 results.append(RunProgram(program + " -t "+str(t) + " " + str(field)))
46         return results
47
48 def main(argv):
49         plot("set xlabel \"steps\"")
50         plot("set ylabel \"real time (s)\"")
51         plot("set title \"Time .vs. Steps Computed\"")
52         plot("set key outside right")
53         data = {}
54         data.update(programs)
55
56         fields = map(int, os.listdir("fields"))
57         fields.sort(key = lambda e : e)
58         
59         for n in fields:
60                 for p in data.keys():
61                         data[p] = [RunForSteps(programs[p], "fields/"+str(n), 200), n]
62                         #print(str(data[p]))
63                         if (len(data[p]) > 0):
64                                 plot.replot(Gnuplot.Data(data[p][0], title=str(p)+":"+str(n), with_="lp linecolor "+str(fields.index(n))))
65
66         #print(str(data.items()))
67         # Score the programs
68         
69         #for p in sorted(data.items(), key = lambda e : e[1][0][len(e[1][0])-1][1]):
70         #       print(str(p[0])+":"+str(n)+"\t"+str(p[1][0][len(p[1][0])-1][1]))
71                 
72         sys.stdin.readline()
73         return 0
74
75 if __name__ == "__main__":
76         sys.exit(main(sys.argv))

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