summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Blum2012-12-09 13:35:23 -0800
committerJosh Blum2012-12-28 12:29:01 -0600
commit02308d2f65f2b75b2d43db598739efd9c51851a6 (patch)
treed306889fc3e8e220bfe00a3a1397d6c340c398b9
parent449d485d9b8caeffb8fd6c7181fb47ec3cf33bc0 (diff)
downloadsandhi-02308d2f65f2b75b2d43db598739efd9c51851a6.tar.gz
sandhi-02308d2f65f2b75b2d43db598739efd9c51851a6.tar.bz2
sandhi-02308d2f65f2b75b2d43db598739efd9c51851a6.zip
work on benchmark stubs
-rw-r--r--benchmark/benchmark.py50
-rw-r--r--benchmark/bm_grextras_math.py29
2 files changed, 79 insertions, 0 deletions
diff --git a/benchmark/benchmark.py b/benchmark/benchmark.py
new file mode 100644
index 0000000..ad98284
--- /dev/null
+++ b/benchmark/benchmark.py
@@ -0,0 +1,50 @@
+import sys
+import os
+import time
+import subprocess
+import pylab as p
+
+__path__ = os.path.dirname(__file__)
+
+GRAS_ENV = {
+ 'PATH': os.path.join(os.getenv('HOME'), 'usr/gras/bin:$PATH:%s'%os.getenv('PATH')),
+ 'LD_LIBRARY_PATH': os.path.join(os.getenv('HOME'), 'usr/gras/lib:%s'%os.getenv('LD_LIBRARY_PATH')),
+ 'PYTHONPATH': os.path.join(os.getenv('HOME'), 'usr/gras/lib/python2.7/dist-packages:%s'%os.getenv('PYTHONPATH')),
+}
+
+def tokwargs(**kwargs):
+ return kwargs
+
+BENCHMARK_MATH_OPS = tokwargs(
+ wat='Benchmark GrExtras vs gr-blocks math blocks',
+ moar='''
+ All blocks are using vector optimization.
+ - GrExtras math blocks avoid an unnecessary memcpy.
+ - GrExtras math blocks enable automatic bufer in-placing.
+ ''',
+ tests = [
+ tokwargs(wat='GrExtras Adder', args=[sys.executable, os.path.join(__path__, 'bm_grextras_math.py'), '1e8', 'extras_add'], env=GRAS_ENV),
+ tokwargs(wat='gr-blocks Adder', args=[sys.executable, os.path.join(__path__, 'bm_grextras_math.py'), '1e8', 'blocks_add'], env=GRAS_ENV),
+ tokwargs(wat='GrExtras Multiplier', args=[sys.executable, os.path.join(__path__, 'bm_grextras_math.py'), '1e8', 'extras_mult'], env=GRAS_ENV),
+ tokwargs(wat='gr-blocks Multiplier', args=[sys.executable, os.path.join(__path__, 'bm_grextras_math.py'), '1e8', 'blocks_mult'], env=GRAS_ENV),
+ ],
+ to_result = lambda t: 1e8/t
+)
+
+def time_a_single_one(args, env):
+ t0 = time.time()
+ p = subprocess.Popen(args=args, env=env)
+ p.wait()
+ t1 = time.time()
+ return t1-t0
+
+def do_a_benchmark(bm):
+ results = list()
+ for run in bm['tests']:
+ #print run['env']
+ r = time_a_single_one(args=run['args'], env=run['env'])
+ results.append(bm['to_result'](r))
+ print results
+
+if __name__ == '__main__':
+ do_a_benchmark(BENCHMARK_MATH_OPS)
diff --git a/benchmark/bm_grextras_math.py b/benchmark/bm_grextras_math.py
new file mode 100644
index 0000000..e238472
--- /dev/null
+++ b/benchmark/bm_grextras_math.py
@@ -0,0 +1,29 @@
+import gras
+import grextras
+import gnuradio
+from gnuradio import gr
+from gnuradio import blocks as grblocks
+import sys
+
+if __name__ == '__main__':
+
+ num = long(float(sys.argv[1]))
+ what = sys.argv[2]
+
+ tb = gras.TopBlock()
+ src0 = gr.null_source(8)
+ src1 = gr.null_source(8)
+ sink = gr.null_sink(8)
+ head = gr.head(8, num)
+
+ if what == 'extras_add': math_op = grextras.Add.fc32_fc32()
+ if what == 'blocks_add': math_op = grblocks.add_cc()
+ if what == 'extras_mult': math_op = grextras.Multiply.fc32_fc32()
+ if what == 'blocks_mult': math_op = grblocks.multiply_cc()
+
+ tb.connect(src0, (math_op, 0))
+ tb.connect(src1, (math_op, 1))
+ tb.connect(math_op, head, sink)
+
+ tb.run()
+ tb.wait()