module numbers.speed_measure

Short summary

module cpyquickhelper.numbers.speed_measure

Measures speed.

source on GitHub

Functions

function

truncated documentation

_fcts

Returns functions to measure.

check_speed

Prints out some information about speed computation of this laptop. See Measures branching in C++ from python to compare.

measure_time

Measures a statement and returns the results as a dictionary.

Documentation

Measures speed.

source on GitHub

cpyquickhelper.numbers.speed_measure._fcts()

Returns functions to measure.

source on GitHub

cpyquickhelper.numbers.speed_measure.check_speed(dims=[100000], repeat=10, number=50, fLOG=<built-in function print>)

Prints out some information about speed computation of this laptop. See Measures branching in C++ from python to compare.

Parameters:
  • dims – sets of dimensions to try

  • repeat – average over repeat experiment

  • number – number of execution in one row

  • fLOG – logging function

Returns:

iterator on results

numpy is multithreaded. For an accurate comparison, this needs to be disabled. This can be done by setting environment variable MKL_NUM_THREADS=1 or by running:

import mkl
mkl.set_num_threads(1)

One example of use:

<<<

from cpyquickhelper.numbers import check_speed
res = list(check_speed(dims=[100, 1000]))
import pprint
pprint.pprint(res)

>>>

    {'average': 0.0005079867783933878, 'deviation': 1.1958059516266147e-05, 'min_exec': 0.0004969746805727482, 'max_exec': 0.0005357339978218079, 'repeat': 10, 'number': 50, 'ttime': 0.005079867783933878, 'size': 100, 'name': 'simple_dot'}
    {'average': 0.0008773650042712688, 'deviation': 2.460095791226247e-05, 'min_exec': 0.0008597811684012413, 'max_exec': 0.00093041080981493, 'repeat': 10, 'number': 50, 'ttime': 0.008773650042712688, 'size': 100, 'name': 'c11_dot'}
    {'average': 0.000871432526037097, 'deviation': 9.720581409074041e-06, 'min_exec': 0.0008638119325041771, 'max_exec': 0.0008973707444965839, 'repeat': 10, 'number': 50, 'ttime': 0.00871432526037097, 'size': 100, 'name': 'c11_dot16'}
    {'average': 0.0008696702308952809, 'deviation': 1.4164512492301503e-05, 'min_exec': 0.0008592009544372559, 'max_exec': 0.0009024110622704029, 'repeat': 10, 'number': 50, 'ttime': 0.008696702308952808, 'size': 100, 'name': 'c11_dot16_nofcall'}
    {'average': 0.0008671920280903578, 'deviation': 9.310717305545208e-06, 'min_exec': 0.000860041007399559, 'max_exec': 0.0008909408934414387, 'repeat': 10, 'number': 50, 'ttime': 0.008671920280903578, 'size': 100, 'name': 'c11_dot16_sse'}
    {'average': 0.0005837018601596355, 'deviation': 1.4941351488880551e-05, 'min_exec': 0.0005736537277698517, 'max_exec': 0.0006248429417610168, 'repeat': 10, 'number': 50, 'ttime': 0.0058370186015963554, 'size': 1000, 'name': 'simple_dot'}
    {'average': 0.0012506415136158467, 'deviation': 1.5738742324417163e-05, 'min_exec': 0.0012361970730125904, 'max_exec': 0.0012817573733627796, 'repeat': 10, 'number': 50, 'ttime': 0.012506415136158466, 'size': 1000, 'name': 'c11_dot'}
    {'average': 0.0012711629271507264, 'deviation': 1.552887823677912e-05, 'min_exec': 0.0012576966546475887, 'max_exec': 0.001299785915762186, 'repeat': 10, 'number': 50, 'ttime': 0.012711629271507263, 'size': 1000, 'name': 'c11_dot16'}
    {'average': 0.001252140337601304, 'deviation': 1.3439046487097159e-05, 'min_exec': 0.001241557765752077, 'max_exec': 0.0012872861698269844, 'repeat': 10, 'number': 50, 'ttime': 0.01252140337601304, 'size': 1000, 'name': 'c11_dot16_nofcall'}
    {'average': 0.0012191256042569875, 'deviation': 1.3884920591285533e-05, 'min_exec': 0.0012063579633831978, 'max_exec': 0.0012536379508674145, 'repeat': 10, 'number': 50, 'ttime': 0.012191256042569876, 'size': 1000, 'name': 'c11_dot16_sse'}
    [{'average': 0.0005079867783933878,
      'deviation': 1.1958059516266147e-05,
      'max_exec': 0.0005357339978218079,
      'min_exec': 0.0004969746805727482,
      'name': 'simple_dot',
      'number': 50,
      'repeat': 10,
      'size': 100,
      'ttime': 0.005079867783933878},
     {'average': 0.0008773650042712688,
      'deviation': 2.460095791226247e-05,
      'max_exec': 0.00093041080981493,
      'min_exec': 0.0008597811684012413,
      'name': 'c11_dot',
      'number': 50,
      'repeat': 10,
      'size': 100,
      'ttime': 0.008773650042712688},
     {'average': 0.000871432526037097,
      'deviation': 9.720581409074041e-06,
      'max_exec': 0.0008973707444965839,
      'min_exec': 0.0008638119325041771,
      'name': 'c11_dot16',
      'number': 50,
      'repeat': 10,
      'size': 100,
      'ttime': 0.00871432526037097},
     {'average': 0.0008696702308952809,
      'deviation': 1.4164512492301503e-05,
      'max_exec': 0.0009024110622704029,
      'min_exec': 0.0008592009544372559,
      'name': 'c11_dot16_nofcall',
      'number': 50,
      'repeat': 10,
      'size': 100,
      'ttime': 0.008696702308952808},
     {'average': 0.0008671920280903578,
      'deviation': 9.310717305545208e-06,
      'max_exec': 0.0008909408934414387,
      'min_exec': 0.000860041007399559,
      'name': 'c11_dot16_sse',
      'number': 50,
      'repeat': 10,
      'size': 100,
      'ttime': 0.008671920280903578},
     {'average': 0.0005837018601596355,
      'deviation': 1.4941351488880551e-05,
      'max_exec': 0.0006248429417610168,
      'min_exec': 0.0005736537277698517,
      'name': 'simple_dot',
      'number': 50,
      'repeat': 10,
      'size': 1000,
      'ttime': 0.0058370186015963554},
     {'average': 0.0012506415136158467,
      'deviation': 1.5738742324417163e-05,
      'max_exec': 0.0012817573733627796,
      'min_exec': 0.0012361970730125904,
      'name': 'c11_dot',
      'number': 50,
      'repeat': 10,
      'size': 1000,
      'ttime': 0.012506415136158466},
     {'average': 0.0012711629271507264,
      'deviation': 1.552887823677912e-05,
      'max_exec': 0.001299785915762186,
      'min_exec': 0.0012576966546475887,
      'name': 'c11_dot16',
      'number': 50,
      'repeat': 10,
      'size': 1000,
      'ttime': 0.012711629271507263},
     {'average': 0.001252140337601304,
      'deviation': 1.3439046487097159e-05,
      'max_exec': 0.0012872861698269844,
      'min_exec': 0.001241557765752077,
      'name': 'c11_dot16_nofcall',
      'number': 50,
      'repeat': 10,
      'size': 1000,
      'ttime': 0.01252140337601304},
     {'average': 0.0012191256042569875,
      'deviation': 1.3884920591285533e-05,
      'max_exec': 0.0012536379508674145,
      'min_exec': 0.0012063579633831978,
      'name': 'c11_dot16_sse',
      'number': 50,
      'repeat': 10,
      'size': 1000,
      'ttime': 0.012191256042569876}]

source on GitHub

cpyquickhelper.numbers.speed_measure.measure_time(stmt, context=None, repeat=10, number=50, div_by_number=False, max_time=None)

Measures a statement and returns the results as a dictionary.

Parameters:
  • stmt – string

  • context – variable to know in a dictionary

  • repeat – average over repeat experiment

  • number – number of executions in one row

  • div_by_number – divide by the number of executions

  • max_time – execute the statement until the total goes beyond this time (approximatively), repeat is ignored, div_by_number must be set to True

Returns:

dictionary

<<<

from cpyquickhelper.numbers import measure_time
from math import cos

res = measure_time(lambda: cos(0.5))
print(res)

>>>

    {'average': 2.9025552794337273e-05, 'deviation': 1.3263591317055884e-06, 'min_exec': 2.780882641673088e-05, 'max_exec': 3.282912075519562e-05, 'repeat': 10, 'number': 50, 'ttime': 0.0002902555279433727, 'context_size': 64}

See Timer.repeat for a better understanding of parameter repeat and number. The function returns a duration corresponding to number times the execution of the main statement.

Changed in version 0.4: Parameter max_time was added.

source on GitHub