Parallel Programming - Stuff happened
[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 -v 5"
16 }
17 for n in range(2, 6):
18         programs.update({"mthread"+str(n) : "./mthread/nbody -v 5 --pedantic-graphics -n "+str(n)})
19         programs.update({"mthread"+str(n) : "./mthread/nbody -v 5 -n "+str(n)})
20         #programs.update({"slow-mthread"+str(n) : "./mthread/nbody-slow --pedantic-graphics -v 5 -n "+str(n)})
21         #programs.update({"openmp"+str(n) : "./openmp/nbody -v 5 --pedantic-graphics -n " +str(n)})
22
23
24
25 def RunProgram(string):
26         p = subprocess.Popen(string.split(" "), stdout=subprocess.PIPE)
27         results = []
28         for line in p.stdout:
29                 results.append(map(float, line.strip(" \r\n\t").split("\t")))
30         results.sort(key = lambda e : e[0])
31         return results
32
33 def RunForSteps(program, field, steps):
34         results = []
35         print(str(program) + " -s "+str(steps) + " " + str(field))
36         results = RunProgram(str(program) + " -s "+str(steps) + " " + str(field))
37         return results
38
39 def VaryField(program, steps, fields):
40         results = []
41         for f in fields:
42                 results.append(RunProgram(program + " -s " +str(steps) + " " + str(field)))
43         return results
44
45 def VaryTime(program, field, time_min, time_max, time_inc=10):
46         results = []
47         for t in range(time_min, time_max, time_inc):
48                 results.append(RunProgram(program + " -t "+str(t) + " " + str(field)))
49         return results
50
51 def main(argv):
52         plot("set xlabel \"steps\"")
53         plot("set ylabel \"real time (s)\"")
54         plot("set title \"Time .vs. Steps Computed\"")
55         plot("set key outside right")
56         data = {}
57         data.update(programs)
58
59         fields = map(int, os.listdir("fields"))
60         fields.sort(key = lambda e : e)
61         
62         ignore = [10, 100]
63         for n in fields:
64                 if n in ignore:
65                         continue
66                 for p in data.keys():
67                         data[p] = RunForSteps(programs[p], "fields/"+str(n), 200)
68                         #print(str(data[p]))
69
70                 #print(str(data.items()));
71                 for d in sorted(data.items(), key = lambda e : e[1][len(e[1])-1][1]):
72                         if (len(d[1]) > 0):
73                                 plot.replot(Gnuplot.Data(d[1], title=str(d[0])+":"+str(n), with_="lp")) #linecolor "+str(fields.index(n))))
74
75         #print(str(data.items()))
76         # Score the programs
77         
78         #for p in sorted(data.items(), key = lambda e : e[1][0][len(e[1][0])-1][1]):
79         #       print(str(p[0])+":"+str(n)+"\t"+str(p[1][0][len(p[1][0])-1][1]))
80                 
81         sys.stdin.readline()
82         return 0
83
84 if __name__ == "__main__":
85         sys.exit(main(sys.argv))

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