Browse Source

Benchmark updates

Yann Weber 4 years ago
parent
commit
ec64c8488a
2 changed files with 40 additions and 13 deletions
  1. 1
    1
      Makefile
  2. 39
    12
      tests/benchmark.py

+ 1
- 1
Makefile View File

@@ -73,7 +73,7 @@ doc/.doxygen.stamp: $(wildcard *.c) $(wildcard *.h) Doxyfile
73 73
 checks: runtest unittest benchmark
74 74
 
75 75
 benchmark: pyrpn.so
76
-	PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py
76
+	PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py 0x200 0x3000
77 77
 
78 78
 unittest: pyrpn.so
79 79
 	PYTHONPATH=`pwd` $(PYTHON) -m unittest

+ 39
- 12
tests/benchmark.py View File

@@ -3,6 +3,8 @@
3 3
 import sys
4 4
 import random
5 5
 import time
6
+import warnings
7
+
6 8
 
7 9
 try:
8 10
     import pyrpn
@@ -11,29 +13,48 @@ except (ImportError, NameError) as e:
11 13
           file=sys.stderr)
12 14
     raise e
13 15
 
14
-
15
-expr_count = 0x200
16
-max_iter = 0x3000
16
+#expr_count = 0x200
17
+#max_iter = 0x3000
18
+#argc = 2
19
+#sz = 0x20
20
+expr_count = 5000
21
+max_iter = 0x5000
17 22
 argc = 2
18
-sz = 0x10
23
+sz = 0x30
24
+
25
+try:
26
+    from tqdm import tqdm
27
+    tqr = lambda m: tqdm(range(m), unit='expr', unit_scale=True,
28
+                         #unit_scale=max_iter>>10,
29
+                         mininterval=.15)
30
+    write=False
31
+except (ImportError, NameError) as e:
32
+    warnings.warn('tqdm not found')
33
+    tqr = range
34
+    write=True
19 35
 
20 36
 if len(sys.argv) > 1:
21 37
     expr_count = int(sys.argv[1], 0)
22 38
 if len(sys.argv) > 2:
23 39
     max_iter = int(sys.argv[2], 0)
24 40
 if len(sys.argv) > 3:
25
-    argc = int(sys.argv[3], 0)
26
-if len(sys.argv) > 4:
27 41
     sz = int(sys.argv[4], 0)
42
+if len(sys.argv) > 4:
43
+    argc = int(sys.argv[3], 0)
28 44
 
29 45
 tot = 0
30 46
 time_op = 0
31 47
 start = time.time()
32 48
 IMAX = (1<<63)-1
33 49
 samples = 8
50
+
51
+print("Running %dK iter on %d expressions with %d op" % (max_iter//1000,
52
+                                                         expr_count,
53
+                                                         sz))
54
+
34 55
 rnd_samples = [[[random.randint(0, IMAX) for _ in range(argc)] for _ in range(max_iter)]
35 56
                for _ in range(samples)]
36
-for i in range(expr_count):
57
+for i in tqr(expr_count):
37 58
     rnd_expr = pyrpn.random_expr(argc, sz)
38 59
     all_start = time.time()
39 60
     expr = pyrpn.RPNExpr(rnd_expr, argc)
@@ -43,9 +64,15 @@ for i in range(expr_count):
43 64
         expr.eval(*rnd)
44 65
     time_op += time.time() - start_op
45 66
     tot += time.time() - all_start
46
-    sys.stderr.write(".")
47
-    sys.stderr.flush()
48
-sys.stderr.write("\n")
67
+    if write:
68
+        sys.stderr.write(".")
69
+        sys.stderr.flush()
70
+if write:
71
+    sys.stderr.write("\n")
49 72
 total = time.time() - start
50
-print("Runned %.2fs" % total)
51
-print("%.1fK iter/s %.1fms per expr" % (max_iter*expr_count/time_op/1000, tot/expr_count*1000))
73
+print("Runned %dK iter on %d expressions in %.2fs" % (max_iter//1000,
74
+                                                     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,
77
+        max_iter//1000, sz)
78
+print(msg)

Loading…
Cancel
Save