summaryrefslogtreecommitdiff
path: root/gnuradio-examples/python/mp-sched/run_synthetic.py
diff options
context:
space:
mode:
authoreb2008-08-19 23:09:56 +0000
committereb2008-08-19 23:09:56 +0000
commit2c8ea58e4d76f54c98d71d3fcc64bc29da490908 (patch)
tree2d5021474a22fcea2425903bdc288e1405701f7a /gnuradio-examples/python/mp-sched/run_synthetic.py
parent6039ba34aee72974b0eacc9408627a0fa038dc81 (diff)
downloadgnuradio-2c8ea58e4d76f54c98d71d3fcc64bc29da490908.tar.gz
gnuradio-2c8ea58e4d76f54c98d71d3fcc64bc29da490908.tar.bz2
gnuradio-2c8ea58e4d76f54c98d71d3fcc64bc29da490908.zip
Merged features/mp-sched -r8915:9335 into the trunk. The trunk now
contains the SMP aware scheduler. This changeset introduces a dependency on boost 1.35 or later. See source:gnuradio/trunk/README.building-boost for additional info. git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@9336 221aa14e-8319-0410-a670-987f0aec2ac5
Diffstat (limited to 'gnuradio-examples/python/mp-sched/run_synthetic.py')
-rwxr-xr-xgnuradio-examples/python/mp-sched/run_synthetic.py101
1 files changed, 101 insertions, 0 deletions
diff --git a/gnuradio-examples/python/mp-sched/run_synthetic.py b/gnuradio-examples/python/mp-sched/run_synthetic.py
new file mode 100755
index 000000000..565e6c5c7
--- /dev/null
+++ b/gnuradio-examples/python/mp-sched/run_synthetic.py
@@ -0,0 +1,101 @@
+#!/usr/bin/env python
+#
+# Copyright 2008 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+#
+
+"""
+Run synthetic.py for npipes in [1,16], nstages in [1,16]
+"""
+
+import re
+import sys
+import os
+import tempfile
+from optparse import OptionParser
+
+
+def write_shell_script(f, data_filename, description, ncores, gflops, max_pipes_and_stages):
+ """
+ f is the file to write the script to
+ data_filename is the where the data ends up
+ description describes the machine
+ ncores is the number of cores (used to size the workload)
+ gflops is the estimated GFLOPS per core (used to size the workload)
+ """
+
+ f.write("#!/bin/sh\n")
+ f.write("(\n")
+ if description:
+ f.write("echo '#D %s'\n" % (description,))
+
+ for npipes in range(1, max_pipes_and_stages + 1):
+ for nstages in range(1, max_pipes_and_stages + 1):
+ # We'd like each run of synthetic to take ~10 seconds
+ desired_time_per_run = 10
+ est_gflops_avail = min(nstages * npipes, ncores) * gflops
+ nsamples = (est_gflops_avail * desired_time_per_run)/(512.0 * nstages * npipes)
+ nsamples = int(nsamples * 1e9)
+
+ cmd = "./synthetic.py -m -s %d -p %d -N %d\n" % (nstages, npipes, nsamples)
+ f.write(cmd)
+ f.write('if test $? -ge 128; then exit 128; fi\n')
+
+ f.write(") 2>&1 | grep --line-buffered -v '^>>>' | tee %s\n" % (data_filename,))
+ f.flush()
+
+
+
+def main():
+ description = """%prog gathers multiprocessor scaling data using the ./synthetic.py benchmark.
+All combinations of npipes and nstages between 1 and --max-pipes-and-stages are tried.
+The -n and -f options provides hints used to size the workload. We'd like each run
+of synthetic to take about 10 seconds. For the full 16x16 case this results in a
+total runtime of about 43 minutes, assuming that your values for -n and -f are reasonable.
+For x86 machines, assume 3 FLOPS per processor Hz. E.g., 3 GHz machine -> 9 GFLOPS.
+plot_flops.py will make pretty graphs from the output data generated by %prog.
+"""
+ usage = "usage: %prog [options] output.dat"
+ parser = OptionParser(usage=usage, description=description)
+ parser.add_option("-d", "--description", metavar="DESC",
+ help="machine description, e.g., \"Dual quad-core Xeon 3 GHz\"", default=None)
+ parser.add_option("-n", "--ncores", type="int", default=1,
+ help="number of processor cores [default=%default]")
+ parser.add_option("-g", "--gflops", metavar="GFLOPS", type="float", default=3.0,
+ help="estimated GFLOPS per core [default=%default]")
+ parser.add_option("-m", "--max-pipes-and-stages", metavar="MAX", type="int", default=16,
+ help="maximum number of pipes and stages to use [default=%default]")
+ (options, args) = parser.parse_args()
+ if len(args) != 1:
+ parser.print_help()
+ raise SystemExit, 1
+
+ output_filename = args[0]
+
+ shell = os.popen("/bin/sh", "w")
+
+ write_shell_script(shell,
+ output_filename,
+ options.description,
+ options.ncores,
+ options.gflops,
+ options.max_pipes_and_stages)
+
+if __name__ == '__main__':
+ main()
+