-
Notifications
You must be signed in to change notification settings - Fork 35
/
main.py
53 lines (45 loc) · 1.88 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
if True:
import numpy as np
d = 3
K = 50
N = 10**6
a = np.zeros(3)
b = np.ones(3)
orders = np.array([K for i in range(d)])
coeffs = np.random.random([k+2 for k in orders])
points = np.random.random((N,d)) # each line is a vector
points_c = points.T.copy() # each column is a vector
vals = np.zeros(N)
print(points.max().max())
print(points.min().min())
import time
from alternative_implementations import *
from eval_cubic_splines_cython import vec_eval_cubic_spline_3 as rr
vec_eval_cubic_spline_3 (a,b,orders,coeffs,points,vals) # warmup
vec_eval_cubic_spline_3_inlined(a,b,orders,coeffs,points,vals) # warmup
vec_eval_cubic_spline_3_inlined_columns(a,b,orders,coeffs,points_c,vals) # warmup
vec_eval_cubic_spline_3_kernel (a,b,orders,coeffs,points,vals) # warmup
vec_eval_cubic_spline_3_inlined_lesswork(orders,coeffs,points,vals,Ad,dAd)
#rr(a,b,orders,coeffs,points,vals,Ad,dAd)
rr(a,b,orders,coeffs,points,vals)
t1 = time.time()
vec_eval_cubic_spline_3(a,b,orders,coeffs,points,vals)
t2 = time.time()
vec_eval_cubic_spline_3_inlined(a,b,orders,coeffs,points,vals)
t3 = time.time()
vec_eval_cubic_spline_3_inlined_columns(a,b,orders,coeffs,points_c,vals)
t4 = time.time()
vec_eval_cubic_spline_3_kernel(a,b,orders,coeffs,points,vals)
t5 = time.time()
vec_eval_cubic_spline_3_inlined_lesswork(orders,coeffs,points,vals,Ad,dAd)
t6 = time.time()
# rr(a,b,orders,coeffs,points,vals,Ad,dAd)
rr(a,b,orders,coeffs,points,vals)
t7 = time.time()
print("one function call per point: {}".format(t2-t1))
print("inlined (points in rows): {}".format(t3-t2))
print("inlined (points in columns): {}".format(t4-t3))
print("kernel: {}".format(t5-t4))
print("less work: {}".format(t6-t5))
print("cython: {}".format(t7-t6))
print(vals[:10,0])