In [ ]:
# This script tries to model the cost of siphash
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
import math
from scipy import optimize
import numpy as np

figsize=(4.5, 3)

In [ ]:
data = pd.read_csv("siphash.csv")

In [ ]:
# The siphash model
def fitfunc(x,t,o):
    # Actual mathematical model
    def runner(a):
        return (t/a) + o
    # Magic for scipy
    if isinstance(x, np.ndarray):
        ret = []
        for s in x:
            ret += [runner(s)]
        return ret
    else:
        return runner(x)

#params = [1.02,2**11,600]
# Fit the data
params, _ = optimize.curve_fit(fitfunc, data['size'], data['cycles'])

print(params)

# Plot the data
fit = []
for s in data['size']:
    fit += [fitfunc(s,params[0],params[1])]

fig = plt.figure(figsize=figsize, dpi=300)
plt.scatter(data['size'], data['cycles'], 5, label="data")
plt.plot(data['size'], fit, color='orange', label="fit")
plt.ylim([1,2**10])
#plt.semilogx(basex=2)
plt.loglog(basex=2, basey=2)
plt.grid(b=True)
plt.xlabel('#Runs')
plt.ylabel('Cycles per Run')
plt.legend()
fig.savefig('output/synth-siphash.pdf',bbox_inches='tight')
plt.show()

In [ ]: