Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1""" 

2Tools to help benchmarking. 

3""" 

4from timeit import Timer 

5import numpy 

6 

7 

8def measure_time(stmt, context, repeat=10, number=50, div_by_number=False): 

9 """ 

10 Measures a statement and returns the results as a dictionary. 

11 

12 :param stmt: string 

13 :param context: variable to know in a dictionary 

14 :param repeat: average over *repeat* experiment 

15 :param number: number of executions in one row 

16 :param div_by_number: divide by the number of executions 

17 :return: dictionary 

18 

19 .. runpython:: 

20 :showcode: 

21 

22 from onnxcustom.utils import measure_time 

23 from math import cos 

24 

25 res = measure_time("cos(x)", context=dict(cos=cos, x=5.)) 

26 print(res) 

27 

28 See `Timer.repeat <https://docs.python.org/3/library/ 

29 timeit.html?timeit.Timer.repeat>`_ 

30 for a better understanding of parameter *repeat* and *number*. 

31 The function returns a duration corresponding to 

32 *number* times the execution of the main statement. 

33 """ 

34 tim = Timer(stmt, globals=context) 

35 res = numpy.array(tim.repeat(repeat=repeat, number=number)) 

36 if div_by_number: 

37 res /= number 

38 mean = numpy.mean(res) 

39 dev = numpy.mean(res ** 2) 

40 dev = (dev - mean**2) ** 0.5 

41 mes = dict(average=mean, deviation=dev, min_exec=numpy.min(res), 

42 max_exec=numpy.max(res), repeat=repeat, number=number) 

43 return mes