122 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/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
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								show = len(sys.argv) > 1 and sys.argv[1] == 'show'
							 | 
						||
| 
								 | 
							
								if not show:
							 | 
						||
| 
								 | 
							
									mpl.use('pgf')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import matplotlib.pyplot as plt
							 | 
						||
| 
								 | 
							
								import matplotlib.lines as lines
							 | 
						||
| 
								 | 
							
								from common import set_size, config_plt, get_colors, fix_log_rects
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								config_plt()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def toFloat(s):
							 | 
						||
| 
								 | 
							
									return float(s.split(' ')[1].replace(',', '.'))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def loadData(fn):
							 | 
						||
| 
								 | 
							
									content = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									with open(fn) as f:
							 | 
						||
| 
								 | 
							
										content = f.readlines()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									values = {}
							 | 
						||
| 
								 | 
							
									for line in content:
							 | 
						||
| 
								 | 
							
										n, real, user, sys, _ = [x for x in line.split(':')]
							 | 
						||
| 
								 | 
							
										time = toFloat(user) + toFloat(sys)
							 | 
						||
| 
								 | 
							
										if not n in values:
							 | 
						||
| 
								 | 
							
											values[n] = []
							 | 
						||
| 
								 | 
							
										values[n].append(time);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if "5" in values:
							 | 
						||
| 
								 | 
							
										values.pop("5")
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return values
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def figCT(title, xlabel, xticks, output, datasrcs, legendOutside=False, error=False, log=False):
							 | 
						||
| 
								 | 
							
									fig = plt.figure()
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									plt.title(title)
							 | 
						||
| 
								 | 
							
									plt.xlabel(xlabel)
							 | 
						||
| 
								 | 
							
									plt.ylabel(u"temps (s)")
							 | 
						||
| 
								 | 
							
									plt.xticks(xticks)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									if log:
							 | 
						||
| 
								 | 
							
										plt.yscale('log')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									nd = len(datasrcs)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									width = 1.5
							 | 
						||
| 
								 | 
							
									pos = .5-.5*nd
							 | 
						||
| 
								 | 
							
									for f, label in datasrcs:
							 | 
						||
| 
								 | 
							
										values = loadData(f)
							 | 
						||
| 
								 | 
							
										barcolor, errcolor = get_colors(['dep/fixed', 'indep/fixed', 'dep/rand', 'indep/rand'], label)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										for k, a in values.items():
							 | 
						||
| 
								 | 
							
											x = int(k)
							 | 
						||
| 
								 | 
							
											m = np.mean(a)
							 | 
						||
| 
								 | 
							
											s = 2.5758 * np.std(a) / np.sqrt(len(a))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											x = x + pos*width
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
											bar = plt.bar(x, m, width=width, color=barcolor, label=label)
							 | 
						||
| 
								 | 
							
											if log:
							 | 
						||
| 
								 | 
							
												fix_log_rects(bar, 1e-4)
							 | 
						||
| 
								 | 
							
											if error:
							 | 
						||
| 
								 | 
							
												plt.errorbar(x, m, s, elinewidth=.8, capsize=1, ecolor=errcolor)
							 | 
						||
| 
								 | 
							
											label=''
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										pos = pos + 1
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									bbox=(1, 1)
							 | 
						||
| 
								 | 
							
									if not legendOutside:
							 | 
						||
| 
								 | 
							
										bbox=(.38, 1)
							 | 
						||
| 
								 | 
							
									plt.legend(bbox_to_anchor=bbox)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									fig.set_size_inches(set_size(455.24408, .8))
							 | 
						||
| 
								 | 
							
									if not show:
							 | 
						||
| 
								 | 
							
										plt.savefig(output, format='pdf', bbox_inches='tight')
							 | 
						||
| 
								 | 
							
									return plt
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# script
							 | 
						||
| 
								 | 
							
								plts = []
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								plt = figCT(u"", u"nombre de boucles", [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
							 | 
						||
| 
								 | 
							
										"plots/fixediv.pdf", [
							 | 
						||
| 
								 | 
							
											['data/ct_fixediv_dep_fixedi', 'dep/fixed'],
							 | 
						||
| 
								 | 
							
											['data/ct_fixediv_indep_fixedi', 'indep/fixed'],
							 | 
						||
| 
								 | 
							
											['data/ct_fixediv_dep_randi', 'dep/rand'],
							 | 
						||
| 
								 | 
							
											['data/ct_fixediv_indep_randi', 'indep/rand'],
							 | 
						||
| 
								 | 
							
											],
							 | 
						||
| 
								 | 
							
										legendOutside=True,
							 | 
						||
| 
								 | 
							
										error=True
							 | 
						||
| 
								 | 
							
										)
							 | 
						||
| 
								 | 
							
								plts.append(plt)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								plt = figCT(u"", u"nombre d'instructions", [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
							 | 
						||
| 
								 | 
							
										"plots/fixedv.pdf", [
							 | 
						||
| 
								 | 
							
											['data/ct_fixedv_dep_fixedi', 'dep/fixed'],
							 | 
						||
| 
								 | 
							
											['data/ct_fixedv_indep_fixedi', 'indep/fixed'],
							 | 
						||
| 
								 | 
							
											['data/ct_fixedv_dep_randi', 'dep/rand'],
							 | 
						||
| 
								 | 
							
											['data/ct_fixedv_indep_randi', 'indep/rand'],
							 | 
						||
| 
								 | 
							
											],
							 | 
						||
| 
								 | 
							
										error=True,
							 | 
						||
| 
								 | 
							
										log=True
							 | 
						||
| 
								 | 
							
										)
							 | 
						||
| 
								 | 
							
								plts.append(plt)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								if show:
							 | 
						||
| 
								 | 
							
									for plt in plts:
							 | 
						||
| 
								 | 
							
										plt.show()
							 |