Benchmark updates
This commit is contained in:
parent
a42b237918
commit
ec64c8488a
2 changed files with 40 additions and 13 deletions
2
Makefile
2
Makefile
|
|
@ -73,7 +73,7 @@ doc/.doxygen.stamp: $(wildcard *.c) $(wildcard *.h) Doxyfile
|
||||||
checks: runtest unittest benchmark
|
checks: runtest unittest benchmark
|
||||||
|
|
||||||
benchmark: pyrpn.so
|
benchmark: pyrpn.so
|
||||||
PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py
|
PYTHONPATH=`pwd` $(PYTHON) tests/benchmark.py 0x200 0x3000
|
||||||
|
|
||||||
unittest: pyrpn.so
|
unittest: pyrpn.so
|
||||||
PYTHONPATH=`pwd` $(PYTHON) -m unittest
|
PYTHONPATH=`pwd` $(PYTHON) -m unittest
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
import sys
|
import sys
|
||||||
import random
|
import random
|
||||||
import time
|
import time
|
||||||
|
import warnings
|
||||||
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
import pyrpn
|
import pyrpn
|
||||||
|
|
@ -11,29 +13,48 @@ except (ImportError, NameError) as e:
|
||||||
file=sys.stderr)
|
file=sys.stderr)
|
||||||
raise e
|
raise e
|
||||||
|
|
||||||
|
#expr_count = 0x200
|
||||||
expr_count = 0x200
|
#max_iter = 0x3000
|
||||||
max_iter = 0x3000
|
#argc = 2
|
||||||
|
#sz = 0x20
|
||||||
|
expr_count = 5000
|
||||||
|
max_iter = 0x5000
|
||||||
argc = 2
|
argc = 2
|
||||||
sz = 0x10
|
sz = 0x30
|
||||||
|
|
||||||
|
try:
|
||||||
|
from tqdm import tqdm
|
||||||
|
tqr = lambda m: tqdm(range(m), unit='expr', unit_scale=True,
|
||||||
|
#unit_scale=max_iter>>10,
|
||||||
|
mininterval=.15)
|
||||||
|
write=False
|
||||||
|
except (ImportError, NameError) as e:
|
||||||
|
warnings.warn('tqdm not found')
|
||||||
|
tqr = range
|
||||||
|
write=True
|
||||||
|
|
||||||
if len(sys.argv) > 1:
|
if len(sys.argv) > 1:
|
||||||
expr_count = int(sys.argv[1], 0)
|
expr_count = int(sys.argv[1], 0)
|
||||||
if len(sys.argv) > 2:
|
if len(sys.argv) > 2:
|
||||||
max_iter = int(sys.argv[2], 0)
|
max_iter = int(sys.argv[2], 0)
|
||||||
if len(sys.argv) > 3:
|
if len(sys.argv) > 3:
|
||||||
argc = int(sys.argv[3], 0)
|
|
||||||
if len(sys.argv) > 4:
|
|
||||||
sz = int(sys.argv[4], 0)
|
sz = int(sys.argv[4], 0)
|
||||||
|
if len(sys.argv) > 4:
|
||||||
|
argc = int(sys.argv[3], 0)
|
||||||
|
|
||||||
tot = 0
|
tot = 0
|
||||||
time_op = 0
|
time_op = 0
|
||||||
start = time.time()
|
start = time.time()
|
||||||
IMAX = (1<<63)-1
|
IMAX = (1<<63)-1
|
||||||
samples = 8
|
samples = 8
|
||||||
|
|
||||||
|
print("Running %dK iter on %d expressions with %d op" % (max_iter//1000,
|
||||||
|
expr_count,
|
||||||
|
sz))
|
||||||
|
|
||||||
rnd_samples = [[[random.randint(0, IMAX) for _ in range(argc)] for _ in range(max_iter)]
|
rnd_samples = [[[random.randint(0, IMAX) for _ in range(argc)] for _ in range(max_iter)]
|
||||||
for _ in range(samples)]
|
for _ in range(samples)]
|
||||||
for i in range(expr_count):
|
for i in tqr(expr_count):
|
||||||
rnd_expr = pyrpn.random_expr(argc, sz)
|
rnd_expr = pyrpn.random_expr(argc, sz)
|
||||||
all_start = time.time()
|
all_start = time.time()
|
||||||
expr = pyrpn.RPNExpr(rnd_expr, argc)
|
expr = pyrpn.RPNExpr(rnd_expr, argc)
|
||||||
|
|
@ -43,9 +64,15 @@ for i in range(expr_count):
|
||||||
expr.eval(*rnd)
|
expr.eval(*rnd)
|
||||||
time_op += time.time() - start_op
|
time_op += time.time() - start_op
|
||||||
tot += time.time() - all_start
|
tot += time.time() - all_start
|
||||||
|
if write:
|
||||||
sys.stderr.write(".")
|
sys.stderr.write(".")
|
||||||
sys.stderr.flush()
|
sys.stderr.flush()
|
||||||
|
if write:
|
||||||
sys.stderr.write("\n")
|
sys.stderr.write("\n")
|
||||||
total = time.time() - start
|
total = time.time() - start
|
||||||
print("Runned %.2fs" % total)
|
print("Runned %dK iter on %d expressions in %.2fs" % (max_iter//1000,
|
||||||
print("%.1fK iter/s %.1fms per expr" % (max_iter*expr_count/time_op/1000, tot/expr_count*1000))
|
expr_count, total))
|
||||||
|
msg = "%.1fK iter/s %.1fms per expr (%dK iter, %d op per expr)"
|
||||||
|
msg %= (max_iter*expr_count/time_op/1000, tot/expr_count*1000,
|
||||||
|
max_iter//1000, sz)
|
||||||
|
print(msg)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue