summaryrefslogtreecommitdiff
path: root/benchmark/bm_registry.py
blob: da7efe4d7ea415537652a255ffaf6356bbc81e9a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# benchmark registry

import os

def tokwargs(**kwargs): return kwargs

INSTALL_PREFIX = '/opt/usr'

DURATION = '1.3' #seconds

GRAS_ENV = {
    'PATH': os.path.join(INSTALL_PREFIX, 'gras/bin:$PATH:%s'%os.getenv('PATH')),
    'LD_LIBRARY_PATH': os.path.join(INSTALL_PREFIX, 'gras/lib:%s'%os.getenv('LD_LIBRARY_PATH')),
    'PYTHONPATH': os.path.join(INSTALL_PREFIX, 'gras/lib/python2.7/dist-packages:%s'%os.getenv('PYTHONPATH')),
}

GR_ENV = {
    'PATH': os.path.join(INSTALL_PREFIX, 'gr/bin:$PATH:%s'%os.getenv('PATH')),
    'LD_LIBRARY_PATH': os.path.join(INSTALL_PREFIX, 'gr/lib:%s'%os.getenv('LD_LIBRARY_PATH')),
    'PYTHONPATH': os.path.join(INSTALL_PREFIX, 'gr/lib/python2.7/dist-packages:%s'%os.getenv('PYTHONPATH')),
}

BENCHMARK_LINEAR_CHAIN = tokwargs(
    wat='Benchmark the schedulers with linear chain topology',
    moar='''\
- Topology is a linear chain of one input/one output blocks.
- GRAS will use only the buffer pool allocator,
and every work will fully consume available buffers.''',
    tests = [
        tokwargs(wat='GRAS',     args=['tb_linear_chain.py', DURATION], env=GRAS_ENV, expand=True),
        tokwargs(wat='GRSS',     args=['tb_linear_chain.py', DURATION], env=GR_ENV),
    ],
)

BENCHMARK_COMBINER_ARRAY = tokwargs(
    wat='Benchmark the schedulers with combiner array topology',
    moar='''\
- Topology is a tower of two input math blocks.
- GRAS will use only the buffer pool allocator,
and every work will fully consume available buffers.''',
    tests = [
        tokwargs(wat='GRAS',     args=['tb_combiner_array.py', DURATION], env=GRAS_ENV, expand=True),
        tokwargs(wat='GRSS',     args=['tb_combiner_array.py', DURATION], env=GR_ENV),
    ],
)

BENCHMARK_MANY_RATE_BLOCKS = tokwargs(
    wat='Benchmark the schedulers with many rate changing blocks',
    moar='''\
- Compare simultaneous changing ratio blocks in each scheduler.
- 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, expand=True),
        tokwargs(wat='GRSS',     args=['tb_many_rate_changes.py', '--dur', DURATION], env=GR_ENV),
    ],
)

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.''',
    tests = [
        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_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\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),
    ],
)

BENCHMARK_DELAY_BLOCKS = tokwargs(
    wat='Benchmark GrExtras vs gr-core delay block',
    moar='''\
- Compare delay block implementations using GRAS.
- The GrExtras implementation uses zero-copy.''',
    tests = [
        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_LINEAR_CHAIN,
    BENCHMARK_COMBINER_ARRAY,
    BENCHMARK_MANY_RATE_BLOCKS,
    BENCHMARK_DFIR_BLOCK,
    BENCHMARK_RESAMP_BLOCK,
    BENCHMARK_ADD_OPS,
    BENCHMARK_MULT_OPS,
    BENCHMARK_DELAY_BLOCKS,
)