diff options
author | Josh Blum | 2013-04-24 20:11:19 -0700 |
---|---|---|
committer | Josh Blum | 2013-04-24 20:11:19 -0700 |
commit | b0af51abf8681922d86ea8621a73a383fa7c50ba (patch) | |
tree | d0b3bb04d918a626a6d9e5425a594955cbf49390 /benchmark | |
parent | cf930158eabb585552c9b2691370c5ceb7fc6d76 (diff) | |
download | sandhi-b0af51abf8681922d86ea8621a73a383fa7c50ba.tar.gz sandhi-b0af51abf8681922d86ea8621a73a383fa7c50ba.tar.bz2 sandhi-b0af51abf8681922d86ea8621a73a383fa7c50ba.zip |
gras: work on benchmarks w/ theron6 support
Diffstat (limited to 'benchmark')
-rw-r--r-- | benchmark/bm_registry.py | 74 | ||||
-rw-r--r-- | benchmark/run_benchmarks.py | 23 |
2 files changed, 68 insertions, 29 deletions
diff --git a/benchmark/bm_registry.py b/benchmark/bm_registry.py index 7c9bb1c..af79a50 100644 --- a/benchmark/bm_registry.py +++ b/benchmark/bm_registry.py @@ -6,7 +6,7 @@ def tokwargs(**kwargs): return kwargs INSTALL_PREFIX = '/opt/usr' -DURATION = '1.7' #seconds +DURATION = '1.3' #seconds GRAS_ENV = { 'PATH': os.path.join(INSTALL_PREFIX, 'gras/bin:$PATH:%s'%os.getenv('PATH')), @@ -27,8 +27,8 @@ BENCHMARK_MANY_11_BLOCKS = tokwargs( - GRAS will use only the buffer pool allocator, and every work will fully consume available buffers.''', tests = [ - tokwargs(wat='GRAS', args=['tb_many_1_to_1_blocks.py', DURATION], env=GRAS_ENV), - tokwargs(wat='GR', args=['tb_many_1_to_1_blocks.py', DURATION], env=GR_ENV), + tokwargs(wat='GRAS', args=['tb_many_1_to_1_blocks.py', DURATION], env=GRAS_ENV, expand=True), + tokwargs(wat='GRSS', args=['tb_many_1_to_1_blocks.py', DURATION], env=GR_ENV), ], ) @@ -39,40 +39,58 @@ BENCHMARK_MANY_RATE_BLOCKS = tokwargs( - GRAS will use only the buffer pool allocator, and every work will fully consume available buffers.''', tests = [ - tokwargs(wat='GRAS', args=['tb_many_rate_changes.py', '--dur', DURATION], env=GRAS_ENV), - tokwargs(wat='GR', args=['tb_many_rate_changes.py', '--dur', DURATION], env=GR_ENV), + tokwargs(wat='GRAS', args=['tb_many_rate_changes.py', '--dur', DURATION], env=GRAS_ENV, expand=True), + tokwargs(wat='GRSS', args=['tb_many_rate_changes.py', '--dur', DURATION], env=GR_ENV), ], ) -BENCHMARK_FILTER_BLOCK = tokwargs( - wat='Benchmark the schedulers with a filter block', +BENCHMARK_DFIR_BLOCK = tokwargs( + wat='Benchmark the schedulers with a FIR block', moar='''\ - Compare filter blocks in each scheduler. -- Shows both schedulers using circular buffer. -- The decimating FIR filter is compared. -- The rational resampler filter is compared.''', +- Shows both schedulers using circular buffer.''', tests = [ - tokwargs(wat='GRAS decim FIR', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'dfir'], env=GRAS_ENV), - tokwargs(wat='GR decim FIR', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'dfir'], env=GR_ENV), - tokwargs(wat='GRAS resampler', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'resamp'], env=GRAS_ENV), - tokwargs(wat='GR resampler', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'resamp'], env=GR_ENV), + tokwargs(wat='GRAS', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'dfir'], env=GRAS_ENV, expand=True), + tokwargs(wat='GRSS', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'dfir'], env=GR_ENV), ], ) -BENCHMARK_MATH_OPS = tokwargs( - wat='Benchmark GrExtras vs gr-blocks math blocks', +BENCHMARK_RESAMP_BLOCK = tokwargs( + wat='Benchmark the schedulers with a resampler block', + moar='''\ +- Compare filter blocks in each scheduler. +- Shows both schedulers using circular buffer.''', + tests = [ + tokwargs(wat='GRAS', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'resamp'], env=GRAS_ENV, expand=True), + tokwargs(wat='GRSS', args=['tb_filter_block.py', '--dur', DURATION, '--which', 'resamp'], env=GR_ENV), + ], +) + +BENCHMARK_ADD_OPS = tokwargs( + wat='Benchmark GrExtras vs gr-blocks adder blocks', + moar='''\ +- Compare math block implementations using GRAS. +- 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\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'extras_add'], env=GRAS_ENV, expand=True), + tokwargs(wat='gr-blocks\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'blocks_add'], env=GRAS_ENV, expand=True), + tokwargs(wat='gr-blocks\n(GRSS)', args=['tb_grextras_math.py', DURATION, 'blocks_add'], env=GR_ENV), + ], +) + +BENCHMARK_MULT_OPS = tokwargs( + wat='Benchmark GrExtras vs gr-blocks multiplier blocks', moar='''\ - Compare math block implementations using GRAS. - 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 Add\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'extras_add'], env=GRAS_ENV), - tokwargs(wat='gr-blocks Add\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'blocks_add'], env=GRAS_ENV), - tokwargs(wat='gr-blocks Add\n(GR)', args=['tb_grextras_math.py', DURATION, 'blocks_add'], env=GR_ENV), - tokwargs(wat='GrExtras Mult\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'extras_mult'], env=GRAS_ENV), - tokwargs(wat='gr-blocks Mult\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'blocks_mult'], env=GRAS_ENV), - tokwargs(wat='gr-blocks Mult\n(GR)', args=['tb_grextras_math.py', DURATION, 'blocks_mult'], env=GR_ENV), + tokwargs(wat='GrExtras\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'extras_mult'], env=GRAS_ENV, expand=True), + tokwargs(wat='gr-blocks\n(GRAS)', args=['tb_grextras_math.py', DURATION, 'blocks_mult'], env=GRAS_ENV, expand=True), + tokwargs(wat='gr-blocks\n(GRSS)', args=['tb_grextras_math.py', DURATION, 'blocks_mult'], env=GR_ENV), ], ) @@ -82,16 +100,18 @@ BENCHMARK_DELAY_BLOCKS = tokwargs( - Compare delay block implementations using GRAS. - The GrExtras implementation uses zero-copy.''', tests = [ - tokwargs(wat='GrExtras Delay\n(GRAS)', args=['tb_grextras_delay.py', DURATION, 'extras_delay'], env=GRAS_ENV), - tokwargs(wat='gr-core Delay\n(GRAS)', args=['tb_grextras_delay.py', DURATION, 'core_delay'], env=GRAS_ENV), - tokwargs(wat='gr-core Delay\n(GR)', args=['tb_grextras_delay.py', DURATION, 'core_delay'], env=GR_ENV), + tokwargs(wat='GrExtras\n(GRAS)', args=['tb_grextras_delay.py', DURATION, 'extras_delay'], env=GRAS_ENV, expand=True), + tokwargs(wat='gr-core\n(GRAS)', args=['tb_grextras_delay.py', DURATION, 'core_delay'], env=GRAS_ENV, expand=True), + tokwargs(wat='gr-core\n(GRSS)', args=['tb_grextras_delay.py', DURATION, 'core_delay'], env=GR_ENV), ], ) BENCHMARKS = ( BENCHMARK_MANY_11_BLOCKS, BENCHMARK_MANY_RATE_BLOCKS, - BENCHMARK_FILTER_BLOCK, - BENCHMARK_MATH_OPS, + BENCHMARK_DFIR_BLOCK, + BENCHMARK_RESAMP_BLOCK, + BENCHMARK_ADD_OPS, + BENCHMARK_MULT_OPS, BENCHMARK_DELAY_BLOCKS, ) diff --git a/benchmark/run_benchmarks.py b/benchmark/run_benchmarks.py index 8cb3503..779aa6a 100644 --- a/benchmark/run_benchmarks.py +++ b/benchmark/run_benchmarks.py @@ -15,7 +15,7 @@ cpu_count = multiprocessing.cpu_count() from bm_registry import BENCHMARKS -NUM_RUNS_PER_TEST = 5 +NUM_RUNS_PER_TEST = 3 BAD_BOOST_KILL_DURATION = 5.0 #seconds @@ -45,6 +45,25 @@ def run_a_single_one(args, env): raise Exception, 'no result found!' #return t1-t0 +def expand_tests(bm): + for run in bm['tests']: + if run.has_key('expand') and run['expand']: + import copy + new_run = copy.deepcopy(run) + new_run['wat'] += '\n(Block)' + new_run['env']['GRAS_YIELD'] = 'BLOCKING' + yield new_run + new_run = copy.deepcopy(run) + new_run['wat'] += '\n(Spin)' + new_run['env']['GRAS_YIELD'] = 'STRONG' + yield new_run + new_run = copy.deepcopy(run) + new_run['wat'] += '\n(TPB)' + new_run['env']['GRAS_YIELD'] = 'BLOCKING' + new_run['env']['GRAS_TPP'] = '1' + yield new_run + else: yield run + def do_a_benchmark(bm): title = bm['wat'] print '#'*(len(title)+25) @@ -53,7 +72,7 @@ def do_a_benchmark(bm): result_means = list() result_stddevs = list() test_names = list() - for run in bm['tests']: + for run in expand_tests(bm): test_name = run['wat'] print '-'*(len(test_name)+25) print '-- running test:', test_name.replace('\n', ' ') |