In [ ]:
from __future__ import print_function
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker
%matplotlib inline
from IPython.display import display
In [ ]:
df_2d = pd.read_csv("performance_vhm_lab_100.csv")
df_2d = df_2d.set_index(df_2d.columns[0])
df_2d= df_2d.sort_index()
display(df_2d)
In [ ]:
def computeSpeedupEfficiency(df):
"""
Given a datafram with index of the number of threads, and the colums
multiple time measurements, computer the derived speed up and efficiency.
"""
for colName in df.columns:
cloc = df.columns.get_loc(colName)
# time with 1 thread
t1 = df.iloc[0][colName]
#df["Optimal"] = df_2d.iloc[0,1]/df_2d.index.values*(1.0)
df.insert(loc=cloc+1,
column="Relative Speedup {0}".format(colName),
value=t1/df.iloc[:,cloc])
df.insert(loc=cloc+1,
column="Relative Efficiency {0}".format(colName),
value=t1/(df.iloc[:,cloc]*df.index))
In [ ]:
computeSpeedupEfficiency(df_2d)
display(df_2d)
In [ ]:
df_3d = pd.read_csv("performance_vhm_lab.csv")
df_3d = df_3d.set_index(df_3d.columns[0])
df_3d= df_3d.sort_index()
display(df_3d)
In [ ]:
computeSpeedupEfficiency(df_3d)
display(df_3d)
In [ ]:
print(df_2d.to_latex(float_format='%.5f'))
In [ ]:
n = 4
a=0.8788
# Efficiency
n**(a-1)
In [ ]:
# Speed up
n**(a)
In [ ]:
# serial part via Gustafson's law
(n**(a)-n)/(1-n)
In [ ]:
# percent parallel via Amdakl's law
(1.0-n**(a))/(n**(a))*(n/(1.0-n))
In [ ]:
print(df_2d.to_latex())
print(df_3d.to_latex())
In [ ]:
df_2d.loc[:44][["Without Connectivity","With Connectivity"]]
In [ ]:
fig, axes = plt.subplots(nrows=2, ncols=2, dpi=320, figsize=(10, 10))
#fig.suptitle("SLIC Performance Number of Theads vs Time")
plot_data = df_2d.loc[:44][["Without Connectivity","With Connectivity"]]
ax = plot_data.plot(ax=axes[0,0], marker="")
#ax.set_xscale("log", basex=2)
ax.xaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter('%d'))
#ax.set_yscale("log", basey=2)
ax.yaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.set_ylabel("seconds")
ax.set_title("Time")
ax.legend().set_visible(False)
ax.set_xlabel("")
plot_data = df_2d.loc[44::22][["Without Connectivity","With Connectivity"]]
ax = plot_data.plot.bar(ax=axes[0,1])
ax.legend().set_visible(False)
ax.set_title("HyperThreading")
ax.set_xlabel("")
plot_data = df_3d.loc[:44][["Without Connectivity","With Connectivity"]]
ax = plot_data.plot(ax=axes[1,0], marker="o")
#ax.set_xscale("log", basex=2)
ax.xaxis.set_major_formatter(matplotlib.ticker.FormatStrFormatter('%d'))
#ax.set_yscale("log", basey=2)
ax.yaxis.set_major_formatter(matplotlib.ticker.ScalarFormatter())
ax.set_ylabel("seconds")
#ax.set_title("log-log")
ax.legend(bbox_to_anchor=(.95, .95), loc='upper right', borderaxespad=0.)
#ax.legend().set_visible(False)
plot_data = df_3d.loc[44:][["Without Connectivity","With Connectivity"]]
ax = plot_data.plot.bar(ax=axes[1,1])
ax.legend().set_visible(False)
fig.savefig("thread_time.eps")
In [ ]:
fig, axes = plt.subplots(nrows=1, ncols=2, dpi=320, figsize=(16, 8))
plot_data = df_2d.loc[:44][[col for col in df_2d.columns if "Speedup" in col]]
ax = plot_data.plot(ax=axes[0],)
ax.plot(plot_data.index, plot_data.index,linestyle=':')
ax.legend().set_visible(False)
#ax.set_title("Speedup in 2D")
ax.set_ylabel("speedup")
plot_data = df_3d.loc[:44][[col for col in df_3d.columns if "Speedup" in col]]
ax = plot_data.plot(ax=axes[1], marker="o", label=["A","B"])
#ax.set_title("Speedup in 3D")
ax.plot(plot_data.index, plot_data.index, label="linear",linestyle=':')
ax.legend(bbox_to_anchor=(.05, .95), loc='upper left', borderaxespad=0., labels=("Without Connectivity","With Connectivity","linear"))
#
fig.savefig("thread_speedup.eps")
In [ ]:
def fit_scalability(x,y):
x = np.log2(x)
y = np.sign(y)*np.log2(np.abs(y))
z = np.polyfit(x=x, y=y, deg=1)
return -z[0]
In [ ]:
drop=-2
scalability_3d_wo=fit_scalability(df_3d.index[:drop].values,
df_3d.iloc[:drop,0].values)
scalability_3d_w=fit_scalability(df_3d.index[:drop].values,
df_3d.iloc[:drop,1].values)
scalability_3d_c=fit_scalability(df_3d.index[:drop].values,
df_3d.iloc[:drop,1].values-df_3d.iloc[:drop,0].values)
print("3d scalability {0} (without connectivity) {1} (with connectivity) {2} (connectivity alone)"
.format(scalability_3d_wo,scalability_3d_w,scalability_3d_c))
In [ ]:
drop=-2
scalability_2d_wo=fit_scalability(df_2d.index[:drop].values,
df_2d.iloc[:drop,0].values)
scalability_2d_w=fit_scalability(df_2d.index[:drop].values,
df_2d.iloc[:drop,1].values)
scalability_2d_c=fit_scalability(df_2d.index[:drop].values,
df_2d.iloc[:drop,1].values-df_2d.iloc[:drop,0].values)
print("2d scalability {0} (without connectivity) {1} (with connectivity) {2} (connectivity alone)"
.format(scalability_2d_wo,scalability_2d_w,scalability_2d_c))
In [ ]:
for i in range(88):
print(i, end=' ')
In [ ]: