内容简介:Measuring code execution times is hard. Learn how to eliminate systematic and random measurement errors and obtain more reliable results.We often need to measure how long a specific part of code takes to execute. Unfortunately, simply measuring the system
Measuring code execution times is hard. Learn how to eliminate systematic and random measurement errors and obtain more reliable results.
We often need to measure how long a specific part of code takes to execute. Unfortunately, simply measuring the system time before and after a function call is not very robust and susceptible to systematic and random measurement errors. This is especially true for measuring very short intervals (< 100 milliseconds).
Systematic and Random Errors
So what is wrong with the following way of measuring?
time_start = time.time() my_function() time_end = time.time() execution_time = time_end - time_start
First, there is a systematic error : by invoking time.time() , an unknown amount of time is added to the execution time of my_function() . How much time? This depends on the OS, the particular implementation and other uncontrollable factors.
Second, there is a random error : the execution time of the call to my_function() will vary to a certain degree.
We can combat the random error by just performing multiple measurements and taking the average of those. However, it is much more challenging to remove the systematic error.
Straight Line Fitting
Carlos Moreno and Sebastian Fischmeister presented a novel technique to combat this systematic error. The basic idea is to first measure the time of one function call, then the time of two , then the time of three, and so on. The resulting method may look like this:
time_1 = time.time() my_function() time_2 = time.time() my_function() my_function() time_3 = time.time() my_function() my_function() my_function() time_4 = time.time() # ...
You can then fit a straight line through the measurements:
The overall execution time can then be obtained by taking the slope a from the straight line y = a x + b .
In the above example, the straight line is y = 205.91 x + 29.56 ; therefore, the execution time equals 205.91 milliseconds.
The authors note that this type of measurement is very robust against occasional measurements with large errors. This can be visualized by artificially changing the 4th measurement and rerunning the line fitting process:
Even though one value is completely off, the resulting slope (201.15) is still very close to the previously measured value.
To learn more about the mathematical basics of this method, I invite you to read the original paper: https://uwaterloo.ca/embedded-software-group/sites/ca.embedded-software-group/files/uploads/files/ieee-esl-precise-measurements.pdf
Python Implementation
You can find my implementation of the presented algorithm in my public GitLab repository:
https://gitlab.com/bernhard.knasmueller/accurate-time-measurements-python
All credit for the algorithm and the idea goes to Moreno and Fischmeister.
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Docker从入门到实战
黄靖钧 / 机械工业出版社 / 2017-6 / 69.00元
本书从Docker的相关概念与基础知识讲起,结合实际应用,通过不同开发环境的实战例子,详细介绍了Docker的基础知识与进阶实战的相关内容,以引领读者快速入门并提高。 本书共19章,分3篇。第1篇容器技术与Docker概念,涵盖的内容有容器技术、Docker简介、安装Docker等。第2篇Docker基础知识,涵盖的内容有Docker基础、Docker镜像、Dockerfile文件、Dock......一起来看看 《Docker从入门到实战》 这本书的介绍吧!