1*09a53ad8SAndrew Turner#!/usr/bin/env python 2*09a53ad8SAndrew Turner 3*09a53ad8SAndrew Turner"""Plot the performance of different variants of the string routines 4*09a53ad8SAndrew Turnerfor one size. 5*09a53ad8SAndrew Turner""" 6*09a53ad8SAndrew Turner 7*09a53ad8SAndrew Turnerimport libplot 8*09a53ad8SAndrew Turner 9*09a53ad8SAndrew Turnerimport pylab 10*09a53ad8SAndrew Turner 11*09a53ad8SAndrew Turner 12*09a53ad8SAndrew Turnerdef plot(records, bytes): 13*09a53ad8SAndrew Turner records = [x for x in records if x.bytes==bytes] 14*09a53ad8SAndrew Turner 15*09a53ad8SAndrew Turner variants = libplot.unique(records, 'variant', prefer='this') 16*09a53ad8SAndrew Turner functions = libplot.unique(records, 'function') 17*09a53ad8SAndrew Turner 18*09a53ad8SAndrew Turner X = pylab.arange(len(functions)) 19*09a53ad8SAndrew Turner width = 1.0/(len(variants)+1) 20*09a53ad8SAndrew Turner 21*09a53ad8SAndrew Turner colours = libplot.make_colours() 22*09a53ad8SAndrew Turner 23*09a53ad8SAndrew Turner pylab.figure(1).set_size_inches((16, 12)) 24*09a53ad8SAndrew Turner pylab.clf() 25*09a53ad8SAndrew Turner 26*09a53ad8SAndrew Turner for i, variant in enumerate(variants): 27*09a53ad8SAndrew Turner heights = [] 28*09a53ad8SAndrew Turner 29*09a53ad8SAndrew Turner for function in functions: 30*09a53ad8SAndrew Turner matches = [x for x in records if x.variant==variant and x.function==function and x.src_alignment==8] 31*09a53ad8SAndrew Turner 32*09a53ad8SAndrew Turner if matches: 33*09a53ad8SAndrew Turner vals = [match.bytes*match.loops/match.elapsed/(1024*1024) for 34*09a53ad8SAndrew Turner match in matches] 35*09a53ad8SAndrew Turner mean = sum(vals)/len(vals) 36*09a53ad8SAndrew Turner heights.append(mean) 37*09a53ad8SAndrew Turner else: 38*09a53ad8SAndrew Turner heights.append(0) 39*09a53ad8SAndrew Turner 40*09a53ad8SAndrew Turner pylab.bar(X+i*width, heights, width, color=colours.next(), label=variant) 41*09a53ad8SAndrew Turner 42*09a53ad8SAndrew Turner axes = pylab.axes() 43*09a53ad8SAndrew Turner axes.set_xticklabels(functions) 44*09a53ad8SAndrew Turner axes.set_xticks(X + 0.5) 45*09a53ad8SAndrew Turner 46*09a53ad8SAndrew Turner pylab.title('Performance of different variants for %d byte blocks' % bytes) 47*09a53ad8SAndrew Turner pylab.ylabel('Rate (MB/s)') 48*09a53ad8SAndrew Turner pylab.legend(loc='upper left', ncol=3) 49*09a53ad8SAndrew Turner pylab.grid() 50*09a53ad8SAndrew Turner pylab.savefig('top-%06d.png' % bytes, dpi=72) 51*09a53ad8SAndrew Turner 52*09a53ad8SAndrew Turnerdef main(): 53*09a53ad8SAndrew Turner records = libplot.parse() 54*09a53ad8SAndrew Turner 55*09a53ad8SAndrew Turner for bytes in libplot.unique(records, 'bytes'): 56*09a53ad8SAndrew Turner plot(records, bytes) 57*09a53ad8SAndrew Turner 58*09a53ad8SAndrew Turner pylab.show() 59*09a53ad8SAndrew Turner 60*09a53ad8SAndrew Turnerif __name__ == '__main__': 61*09a53ad8SAndrew Turner main() 62