我试图测量一个小函数的cpu时间,这个函数通常需要1500微秒。我有时得到不准确或广泛的置信区间。我想找到在python3.7中对函数进行基准测试的最准确的方法。我想测量函数time+获取其他计算的返回值。你知道吗
我试着从timeit中取消计时器,请看下面的代码。你知道吗
from timeit import default_timer as timer
times=[] # store the times for 100 runs,then get min,max,averages etc
for i in range (100):
t1= timer()
x,y,z = apply_message(s,text)
t2= timer()
execution_time= (t2-t1) * 1000000 # convert it to microsecond
times+=[execution_time]
我发现有时最低1300,最高75000,差别很大。在其他情况下,他们很接近。我想看到的结果,至少给我95置信区间小于10%的平均值。你知道吗
如果(例如)您的进程在执行期间被迁移到另一个CPU,那么获取异常值是正常的。(所以所有的内存访问都会在缓存中丢失一段时间,因为上一个内核上的L1d和L2都很热)。这在现实生活中也可能发生。你知道吗
所以你必须决定你想要测量的是什么:正常的,没有奇怪发生的情况,或者包括最坏情况在内的完全分布。你知道吗
如果你保留这些异常值,那绝对不是高斯正态分布,所以如果它们是基于这个假设的话,那就拿任何统计数字来说吧!你知道吗
如果要排除异常值,请固定CPU频率,并将进程固定到单个核心。但是,当中断处理程序或其他内核任务在该内核上做了大量工作,或出现页面错误或其他任何情况时,仍然可以得到异常值。你知道吗
或者在具有超线程的CPU上,如果另一个线程在共享同一物理内核的同级逻辑内核上运行。或者同一台机器上的另一个任务争夺共享资源,如内存带宽、缓存占用或磁盘I/O
如果您对函数的作用以及Python如何运行函数有足够的了解,可以合理地确定异常值不是“真实的”,也就是说,您的进程在大部分时间都没有CPU,或者发生了CPU迁移,那么您就可以丢弃高于某个阈值的异常值。你知道吗
或查看时间中位数而不是平均值。中位数对巨大的异常值不敏感,但仍会对变化作出反应。你知道吗
如果重复使用相同的输入计时,因此希望函数占用相同的时间,则可以使用最小值。(通常基本上等于中间值。)
相关问题 更多 >
编程相关推荐