File: test-pprofile.py

package info (click to toggle)
scalene 1.5.51-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 15,528 kB
  • sloc: cpp: 22,930; python: 13,403; javascript: 11,769; ansic: 817; makefile: 196; sh: 45
file content (44 lines) | stat: -rwxr-xr-x 1,418 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
import time
import argparse

def do_work_fn(x, i):
    return (x >> 2) | (i & x)

def inline_loop(x, its):
    for i in range(its): # 9500000
        x = x | (x >> 2) | (i & x)
    return x

def fn_call_loop(x, its):
    for i in range(its): # 500000):
        x = x | do_work_fn(x, i)
    return x

def main():
    parser = argparse.ArgumentParser(description='Test time breakdown.')
    parser.add_argument('--inline', dest='inline', type=int, default=9500000, help="inline iterations")
    parser.add_argument('--fn_call', dest='fn_call', type=int, default=500000, help="function call iterations")
    args = parser.parse_args()

    x = 0
    start_fn_call = time.perf_counter()
    x = fn_call_loop(x, args.fn_call)
    elapsed_fn_call = time.perf_counter() - start_fn_call
    print(f"elapsed fn call = {elapsed_fn_call}")
    start_inline_loop = time.perf_counter()
    x = inline_loop(x, args.inline)
    elapsed_inline_loop = time.perf_counter() - start_inline_loop
    print(f"elapsed inline loop = {elapsed_inline_loop}")
    print(f"ratio fn_call/total = {100*(elapsed_fn_call/(elapsed_fn_call+elapsed_inline_loop)):.2f}%")
    print(f"ratio inline/total = {100*(elapsed_inline_loop/(elapsed_fn_call+elapsed_inline_loop)):.2f}%")

if __name__ == '__main__':
    main()
#    prof = pprofile.StatisticalProfile()


    #with prof():
    #    main()

    # prof.print_stats()
    # prof.callgrind(sys.stdout)