4 # @purpose Extract statistics from repeated runs of N-Body simulators
5 # @author Sam Moore (20503628) - 2012
11 import Gnuplot, Gnuplot.funcutils
12 plot = Gnuplot.Gnuplot(persist=0)
15 "single-thread" : "./single-thread/nbody -v 5"
17 for n in range(2, 20, 4):
18 programs.update({"mthread"+str(n) : "./mthread/nbody -v 5 -n "+str(n)})
19 #programs.update({"slow-mthread"+str(n) : "./mthread/nbody-slow -v 5 -n "+str(n)})
20 programs.update({"openmp"+str(n) : "./openmp/nbody -v 5 -n " +str(n)})
24 def RunProgram(string):
25 p = subprocess.Popen(string.split(" "), stdout=subprocess.PIPE)
28 results.append(map(float, line.strip(" \r\n\t").split("\t")))
29 results.sort(key = lambda e : e[0])
32 def RunForSteps(program, field, steps):
34 print(str(program) + " -s "+str(steps) + " " + str(field))
35 results = RunProgram(str(program) + " -s "+str(steps) + " " + str(field))
38 def VaryField(program, steps, fields):
41 results.append(RunProgram(program + " -s " +str(steps) + " " + str(field)))
44 def VaryTime(program, field, time_min, time_max, time_inc=10):
46 for t in range(time_min, time_max, time_inc):
47 results.append(RunProgram(program + " -t "+str(t) + " " + str(field)))
51 plot("set xlabel \"steps\"")
52 plot("set ylabel \"real time (s)\"")
53 plot("set title \"Time .vs. Steps Computed\"")
54 plot("set key outside right")
58 fields = map(int, os.listdir("fields"))
59 fields.sort(key = lambda e : e)
66 data[p] = RunForSteps(programs[p], "fields/"+str(n), 200)
69 #print(str(data.items()));
70 for d in sorted(data.items(), key = lambda e : e[1][len(e[1])-1][1]):
72 plot.replot(Gnuplot.Data(d[1], title=str(d[0])+":"+str(n), with_="lp")) #linecolor "+str(fields.index(n))))
74 #print(str(data.items()))
77 #for p in sorted(data.items(), key = lambda e : e[1][0][len(e[1][0])-1][1]):
78 # print(str(p[0])+":"+str(n)+"\t"+str(p[1][0][len(p[1][0])-1][1]))
83 if __name__ == "__main__":
84 sys.exit(main(sys.argv))