~linaro-toolchain-dev/cortex-strings/trunk

29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
1
#!/usr/bin/env python
2
30 by Michael Hope
Added more ranges. changed everything to MB/s. Account for the loop overhead.
3
"""Plot the performance of different variants of the string routines
4
for one size.
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
5
"""
6
7
import libplot
8
9
import pylab
10
11
30 by Michael Hope
Added more ranges. changed everything to MB/s. Account for the loop overhead.
12
def plot(records, bytes):
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
13
    records = [x for x in records if x.bytes==bytes]
14
33 by Michael Hope
Various updates to the benchmark plotting scripts.
15
    variants = libplot.unique(records, 'variant', prefer='this')
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
16
    functions = libplot.unique(records, 'function')
17
18
    X = pylab.arange(len(functions))
44 by Michael Hope
Various plotting updates.
19
    width = 1.0/(len(variants)+1)
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
20
21
    colours = iter('bgrcmyk')
22
49 by Michael Hope
Benchmark more sizes and alignments. Make the figures bigger to make the text smaller. Put the 'this' results first.
23
    pylab.figure(1).set_size_inches((16, 12))
33 by Michael Hope
Various updates to the benchmark plotting scripts.
24
    pylab.clf()
25
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
26
    for i, variant in enumerate(variants):
27
        heights = []
28
29
        for function in functions:
113 by Will Newton
Allow aligning source and destination buffers separately.
30
            matches = [x for x in records if x.variant==variant and x.function==function and x.src_alignment==8]
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
31
32
            if matches:
115 by Will Newton
Support multiple runs of each benchmark.
33
                vals = [match.bytes*match.loops/match.elapsed/(1024*1024) for
34
                        match in matches]
35
                mean = sum(vals)/len(vals)
36
                heights.append(mean)
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
37
            else:
38
                heights.append(0)
39
40
        pylab.bar(X+i*width, heights, width, color=colours.next(), label=variant)
41
42
    axes = pylab.axes()
43
    axes.set_xticklabels(functions)
44
    axes.set_xticks(X + 0.5)
45
30 by Michael Hope
Added more ranges. changed everything to MB/s. Account for the loop overhead.
46
    pylab.title('Performance of different variants for %d byte blocks' % bytes)
47
    pylab.ylabel('Rate (MB/s)')
49 by Michael Hope
Benchmark more sizes and alignments. Make the figures bigger to make the text smaller. Put the 'this' results first.
48
    pylab.legend(loc='upper left', ncol=3)
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
49
    pylab.grid()
49 by Michael Hope
Benchmark more sizes and alignments. Make the figures bigger to make the text smaller. Put the 'this' results first.
50
    pylab.savefig('top-%06d.png' % bytes, dpi=72)
30 by Michael Hope
Added more ranges. changed everything to MB/s. Account for the loop overhead.
51
52
def main():
53
    records = libplot.parse()
33 by Michael Hope
Various updates to the benchmark plotting scripts.
54
49 by Michael Hope
Benchmark more sizes and alignments. Make the figures bigger to make the text smaller. Put the 'this' results first.
55
    for bytes in libplot.unique(records, 'bytes'):
33 by Michael Hope
Various updates to the benchmark plotting scripts.
56
        plot(records, bytes)
57
29 by Michael Hope
Added some scripts to run the benchmarks and to plot the results.
58
    pylab.show()
59
60
if __name__ == '__main__':
61
    main()