Merge branch 'master' of github.com:billzorn/sfpy
[sfpy.git] / timing.py
1 """Some basic performance tests for the wrapper class"""
2
3 import timeit
4
5
6 def ops_sec(stmt, setup):
7 # print('----')
8 # print(setup)
9 print('-- timing: --')
10 print(stmt)
11 print('----')
12
13 timer = timeit.Timer(stmt, setup)
14 iters, time = timer.autorange()
15
16 rate = iters/time
17 if rate > 1000000000:
18 erate = rate / 1000000000
19 unit = 'Gops'
20 elif rate > 1000000:
21 erate = rate / 1000000
22 unit = 'Mops'
23 elif rate > 1000:
24 erate = rate / 1000
25 unit = 'kops'
26 else:
27 erate = rate
28 unit = 'ops'
29
30 print('{} ops, {} s, {} {}/s\n'.format(iters, time, erate, unit))
31
32
33 setup = """import sfpy
34 P8 = sfpy.Posit8
35 Q8 = sfpy.Quire8
36 a = P8(1.3)
37 b = P8(-0.5)
38 c = P8(15.0)
39 q = Q8()
40 zero = 0.0
41 """
42
43 ops_sec('pass', setup)
44 ops_sec('P8(0)', setup)
45 ops_sec('P8("0")', setup)
46 ops_sec('P8.from_bits(0)', setup)
47
48 ops_sec('1.1 + 2', setup)
49 ops_sec('a + b', setup)
50 ops_sec('a.add(b)', setup)
51 ops_sec('zero += 1', setup)
52 ops_sec('a += b', setup)
53 ops_sec('a.iadd(b)', setup)
54
55 ops_sec('q.fdp_add(b, c)', setup)