我编写了一些函数来对函数/代码段进行基准测试。我是这样做的:
start = timer
for(1 second)
call fun
iterations++
stop = timer然后我有一个平均(平均)时间:(停止-开始/迭代),对吗?
单个调用太‘短’而无法测量,那么我如何从这种类型的测量中进行计算,std dev,quartile,等等?
发布于 2013-08-29 23:10:28
标准差和四分位数都处理组中值的分布。
只有一种衡量标准,这些就变得微不足道或毫无意义。因为只有一个测量值,所以该值是平均值、最小值、最大值和模式。由于所有测量值都没有偏离平均值,因此方差和标准差为零。
发布于 2013-08-29 23:13:13
你必须找到一种足够精确地测量时间的方法。您将需要对fun进行单独调用的时间,以便获得任何有意义的标准差等。
This question可能包含有用的提示,我相信也有相当多特定于平台的高精度计时器。
发布于 2013-08-30 04:04:06
通常,由于处理速度和获取微秒和毫秒级分辨率的困难,大多数性能测量都是基于大量迭代。
例如:
持续时间是结束时间-开始时间。平均执行时间是持续时间除以迭代次数。
使用平均时间还有其他原因:操作系统中断,数据缓存未命中,可能还有外部因素(如硬盘访问)。
为了更精确的测量,你必须使用一个“测试点”和一个示波器。在迭代之前将高脉冲写入测试点,然后写入低脉冲。设置示波器以捕获持续时间。如果您的示波器具有统计功能和存储,请将测试点写入移动到函数执行之前和之后。
https://stackoverflow.com/questions/18514489
复制相似问题