#!/usr/bin/env python3 # -*- coding: utf-8 -*- import os, sys sys.path.append(os.path.abspath(os.path.dirname(os.path.abspath(__file__))+"/../scripts")) import fileinput import numpy as np import matplotlib as mpl import re show = False if len(sys.argv) > 1 and sys.argv[1] == 'show': show = True if not show: mpl.use('pgf') import matplotlib.pyplot as plt from common import set_size, config_plt, get_colors config_plt() def loadData(fn): content = [] with open(fn) as f: content = f.readlines() zipcontent = zip(content[0::3], content[1::3], content[2::3]) values = {} for lconf, ltime, lresult in zipcontent: match = re.search(r"f: [a-z_]*_([a-z]+).*grasp: ([0-9]+), outer: ([0-9]+), inner: ([0-9]+).*threads: (\d+)", lconf) if match: method = match.group(1) grasp_n = int(match.group(2)) outer = int(match.group(3)) inner = int(match.group(4)) ncores = int(match.group(5)) match = re.search(r"user ([^ ]+) sys (.*)$", ltime) if match: user = float(match.group(1)) sys = float(match.group(2)) if method == 'firstlevel': time = (user+sys) / min(ncores, grasp_n) else: time = (user+sys) / ncores if not ncores in values: values[ncores] = [] values[ncores].append(time); return values def exportLegend(legend, filename): fig = legend.figure fig.canvas.draw() fig.savefig(filename, format='pdf', bbox_inches=legend.get_window_extent().transformed(fig.dpi_scale_trans.inverted())) def figSeq(title, xlabel, rotation, output, datasrcs, scale, error=False): fig = plt.figure() plt.title(title) plt.xlabel(xlabel) plt.ylabel(u"time (s)") nd = len(datasrcs) labels = [datasrc[1] for datasrc in datasrcs] plt.xticks(range(len(labels)), labels, rotation=rotation, ha='right') width = 0.5 pos = .5-.5*nd x = 0 for f, label in datasrcs: values = loadData(f) barcolor, errcolor = get_colors(labels, label) for k, a in values.items(): m = np.mean(a) s = 2.5758 * np.std(a) / np.sqrt(len(a)) # confiance 99 % plt.bar(x, m, width=width, color=barcolor, label=label) if error: plt.errorbar(x, m, s, elinewidth=2, capsize=4, ecolor=errcolor) label='' pos = pos + 1 x = x+1 fig.set_size_inches(set_size(455.24408, scale)) if not show: fig.savefig(output, format='pdf', bbox_inches='tight') return plt def figCores(title, xlabel, xticks, output, datasrcs, scale, ycor=np.NaN, legendfile='', error=False): fig = plt.figure() plt.title(title) plt.xlabel(xlabel) plt.ylabel(u"time (s)") plt.xticks(xticks) if not np.isnan(ycor): plt.gca().yaxis.set_label_coords(ycor, .5) nd = len(datasrcs) labels = [datasrc[1] for datasrc in datasrcs] width = 0.16 pos = .5-.5*nd for f, label in datasrcs: values = loadData(f) barcolor, errcolor = get_colors(labels, label) for k, a in values.items(): x = int(k) m = np.mean(a) s = 2.5758 * np.std(a) / np.sqrt(len(a)) # confiance 99 % x = x + pos*width plt.bar(x, m, width=width, color=barcolor, label=label) if error: plt.errorbar(x, m, s, elinewidth=.6, capsize=.6, ecolor=errcolor) label='' pos = pos + 1 fig.set_size_inches(set_size(455.24408, scale)) bbox = (.9, .88) if legendfile != '': # isolation of the legend bbox = (2, 2) # legend = fig.legend(bbox_to_anchor=bbox) # if legendfile != '': # if legendfile != 'x': # exportLegend(legend, legendfile) # legend.remove() if not show: fig.savefig(output, format='pdf', bbox_inches='tight') return plt def figCoresSpeedup(title, xlabel, xticks, output, basetime, datasrcs, scale, legendfile=''): fig = plt.figure() plt.title(title) plt.xlabel(xlabel) plt.ylabel(u"speed up") plt.xticks(xticks) plt.gca().yaxis.set_label_coords(-.105, .5) nd = len(datasrcs) labels = [datasrc[1] for datasrc in datasrcs] width = 0.25 pos = .5-.5*nd for f, label in datasrcs: values = loadData(f) barcolor, errcolor = get_colors(labels, label) if 1 in values: values.pop(1) for k, a in values.items(): x = int(k) m = basetime/np.mean(a) x = x + pos*width plt.bar(x, m, width=width, color=barcolor, label=label) label='' pos = pos + 1 fig.set_size_inches(set_size(455.24408, scale)) bbox = (.485, .88) if legendfile != '': # isolation of the legend bbox = (2, 2) # legend = fig.legend(bbox_to_anchor=bbox) # if legendfile != '': # if legendfile != 'x': # exportLegend(legend, legendfile) # legend.remove() if not show: fig.savefig(output, format='pdf', bbox_inches='tight') return plt def figSizeSpeedup(title, xlabel, xticks, output, basetimes, cores, datasrcs, scale, legendfile=''): fig = plt.figure() plt.title(title) plt.xlabel(xlabel) plt.ylabel(u"speed up") plt.xticks(xticks) plt.gca().yaxis.set_label_coords(-.11, .5) nd = len(datasrcs) labels = [datasrc[1] for datasrc in datasrcs] width = 0.5 pos = .5-.5*nd for fs, label in datasrcs: barcolor, errcolor = get_colors(labels, label) xi = 0 for f in fs: valuesAllCores = loadData(f) values = valuesAllCores[cores] x = xticks[xi] m = basetimes[xi]/np.mean(values) x = x + pos*width plt.bar(x, m, width=width, color=barcolor, label=label) label='' xi = xi + 1 pos = pos + 1 fig.set_size_inches(set_size(455.24408, scale)) bbox = (1.31, .88) if legendfile != '': # isolation of the legend bbox = (2, 2) legend = fig.legend(bbox_to_anchor=bbox) if legendfile != '': if legendfile != 'x': exportLegend(legend, legendfile) legend.remove() if not show: fig.savefig(output, format='pdf', bbox_inches='tight') return plt # script plts = [] for dataset in ['dj38', 'qa194']: plt = figSeq(u"", u"method", 45, "plots/rt_graspels_"+dataset+"_24_20_20_seq.pdf", [ ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_hw_seq_v', 'hw_seq'], ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_sk_seq', 'sk_seq'], ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_hw_par_v', 'hw_par'], ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_sk_par_firstlevel', 'sk_firstlevel'], ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_sk_par_staticpool', 'sk_staticpool'], ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_sk_par_dynamicpool', 'sk_dynamicpool'], ['data_graspels/seq/rt_seq_'+dataset+'_24_20_20_sk_par_thread', 'sk_thread'], ], scale=.8, error=True ) plts.append(plt) for dataset in ['dj38', 'qa194']: plt = figCores(u"", u"number of cores", [2, 4, 6, 8, 10, 12, 14, 16, 18], "plots/rt_graspels_"+dataset+"_24_20_20_par.pdf", [ ['data_graspels/var_cores/rt_cores_'+dataset+'_24_20_20_hw_par_v', 'hw_par'], ['data_graspels/var_cores/rt_cores_'+dataset+'_24_20_20_sk_par_firstlevel', 'sk_firstlevel'], ['data_graspels/var_cores/rt_cores_'+dataset+'_24_20_20_sk_par_staticpool', 'sk_staticpool'], ['data_graspels/var_cores/rt_cores_'+dataset+'_24_20_20_sk_par_dynamicpool', 'sk_dynamicpool'], ['data_graspels/var_cores/rt_cores_'+dataset+'_24_20_20_sk_par_thread', 'sk_thread'], ], scale=.8, error=False ) plts.append(plt) legendfile = 'plots/rt_graspels_qa194_var_grasp_par_legend.pdf' for grasp_n in range(4, 21, 4): plt = figCores(u"", u"number of cores", [2, 4, 6, 8, 10, 12, 14, 16, 18], "plots/rt_graspels_qa194_v"+str(grasp_n)+"_20_20_par.pdf", [ ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_hw_par_v', 'hw_par'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_firstlevel', 'sk_firstlevel'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_staticpool', 'sk_staticpool'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_dynamicpool', 'sk_dynamicpool'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_thread', 'sk_thread'], ], scale=.48, ycor=-.16, legendfile=legendfile, error=False ) plts.append(plt) legendfile = 'x' # legendfile = 'plots/rt_graspels_qa194_var_els_iter_max_par_legend.pdf' # for els_iter_max in [1, 2, 4, 8, 12, 16, 20, 30, 40, 50]: # plt = figCores(u"", u"number of cores", [2, 4, 6, 8, 10, 12, 14, 16, 18], # "plots/rt_graspels_qa194_4_v"+str(els_iter_max)+"_20_par.pdf", [ # ['data_graspels/var_els/rt_cores_qa194_4_'+str(els_iter_max)+'_20_hw_par_v', 'hw_par'], # ['data_graspels/var_els/rt_cores_qa194_4_'+str(els_iter_max)+'_20_sk_par_firstlevel', 'sk_firstlevel'], # ['data_graspels/var_els/rt_cores_qa194_4_'+str(els_iter_max)+'_20_sk_par_staticpool', 'sk_staticpool'], # ['data_graspels/var_els/rt_cores_qa194_4_'+str(els_iter_max)+'_20_sk_par_dynamicpool', 'sk_dynamicpool'], # ['data_graspels/var_els/rt_cores_qa194_4_'+str(els_iter_max)+'_20_sk_par_thread', 'sk_thread'], # ], # scale=.48, # ycor=-.13, # legendfile=legendfile, # error=True # ) # plts.append(plt) # legendfile = 'x' for grasp_n in range(4, 21, 4): values = loadData('data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_hw_par_v') basetime = np.mean(values[1]) plt = figCoresSpeedup(u"", u"number of cores", [2, 4, 6, 8, 10, 12, 14, 16, 18], "plots/rt_graspels_qa194_"+str(grasp_n)+"_20_20_speedup.pdf", basetime, [ ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_hw_par_v', 'hw_par'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_firstlevel', 'sk_firstlevel'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_staticpool', 'sk_staticpool'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_dynamicpool', 'sk_dynamicpool'], ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_thread', 'sk_thread'], ], scale=.8 ) plts.append(plt) # for cores in [1, 2, 4, 6, 8, 10, 12, 14, 16, 18]: # # for cores in [16]: # basetimes = [] # for grasp_n in range(4, 21, 4): # values = loadData('data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_hw_par_v') # basetimes.append(np.mean(values[1])) # values = loadData('data_graspels/var_cores/rt_cores_qa194_24_20_20_hw_par_v') # basetimes.append(np.mean(values[1])) # # hw_par = ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_hw_par_v' for grasp_n in range(4, 21, 4)] # hw_par.append('data_graspels/var_cores/rt_cores_qa194_24_20_20_hw_par_v') # firstlevel = ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_firstlevel' for grasp_n in range(4, 21, 4)] # firstlevel.append('data_graspels/var_cores/rt_cores_qa194_24_20_20_sk_par_firstlevel') # staticpool = ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_staticpool' for grasp_n in range(4, 21, 4)] # staticpool.append('data_graspels/var_cores/rt_cores_qa194_24_20_20_sk_par_staticpool') # dynamicpool = ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_dynamicpool' for grasp_n in range(4, 21, 4)] # dynamicpool.append('data_graspels/var_cores/rt_cores_qa194_24_20_20_sk_par_dynamicpool') # thread = ['data_graspels/var_grasp/rt_cores_qa194_'+str(grasp_n)+'_20_20_sk_par_thread' for grasp_n in range(4, 21, 4)] # thread.append('data_graspels/var_cores/rt_cores_qa194_24_20_20_sk_par_thread') # # plt = figSizeSpeedup(u"", u"$N$", [4, 8, 12, 16, 20, 24], # "plots/rt_graspels_qa194_all_20_20_speedup_"+str(cores)+".pdf", basetimes, cores, [ # [hw_par, 'hw_par'], # [firstlevel, 'sk_firstlevel'], # [staticpool, 'sk_staticpool'], # [dynamicpool, 'sk_dynamicpool'], # [thread, 'sk_thread'], # ], # scale=.7 # ) # plts.append(plt) if show: for plt in plts: plt.show()