12
12
args = np .concatenate ((x , p ))
13
13
exp = sp .exp
14
14
exprs = [x [0 ] + x [1 ] - x [4 ] + 36.252574322669 , x [0 ] - x [2 ] + x [3 ] + 21.3219379611249 , x [3 ] + x [5 ] - x [6 ] + 9.9011158998744 , 2 * x [3 ] + x [5 ] - x [7 ] + 18.190422234653 , 3 * x [3 ] + x [5 ] - x [8 ] + 24.8679190043357 , 4 * x [3 ] + x [5 ] - x [9 ] + 29.9336062089226 , - x [10 ] + 5 * x [3 ] + x [5 ] + 28.5520551531262 , 2 * x [0 ] + x [11 ] - 2 * x [4 ] - 2 * x [5 ] + 32.4401680272417 , 3 * x [1 ] - x [12 ] + x [5 ] + 34.9992934135095 , 4 * x [1 ] - x [13 ] + x [5 ] + 37.0716199972041 , p [0 ] - p [1 ] + 2 * p [10 ] + 2 * p [11 ] - p [12 ] - 2 * p [13 ] + p [2 ] + 2 * p [5 ] + 2 * p [6 ] + 2 * p [7 ] + 2 * p [8 ] + 2 * p [9 ] - exp (x [0 ]) + exp (x [1 ]) - 2 * exp (x [10 ]) - 2 * exp (x [11 ]) + exp (x [12 ]) + 2 * exp (x [13 ]) - exp (x [2 ]) - 2 * exp (x [5 ]) - 2 * exp (x [6 ]) - 2 * exp (x [7 ]) - 2 * exp (x [8 ]) - 2 * exp (x [9 ]), - p [0 ] - p [1 ] - 15 * p [10 ] - 2 * p [11 ] - 3 * p [12 ] - 4 * p [13 ] - 4 * p [2 ] - 3 * p [3 ] - 2 * p [4 ] - 3 * p [6 ] - 6 * p [7 ] - 9 * p [8 ] - 12 * p [9 ] + exp (x [0 ]) + exp (x [1 ]) + 15 * exp (x [10 ]) + 2 * exp (x [11 ]) + 3 * exp (x [12 ]) + 4 * exp (x [13 ]) + 4 * exp (x [2 ]) + 3 * exp (x [3 ]) + 2 * exp (x [4 ]) + 3 * exp (x [6 ]) + 6 * exp (x [7 ]) + 9 * exp (x [8 ]) + 12 * exp (x [9 ]), - 5 * p [10 ] - p [2 ] - p [3 ] - p [6 ] - 2 * p [7 ] - 3 * p [8 ] - 4 * p [9 ] + 5 * exp (x [10 ]) + exp (x [2 ]) + exp (x [3 ]) + exp (x [6 ]) + 2 * exp (x [7 ]) + 3 * exp (x [8 ]) + 4 * exp (x [9 ]), - p [1 ] - 2 * p [11 ] - 3 * p [12 ] - 4 * p [13 ] - p [4 ] + exp (x [1 ]) + 2 * exp (x [11 ]) + 3 * exp (x [12 ]) + 4 * exp (x [13 ]) + exp (x [4 ]), - p [10 ] - 2 * p [11 ] - p [12 ] - p [13 ] - p [5 ] - p [6 ] - p [7 ] - p [8 ] - p [9 ] + exp (x [10 ]) + 2 * exp (x [11 ]) + exp (x [12 ]) + exp (x [13 ]) + exp (x [5 ]) + exp (x [6 ]) + exp (x [7 ]) + exp (x [8 ]) + exp (x [9 ])]
15
+
15
16
lmb_sp = sp .lambdify (args , exprs )
16
- lbm_se = se .Lambdify (args , exprs )
17
- lbm_se_llvm = se .Lambdify (args , exprs , backend = 'llvm' )
17
+ lmb_se = se .Lambdify (args , exprs )
18
+ lmb_se_cse = se .LambdifyCSE (args , exprs )
19
+ lmb_se_llvm = se .Lambdify (args , exprs , backend = 'llvm' )
18
20
19
21
inp = np .ones (28 )
20
22
24
26
res_sympy = lmb_sp (* inp )
25
27
tim_sympy = clock () - tim_sympy
26
28
27
- lbm_se (inp )
29
+ lmb_se (inp )
28
30
tim_se = clock ()
29
31
res_se = np .empty (len (exprs ))
30
32
for i in range (500 ):
31
- res_se = lbm_se (inp )
33
+ res_se = lmb_se (inp )
32
34
tim_se = clock () - tim_se
33
35
34
- lbm_se_llvm (inp )
36
+ lmb_se_cse (inp )
37
+ tim_se_cse = clock ()
38
+ res_se_cse = np .empty (len (exprs ))
39
+ for i in range (500 ):
40
+ res_se_cse = lmb_se_cse (inp )
41
+ tim_se_cse = clock () - tim_se_cse
42
+
43
+ lmb_se_llvm (inp )
35
44
tim_se_llvm = clock ()
36
45
res_se_llvm = np .empty (len (exprs ))
37
46
for i in range (500 ):
38
- res_se_llvm = lbm_se_llvm (inp )
47
+ res_se_llvm = lmb_se_llvm (inp )
39
48
tim_se_llvm = clock () - tim_se_llvm
40
49
41
50
42
- print ('SymEngine (lambda double) speed-up factor (higher is better) vs sympy: %12.5g' %
51
+ print ('SymEngine (lambda double) speed-up factor (higher is better) vs sympy: %12.5g' %
43
52
(tim_sympy / tim_se ))
44
53
45
- print ('symengine (LLVM) speed-up factor (higher is better) vs sympy: %12.5g' %
54
+ print ('symengine (lambda double + CSE) speed-up factor (higher is better) vs sympy: %12.5g' %
55
+ (tim_sympy / tim_se_cse ))
56
+
57
+ print ('symengine (LLVM) speed-up factor (higher is better) vs sympy: %12.5g' %
46
58
(tim_sympy / tim_se_llvm ))
47
59
48
60
import itertools
@@ -64,14 +76,14 @@ def func(*args):
64
76
return result
65
77
return func
66
78
67
- lbm_se_llvm_manual = ManualLLVM (args , np .array (exprs ))
68
- lbm_se_llvm_manual (inp )
79
+ lmb_se_llvm_manual = ManualLLVM (args , np .array (exprs ))
80
+ lmb_se_llvm_manual (inp )
69
81
tim_se_llvm_manual = clock ()
70
82
res_se_llvm_manual = np .empty (len (exprs ))
71
83
for i in range (500 ):
72
- res_se_llvm_manual = lbm_se_llvm_manual (inp )
84
+ res_se_llvm_manual = lmb_se_llvm_manual (inp )
73
85
tim_se_llvm_manual = clock () - tim_se_llvm_manual
74
- print ('symengine (ManualLLVM) speed-up factor (higher is better) vs sympy: %12.5g' %
86
+ print ('symengine (ManualLLVM) speed-up factor (higher is better) vs sympy: %12.5g' %
75
87
(tim_sympy / tim_se_llvm_manual ))
76
88
77
89
if tim_se_llvm_manual < tim_se_llvm :
@@ -87,5 +99,5 @@ def func(*args):
87
99
for i in range (500 ):
88
100
res_ref = lmb_ref (inp )
89
101
tim_ref = clock () - tim_ref
90
- print ('Hard-coded Cython code speed-up factor (higher is better) vs sympy: %12.5g' %
102
+ print ('Hard-coded Cython code speed-up factor (higher is better) vs sympy: %12.5g' %
91
103
(tim_sympy / tim_ref ))
0 commit comments