Test scaling.py
From Biowerkzeug Wiki
Python script that uses calc_testjobs_linux.sh to benchmark scaling using the walp_octane_NPT_sp_MD test case. See Talk:Performance#Scaling for details.
#!/usr/bin/env python # $Id: test_scaling.py 2533 2008-12-07 15:11:10Z www-data $ # Testing scaling of hippo # Copyright (c) 2008 Biowerkzeug # Oliver Beckstein <orbeckst@gmail.com> from subprocess import Popen,PIPE import sys,re calc_test_jobs = '/home/oliver/Library/Hippo/Benchmark/calc_testjobs_linux.sh' hippo_test_case = 'walp_octane_NPT_sp_MD' filename = "scaling.xvg" figname = "scaling.png" try: maxslots = int(sys.argv[1]) except: print "usage: %s NSLOTS" % sys.argv[0] sys.exit(1) slotrange = (1,maxslots+1) # <--- 1-4 !! benchmark_pattern = re.compile(r'BENCHMARK:\s*(\w+)\s+(?P<NUMTHREADS>[0-9]+)\s+(?P<T_SECONDS>[0-9.]+)') runtime = {} out = open(filename,'w') out.write("# scaling for Hippo\n# numthreads walltime/s scaling\n") for NSLOTS in xrange(*slotrange): print "-- running NSLOTS = %(NSLOTS)d" % vars() p1 = Popen([calc_test_jobs, '-n', str(NSLOTS), hippo_test_case],stdout=PIPE) p2 = Popen(['grep','BENCHMARK:'],stdin=p1.stdout,stdout=PIPE) output = p2.communicate()[0] m = benchmark_pattern.match(output) print "output: ",output, if not m: print "ERROR: no benchmark data found" continue numthreads = int(m.group('NUMTHREADS')) walltime = float(m.group('T_SECONDS')) runtime[numthreads] = walltime scaling = walltime/runtime[1] # runtime[1] is known after the first iteration! out.write("%(numthreads)d %(walltime)f %(scaling)f\n" % vars()) out.close() # Analysis import numpy import pylab N = numpy.sort(runtime.keys()) T = numpy.array([runtime[n] for n in N],dtype=float) S = T[0]/T pylab.clf() pylab.subplot(211) pylab.title('Hippo test case: '+hippo_test_case) pylab.xlabel('cpus') pylab.ylabel('walltime/s') pylab.plot(N,T,'ro-') pylab.subplot(212) pylab.xlabel('cpus') pylab.ylabel('scaling') pylab.plot(N,S,'ro-') pylab.plot([N[0],N[-1]], [1,N[-1]], 'k--') pylab.savefig(figname) print "Saved figure "+figname