In [ ]:
# This script tries to approximate the cost of Google's DenseMap

import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import math
import numpy as np

figsize=(4.5, 3)

In [ ]:
# Just plot the data
data = pd.read_csv("stateTableSizeScatterDenseMap.csv")
setupMin = data.groupby(['size'])['setup'].min()
runMin = data.groupby(['size'])['run'].min()
steps = data['size'].unique()

plt.semilogx(basex=2)
plt.ylim([0,1200])

plt.plot(steps, setupMin)

plt.grid(b=True)

plt.show()

In [ ]:
# This function models the insertion cost
def fun(x):
    return (600 + math.log(x,1.2)) + 150* (((np.sum([2**i for i in range(2, math.floor(math.log(x,2)))])/ x) -0.5) *2)

# This function models the query cost
def fun2(x):
    return math.log(x,1.06)

In [ ]:
#x = np.arange(2**10-1,2**17, 16)
# Calculate the functions
y = [fun(i) for i in steps]
y2 = [fun2(i) for i in steps]

fig = plt.figure(figsize=figsize, dpi=300)

plt.semilogx(basex=2)
plt.ylim([0,1200])

# Plot the data
plt.plot(steps,y, label="fit-setup")
plt.plot(steps, setupMin, label="data-setup")
plt.plot(steps, y2, label="fit-run")
plt.plot(steps, runMin, label="data-run")
plt.legend(bbox_to_anchor=(1, 1))
plt.ylabel("Cycles per Operation")
plt.xlabel("#Operations")
plt.grid(b=True)

plt.savefig('output/synth-denseMap.pdf',bbox_inches='tight')
plt.show()

In [ ]: