diff --git a/examples/plot_tasks.py b/examples/plot_tasks.py new file mode 100644 index 0000000000000000000000000000000000000000..2258059d9155338323fa1201661834e3737ba247 --- /dev/null +++ b/examples/plot_tasks.py @@ -0,0 +1,129 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +import matplotlib +matplotlib.use("Agg") +from pylab import * +from scipy import integrate +import distinct_colours as colours +params = { + # 'axes.labelsize': 10, + # 'axes.titlesize': 10, + # 'text.fontsize': 12, + # 'legend.fontsize': 12, + # 'xtick.labelsize': 10, + # 'ytick.labelsize': 10, + 'axes.labelsize': 9, + 'axes.titlesize': 9, + 'text.fontsize': 11, + 'legend.fontsize': 11, + 'xtick.labelsize': 9, + 'ytick.labelsize': 9, +'text.usetex': True, +'figure.figsize' : (7.2, 3.15), +'figure.subplot.left' : 0.04, +'figure.subplot.right' : 0.99 , +'figure.subplot.bottom' : 0.1 , +'figure.subplot.top' : 0.99 , +'figure.subplot.wspace' : 0. , +'figure.subplot.hspace' : 0.02 , +'lines.markersize' : 6, +'lines.linewidth' : 3., +'text.latex.unicode': True +} +rcParams.update(params) +rc('font',**{'family':'sans-serif','sans-serif':['Times']}) +import sys +import os +from scipy import stats +from scipy import optimize +from matplotlib.colors import colorConverter +from matplotlib.ticker import MultipleLocator, FormatStrFormatter +from matplotlib.patches import Polygon +from matplotlib.patches import Rectangle +from matplotlib import gridspec + +CPU_TPS = 2.67e9 / 1000 + +if sys.argv[1] == "bh": + data = loadtxt("output_bh_new.out") +elif sys.argv[1] == "fmm": + data = loadtxt("output_fmm.out") +t_type = data[:,0] +t_thread = data[:,1] +t_begin = data[:,2] / CPU_TPS +t_end = data[:,3] / CPU_TPS + +# Correct for empty type... +t_type[t_type==4] = 5 +t_type[t_type==3] = 4 + +# Recover some information +n_task = np.max(t_type) +n_threads = np.max(t_thread) +print n_task, "tasks using", n_threads, "threads." + + +# Standardize the time +startTime = np.min(t_begin) +t_begin -= startTime +t_end -= startTime + +startTime = np.min(t_begin) +endTime = np.max(t_end) + + +print "t = [", startTime, "-", endTime, "] ms." + + + +# Prepare for plots +colours = colours.get_distinct(12) +colors = [ colours[1], colours[3], colours[6], colours[8], colours[11], colours[2]] +labels = ["self", "pair", "m-poles", "direct", "CoM", "Downpass"] +count = np.zeros(6) +for j in range(6): + count[j] = np.size(t_type[t_type == j]) + + +figure() +gs = gridspec.GridSpec(2, 1, height_ratios=[1, 6]) + +# Plot the legend ........................ +subplot(gs[0]) + +xlim(0,6) +ylim(0,1) + +for i in range(6): + gca().add_patch(Rectangle( (0.1 + i, 0.1), 0.8, 0.8, facecolor=colors[i], edgecolor='k', lw=0.2)) + text( 0.5 + i, 0.5, "${\\rm %s~(%d)}$"%(labels[i],count[i]), ha='center', va='center', fontsize=8) + +gca().axison = False + + +# Now the actual plot ................... +subplot(gs[1]) + +for i in range(np.size(t_type)): +#for i in range(100): + + gca().add_patch(Rectangle(( t_begin[i], t_thread[i] + 0.05 ), t_end[i] - t_begin[i], 0.9, facecolor=colors[int(t_type[i])], edgecolor='k', lw=0.2)) + +# Remove axis +gca().spines['top'].set_visible(False) +gca().spines['right'].set_visible(False) +gca().get_xaxis().tick_bottom() +gca().get_yaxis().tick_left() + +# Plot limits +ylim(0, n_threads + 1) +yticks( np.array(range(int(n_threads)+1))+0.5, np.array(range(int(n_threads)+1)) ) +ylabel("${\\rm Thread~ID}$", labelpad=0.1) + +xlim(0, endTime*1.02) +xlabel("${\\rm Wallclock~time~[ms]}$", labelpad=0.1) + +if sys.argv[1] == "bh": + savefig("taskGraph_bh.png", dpi=600) +elif sys.argv[1] == "fmm": + savefig("taskGraph_fmm.png", dpi=600)