123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- #!/usr/bin/python3
-
- import sys
- import random
- import time
- import warnings
-
-
- try:
- import pyrpn
- except (ImportError, NameError) as e:
- print("Error importing pyrpn. Try to run make.",
- file=sys.stderr)
- raise e
-
- #expr_count = 0x200
- #max_iter = 0x3000
- #argc = 2
- #sz = 0x20
- expr_count = 5000
- max_iter = 0x5000
- argc = 2
- 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:
- expr_count = int(sys.argv[1], 0)
- if len(sys.argv) > 2:
- max_iter = int(sys.argv[2], 0)
- if len(sys.argv) > 3:
- sz = int(sys.argv[4], 0)
- if len(sys.argv) > 4:
- argc = int(sys.argv[3], 0)
-
- tot = 0
- time_op = 0
- start = time.time()
- IMAX = (1<<63)-1
- 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)]
- for _ in range(samples)]
- for i in tqr(expr_count):
- rnd_expr = pyrpn.random_expr(argc, sz)
- all_start = time.time()
- expr = pyrpn.RPNExpr(rnd_expr, argc)
- start_op = time.time()
- rnds = random.choice(rnd_samples)
- for rnd in rnds:
- expr.eval(*rnd)
- time_op += time.time() - start_op
- tot += time.time() - all_start
- if write:
- sys.stderr.write(".")
- sys.stderr.flush()
- if write:
- sys.stderr.write("\n")
- total = time.time() - start
- print("Runned %dK iter on %d expressions in %.2fs" % (max_iter//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)
|