|
@@ -5,6 +5,9 @@ import random
|
5
|
5
|
import time
|
6
|
6
|
import warnings
|
7
|
7
|
|
|
8
|
+def usage():
|
|
9
|
+ print("Usage : %s [expr_count [max_iter [argc [sz]]]]" %sys.argv[0],
|
|
10
|
+ file=sys.stderr)
|
8
|
11
|
|
9
|
12
|
try:
|
10
|
13
|
import pyrpn
|
|
@@ -13,14 +16,31 @@ except (ImportError, NameError) as e:
|
13
|
16
|
file=sys.stderr)
|
14
|
17
|
raise e
|
15
|
18
|
|
|
19
|
+if len(sys.argv) > 5:
|
|
20
|
+ usage()
|
|
21
|
+ exit(1)
|
|
22
|
+
|
16
|
23
|
#expr_count = 0x200
|
17
|
24
|
#max_iter = 0x3000
|
18
|
25
|
#argc = 2
|
19
|
26
|
#sz = 0x20
|
20
|
|
-expr_count = 5000
|
|
27
|
+expr_count = 0x200
|
21
|
28
|
max_iter = 0x5000
|
22
|
|
-argc = 2
|
23
|
|
-sz = 0x30
|
|
29
|
+#argc = 2
|
|
30
|
+#sz = 0x30
|
|
31
|
+argc = 5
|
|
32
|
+sz = 0x50
|
|
33
|
+
|
|
34
|
+try:
|
|
35
|
+ expr_count = int(sys.argv[1], base=0)
|
|
36
|
+ max_iter = int(sys.argv[2], base=0)
|
|
37
|
+ argc = int(sys.argv[3], base=0)
|
|
38
|
+ sz = int(sys.argv[4], base=0)
|
|
39
|
+except IndexError:
|
|
40
|
+ pass
|
|
41
|
+except Exception:
|
|
42
|
+ usage()
|
|
43
|
+ exit(2)
|
24
|
44
|
|
25
|
45
|
try:
|
26
|
46
|
from tqdm import tqdm
|
|
@@ -48,9 +68,9 @@ start = time.time()
|
48
|
68
|
IMAX = (1<<63)-1
|
49
|
69
|
samples = 8
|
50
|
70
|
|
51
|
|
-print("Running %dK iter on %d expressions with %d op" % (max_iter//1000,
|
|
71
|
+print("Running %dK iter on %d expressions with %d op and %d args" % (max_iter//1000,
|
52
|
72
|
expr_count,
|
53
|
|
- sz))
|
|
73
|
+ sz, argc))
|
54
|
74
|
|
55
|
75
|
rnd_samples = [[[random.randint(0, IMAX) for _ in range(argc)] for _ in range(max_iter)]
|
56
|
76
|
for _ in range(samples)]
|
|
@@ -58,6 +78,7 @@ for i in tqr(expr_count):
|
58
|
78
|
rnd_expr = pyrpn.random_expr(argc, sz)
|
59
|
79
|
all_start = time.time()
|
60
|
80
|
expr = pyrpn.RPNExpr(rnd_expr, argc)
|
|
81
|
+ expr.eval(*[0 for _ in range(argc)])
|
61
|
82
|
start_op = time.time()
|
62
|
83
|
rnds = random.choice(rnd_samples)
|
63
|
84
|
for rnd in rnds:
|
|
@@ -72,7 +93,10 @@ if write:
|
72
|
93
|
total = time.time() - start
|
73
|
94
|
print("Runned %dK iter on %d expressions in %.2fs" % (max_iter//1000,
|
74
|
95
|
expr_count, total))
|
75
|
|
-msg = "%.1fK iter/s %.1fms per expr (%dK iter, %d op per expr)"
|
76
|
|
-msg %= (max_iter*expr_count/time_op/1000, tot/expr_count*1000,
|
|
96
|
+ops = max_iter*expr_count*sz/time_op/(1000*1000)
|
|
97
|
+msg = "%5.1fM op/s %6.1fK iter/s %.1fms per expr (%dK iter, %d op per expr)"
|
|
98
|
+msg %= (ops,
|
|
99
|
+ max_iter*expr_count/time_op/1000,
|
|
100
|
+ tot/expr_count*1000,
|
77
|
101
|
max_iter//1000, sz)
|
78
|
102
|
print(msg)
|