work done
670
.ipynb_checkpoints/better-plotting-checkpoint.ipynb
Normal file
901
.ipynb_checkpoints/last_attempt-checkpoint.ipynb
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"python.pythonPath": "C:\\python3.8\\python.exe"
|
||||
}
|
668
better-plotting.ipynb
Normal file
901
last_attempt.ipynb
Normal file
223
last_attempt.py
Normal file
@ -0,0 +1,223 @@
|
||||
#!/usr/bin/env python
|
||||
# coding: utf-8
|
||||
|
||||
# In[1]:
|
||||
|
||||
|
||||
import pandas as pd
|
||||
from pandas import DataFrame, Series
|
||||
from numpy import nan
|
||||
import matplotlib.pyplot as plt
|
||||
plt.rcParams["figure.figsize"] = (24,5)
|
||||
import seaborn as sns
|
||||
sns.set()
|
||||
sns.set(font_scale=1.75)
|
||||
|
||||
|
||||
# In[2]:
|
||||
|
||||
|
||||
cols = [
|
||||
"TEST","MAP","SIZE", "TIME"
|
||||
]
|
||||
onmodded = pd.read_csv("new_repr.csv", quotechar="'", header=None)
|
||||
|
||||
onmodded = onmodded.drop([0],1)
|
||||
onmodded.columns= cols
|
||||
onmodded = onmodded.drop([0],0)
|
||||
onmodded.iloc[:,2:] = onmodded.iloc[:,2:].astype("int32")
|
||||
|
||||
|
||||
styles = {'absl::flat_hash_map': ["#0000cc"], # blue
|
||||
"absl::node_hash_map'": ["#3366ff"],
|
||||
'absl::node_hash_map': ["#99ccff"],
|
||||
|
||||
'google::dense_hash_map': ["#ff0000"], # reds
|
||||
'google::sparse_hash_map': ["#ff6666"],
|
||||
'phmap::parallel_flat_hash_map': ["#ff0066"],
|
||||
|
||||
'ska::bytell_hash_map': ["#009933"], # greens
|
||||
'ska::flat_hash_map': ["#33cc33"],
|
||||
'ska::unordered_map': ["#99ff66"],
|
||||
|
||||
'tsl::hopscotch_map': ["#9900cc"], # purples
|
||||
'tsl::robin_map': ["#cc33ff"],
|
||||
'tsl::sparse_map': ["#cc99ff"],
|
||||
|
||||
'robin_hood::unordered_flat_map': ["#ffcc99"],
|
||||
'robin_hood::unordered_node_map': ["#ccff66"],
|
||||
|
||||
'boost::unordered::unordered_map': ["#663300"], # brown
|
||||
|
||||
'emilib::HashMap': ["#9900cc"], # purple
|
||||
|
||||
# weird orange
|
||||
'phmap::parallel_node_hash_map': ["#ffcc66", "solid"],
|
||||
|
||||
'std::unordered_map': ["#000000", "solid"], # black
|
||||
}
|
||||
ticks = [50000, 100000, 150000, 200000, 250000, 300000, 350000, 400000, 500000,
|
||||
600000, 700000, 800000, 900000, 1000000,
|
||||
2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000,
|
||||
15000000, 20000000, 25000000, 30000000, 35000000, 40000000, 45000000, 50000000]
|
||||
ticklabels = ['50 K', '100 K',
|
||||
'150 K', '200 K', '250 K', '300 K',
|
||||
'350 K', '400 K', '0.5 M', '0.6 M',
|
||||
'0.7 M', '0.8 M', '0.9 M', '1 M',
|
||||
'2 M', '3 M', '4 M', '5 M',
|
||||
'6 M', '7 M', '8 M', '9 M',
|
||||
'10 M', '15 M', '20 M', '25 M',
|
||||
'30 M', '35 M', '40 M', '45 M', '50 M']
|
||||
labels = {
|
||||
'int_delete' : ["mean int deletion time", "deletion time (ns)"],
|
||||
'int_insert' : ["mean int insertion time", "insertion time(ns)"],
|
||||
'int_nosucc_lookup' : ["mean int unsucessful lookup time", "unsucessful lookup time (ns)"],
|
||||
'int_succ_lookup' : ["mean int succesful lookup time", "succesful lookup time (ns)"],
|
||||
'string_delete' : ["mean string deletion time", "deletion time (ns)"],
|
||||
'string_insert' : ["mean string insertion time", "insertion time(ns)"],
|
||||
'string_nosucc_lookup' : ["mean string unsucessful lookup time", "unsucessful lookup time (ns)"],
|
||||
'string_succ_lookup' : ["mean string succesful lookup time", "succesful lookup time (ns)"]
|
||||
}
|
||||
|
||||
|
||||
# In[3]:
|
||||
|
||||
|
||||
# outlier testing functions
|
||||
def remove_with_modified_z_score(data, treshold=3.5):
|
||||
# https://www.itl.nist.gov/div898/handbook/eda/section3/eda35h.htm
|
||||
data = data.astype(int)
|
||||
stats = data.describe()
|
||||
median_absolute_deviation = abs(data - data.median()).median()
|
||||
if not median_absolute_deviation:
|
||||
return data
|
||||
modified_z_scores = abs(0.6745 * (data - data.median()) / median_absolute_deviation)
|
||||
cutoff = modified_z_scores <= treshold
|
||||
data = data * cutoff
|
||||
data = data.replace(0, nan)
|
||||
return data
|
||||
|
||||
#function that takes one of the outlier testers and data, and removes outliers
|
||||
def remove_outlier(data, function):
|
||||
new_data = data.copy(True)
|
||||
new_data["TIME"] = new_data["TIME"].astype(int)
|
||||
new_data["SIZE"] = new_data["SIZE"].astype(int)
|
||||
new_data
|
||||
for i in range(4216):
|
||||
start = i * 30
|
||||
end = start+30
|
||||
new_data.loc[start:end, "TIME"] = function(data.loc[start:end, "TIME"])
|
||||
if not i % 420:
|
||||
print(i / 42 , "% done")
|
||||
return new_data
|
||||
|
||||
|
||||
# helpers for plot functions
|
||||
def sort_maps(test):
|
||||
maps = data[data["TEST"]== test]["MAP"].unique()
|
||||
new = [(gr_max.loc[test, i]["TIME"], i) for i in maps]
|
||||
new.sort()
|
||||
new = [i[1] for i in new]
|
||||
return new
|
||||
|
||||
def divider(df, maplist):
|
||||
filters = df['MAP'].isin(maplist)
|
||||
return df[filters]
|
||||
|
||||
|
||||
def plotter2(test, data):
|
||||
mydata = data[data["TEST"] == test]
|
||||
maps = sort_maps(test)
|
||||
set1 = divider(mydata, maps[:5])
|
||||
set2 = divider(mydata, maps[5:11])
|
||||
set3 = divider(mydata, maps[11:])
|
||||
|
||||
plot = sns.lineplot(x="SIZE", y="TIME", hue="MAP", data=set1)
|
||||
plt.xscale("log")
|
||||
plt.xticks(ticks, ticklabels)
|
||||
plot.set_xticklabels(
|
||||
plot.get_xticklabels(),
|
||||
rotation=55,
|
||||
horizontalalignment='center',
|
||||
fontweight='light',
|
||||
)
|
||||
plt.ylabel(labels[test][1])
|
||||
plt.legend()
|
||||
plt.title(labels[test][0])
|
||||
plt.savefig("./plots/{}/{}.png".format(test,1))
|
||||
plt.clf()
|
||||
|
||||
plot = sns.lineplot(x="SIZE", y="TIME", hue="MAP", data=set2)
|
||||
plt.xscale("log")
|
||||
plt.xticks(ticks, ticklabels)
|
||||
plot.set_xticklabels(
|
||||
plot.get_xticklabels(),
|
||||
rotation=55,
|
||||
horizontalalignment='center',
|
||||
fontweight='light',
|
||||
)
|
||||
plt.ylabel(labels[test][1])
|
||||
plt.legend()
|
||||
plt.title(labels[test][0])
|
||||
plt.savefig("./plots/{}/{}.png".format(test,2))
|
||||
plt.clf()
|
||||
|
||||
plot = sns.lineplot(x="SIZE", y="TIME", hue="MAP", data=set2)
|
||||
plt.xscale("log")
|
||||
plt.xticks(ticks, ticklabels)
|
||||
plot.set_xticklabels(
|
||||
plot.get_xticklabels(),
|
||||
rotation=55,
|
||||
horizontalalignment='center',
|
||||
fontweight='light',
|
||||
)
|
||||
plt.ylabel(labels[test][1])
|
||||
plt.legend()
|
||||
plt.title(labels[test][0])
|
||||
plt.savefig("./plots/{}/{}.png".format(test,3))
|
||||
plt.clf()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[4]:
|
||||
|
||||
|
||||
data = remove_outlier(onmodded, remove_with_modified_z_score)
|
||||
groups = data.groupby(["TEST", "MAP"])
|
||||
gr_max = groups.max()
|
||||
gr_mean = groups.mean()
|
||||
|
||||
|
||||
# In[5]:
|
||||
|
||||
|
||||
tests = data["TEST"].unique()
|
||||
for i in tests:
|
||||
plotter2(i, data)
|
||||
|
||||
|
||||
# In[6]:
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# In[ ]:
|
||||
|
||||
|
||||
|
||||
|
126481
new_repr.csv
Normal file
90
plot_stuff.py
Normal file
@ -0,0 +1,90 @@
|
||||
import seaborn as sns
|
||||
import pandas as pd
|
||||
from pandas import DataFrame, Series
|
||||
import matplotlib.pyplot as plt
|
||||
|
||||
import pathlib
|
||||
import os
|
||||
plt.rcParams["figure.figsize"] = (40, 5)
|
||||
sns.set()
|
||||
|
||||
## new cell
|
||||
cols = [
|
||||
"TEST", "MAP", '50000', '100000', '150000', '200000', '250000', '300000', '350000', '400000',
|
||||
'500000', '600000', '700000', '800000', '900000', '1000000', '2000000', '3000000',
|
||||
'4000000', '5000000', '6000000', '7000000', '8000000', '9000000', '10000000', '15000000',
|
||||
'20000000', '25000000', '30000000', '35000000', '40000000', '45000000', '50000000'
|
||||
]
|
||||
data = pd.read_csv("results.csv", quotechar="'", header=None)
|
||||
data.columns = cols
|
||||
# data.head()
|
||||
|
||||
## new cell
|
||||
groups = data.groupby(["TEST", "MAP"])
|
||||
groups_mean = groups.mean()
|
||||
groups_std = groups.std()
|
||||
|
||||
## new cell
|
||||
def max_val(hmap, test):
|
||||
return groups_mean.loc[test, hmap].max()
|
||||
|
||||
def sort_maps(test):
|
||||
maps = list(groups_mean.loc[test].index)
|
||||
new = [(max_val(i, test), i) for i in maps]
|
||||
new.sort()
|
||||
new = [i[1] for i in new]
|
||||
return new
|
||||
|
||||
|
||||
|
||||
def plot_test(test, include_error=True, log=False):
|
||||
sizes = [50000, 100000, 150000, 200000, 250000, 300000, 350000, 400000, 500000,
|
||||
600000, 700000, 800000, 900000, 1000000,
|
||||
2000000, 3000000, 4000000, 5000000, 6000000, 7000000, 8000000, 9000000, 10000000,
|
||||
15000000, 20000000, 25000000, 30000000, 35000000, 40000000, 45000000, 50000000]
|
||||
maps = sort_maps(test)
|
||||
# print(maps)
|
||||
count = 16
|
||||
repeats = [0, 5, 11]
|
||||
while count > -1:
|
||||
if not count and count not in repeats:
|
||||
break
|
||||
mp = maps[count]
|
||||
if include_error:
|
||||
plt.errorbar(groups_mean.columns,groups_mean.loc[test, mp], yerr=groups_std.loc[test, mp], label=mp)
|
||||
else:
|
||||
plt.plot(groups_mean.columns, groups_mean.loc[test, mp], label=mp)
|
||||
|
||||
if count in repeats:
|
||||
if log:
|
||||
plt.xscale("log")
|
||||
plt.ylabel("{} time (ns)".format(test))
|
||||
|
||||
plt.legend()
|
||||
plt.title(test)
|
||||
plt.savefig("./plots/{}/{}.png".format(test,count))
|
||||
plt.clf()
|
||||
# plt.show()
|
||||
|
||||
repeats.pop(repeats.index(count))
|
||||
else:
|
||||
count -=1
|
||||
## new cell
|
||||
|
||||
tests = data["TEST"].unique()
|
||||
p = pathlib.Path("./plots")
|
||||
if not p.is_dir():
|
||||
p.mkdir()
|
||||
for i in tests:
|
||||
path = pathlib.Path("./plots/{}/".format(i))
|
||||
if not path.is_dir():
|
||||
path.mkdir()
|
||||
print(i)
|
||||
plot_test(i, False)
|
||||
# break
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
plots/int_delete/1.png
Normal file
After Width: | Height: | Size: 258 KiB |
BIN
plots/int_delete/2.png
Normal file
After Width: | Height: | Size: 243 KiB |
BIN
plots/int_delete/3.png
Normal file
After Width: | Height: | Size: 243 KiB |
BIN
plots/int_insert/1.png
Normal file
After Width: | Height: | Size: 174 KiB |
BIN
plots/int_insert/2.png
Normal file
After Width: | Height: | Size: 222 KiB |
BIN
plots/int_insert/3.png
Normal file
After Width: | Height: | Size: 222 KiB |
BIN
plots/int_nosucc_lookup/1.png
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
plots/int_nosucc_lookup/2.png
Normal file
After Width: | Height: | Size: 244 KiB |
BIN
plots/int_nosucc_lookup/3.png
Normal file
After Width: | Height: | Size: 244 KiB |
BIN
plots/int_succ_lookup/1.png
Normal file
After Width: | Height: | Size: 202 KiB |
BIN
plots/int_succ_lookup/2.png
Normal file
After Width: | Height: | Size: 201 KiB |
BIN
plots/int_succ_lookup/3.png
Normal file
After Width: | Height: | Size: 201 KiB |
BIN
plots/string_delete/1.png
Normal file
After Width: | Height: | Size: 235 KiB |
BIN
plots/string_delete/2.png
Normal file
After Width: | Height: | Size: 248 KiB |
BIN
plots/string_delete/3.png
Normal file
After Width: | Height: | Size: 247 KiB |
BIN
plots/string_insert/1.png
Normal file
After Width: | Height: | Size: 163 KiB |
BIN
plots/string_insert/2.png
Normal file
After Width: | Height: | Size: 207 KiB |
BIN
plots/string_insert/3.png
Normal file
After Width: | Height: | Size: 207 KiB |
BIN
plots/string_nosucc_lookup/1.png
Normal file
After Width: | Height: | Size: 171 KiB |
BIN
plots/string_nosucc_lookup/2.png
Normal file
After Width: | Height: | Size: 224 KiB |
BIN
plots/string_nosucc_lookup/3.png
Normal file
After Width: | Height: | Size: 225 KiB |
BIN
plots/string_succ_lookup/1.png
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
plots/string_succ_lookup/2.png
Normal file
After Width: | Height: | Size: 173 KiB |
BIN
plots/string_succ_lookup/3.png
Normal file
After Width: | Height: | Size: 173 KiB |
4080
results.csv
Normal file
4081
sorted.csv
Normal file
28
to.py
Normal file
@ -0,0 +1,28 @@
|
||||
styles = {'absl::flat_hash_map': ["#0000cc", "--"], # blue
|
||||
"absl::node_hash_map'": ["#3366ff", "--"],
|
||||
'absl::node_hash_map': ["#99ccff", "--"],
|
||||
|
||||
'google::dense_hash_map': ["#ff0000", "-."], # reds
|
||||
'google::sparse_hash_map': ["#ff6666", "-,"],
|
||||
'phmap::parallel_flat_hash_map': ["#ff0066", "-."],
|
||||
|
||||
'ska::bytell_hash_map': ["#009933", "- "], # greens
|
||||
'ska::flat_hash_map': ["#33cc33", "- "],
|
||||
'ska::unordered_map': ["#99ff66", "- "],
|
||||
|
||||
'tsl::hopscotch_map': ["#9900cc", ":"], # purples
|
||||
'tsl::robin_map': ["#cc33ff", ":"],
|
||||
'tsl::sparse_map': ["#cc99ff", ":"],
|
||||
|
||||
'robin_hood::unordered_flat_map': ["#ffcc99", ".."],
|
||||
'robin_hood::unordered_node_map': ["#ccff66", ".."],
|
||||
|
||||
'boost::unordered::unordered_map': ["#663300", "solid"], # brown
|
||||
|
||||
'emilib::HashMap': ["#9900cc", "solid"], # purple
|
||||
|
||||
# weird orange
|
||||
'phmap::parallel_node_hash_map': ["#ffcc66", "solid"],
|
||||
|
||||
'std::unordered_map': ["#000000", "solid"], # black
|
||||
}
|
BIN
with_error_nologscale/int_delete/0.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
with_error_nologscale/int_delete/11.png
Normal file
After Width: | Height: | Size: 123 KiB |
BIN
with_error_nologscale/int_delete/5.png
Normal file
After Width: | Height: | Size: 122 KiB |
BIN
with_error_nologscale/int_insert/0.png
Normal file
After Width: | Height: | Size: 107 KiB |
BIN
with_error_nologscale/int_insert/11.png
Normal file
After Width: | Height: | Size: 68 KiB |
BIN
with_error_nologscale/int_insert/5.png
Normal file
After Width: | Height: | Size: 88 KiB |
BIN
with_error_nologscale/int_nosucc_lookup/0.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
with_error_nologscale/int_nosucc_lookup/11.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
with_error_nologscale/int_nosucc_lookup/5.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
with_error_nologscale/int_succ_lookup/0.png
Normal file
After Width: | Height: | Size: 111 KiB |
BIN
with_error_nologscale/int_succ_lookup/11.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
with_error_nologscale/int_succ_lookup/5.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
with_error_nologscale/string_delete/0.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
with_error_nologscale/string_delete/11.png
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
with_error_nologscale/string_delete/5.png
Normal file
After Width: | Height: | Size: 130 KiB |
BIN
with_error_nologscale/string_insert/0.png
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
with_error_nologscale/string_insert/11.png
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
with_error_nologscale/string_insert/5.png
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
with_error_nologscale/string_nosucc_lookup/0.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
with_error_nologscale/string_nosucc_lookup/11.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
with_error_nologscale/string_nosucc_lookup/5.png
Normal file
After Width: | Height: | Size: 131 KiB |
BIN
with_error_nologscale/string_succ_lookup/0.png
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
with_error_nologscale/string_succ_lookup/11.png
Normal file
After Width: | Height: | Size: 117 KiB |
BIN
with_error_nologscale/string_succ_lookup/5.png
Normal file
After Width: | Height: | Size: 117 KiB |