【问题标题】:Recommended samples for performance benchmarks?推荐的性能基准样本?
【发布时间】:2015-06-21 01:41:23
【问题描述】:

我正在为我的一些代码编写性能基准测试。这既是为了在我开发/实验时比较我自己的实现,也是为了与“竞争”实现进行比较。我写这些没问题,并且得到可用的结果。

众所周知,更多的样本是一件好事,因为它可以减少错误数据的影响并提供更真实的结果。

那么,如果我正在分析给定的函数/过程/其他任何东西,获得多少样本似乎是合理的?

我目前正在为每个测试做大约 100 万个样本。这些是单独的操作,每个项目的结果很少超过 10 秒,即使在旧笔记本电脑上也是如此。大多数都不到百分之一秒。

【问题讨论】:

    标签: profiling benchmarking performance-testing


    【解决方案1】:

    实际上,更多的样本是否是一件好事并没有得到很好的证实。 这不过是常识。

    我认为您对分析的原因普遍感到困惑,无论目的是衡量性能还是寻找加速。

    为了衡量性能,您根本不需要样本。 您需要的是一个秒表,无论是否在软件中。 如果您的进程运行速度对于秒表的分辨率来说太快,只需运行您的进程 10^3 或 10^6 次,测量它,然后除以该数字。

    如果样本包含行级或指令级调用站点信息,则对调用堆栈进行采样非常有效,可以找到加速比。 您需要多少样品? 好吧,如果你看到它做了一些可以在一个样本上删除的事情,那可能并没有多大意义。 但是,如果您在两个样本上看到它,则估计它花费的时间分数 F 约为 2/N,其中 N 是样本数。 示例:如果您在 10 个样本中看到两次,这意味着它花费了大约 20% 的时间。 一般来说,如果加速要为您节省一小部分时间,则平均需要 2/F 个样本才能看到它两次。 示例:如果要节省 30% 的时间 (F = 0.3),您平均需要 2/0.3 = 6.67 个样本才能看到两次。 当然,如果你看到它超过两次,那就更好了。

    底线,为了找到加速,你不需要很多样本。 您需要检查每个 是否有可以删除的活动。 您不需要将它们组合成“统计数据”(就像大多数分析器所做的那样)。 Many people understand this.

    如果你想要更严谨一点的解释,look here

    【讨论】:

    • 就执行时间而言,每个样本都是来自代码内秒表的计时。对不起,如果我让这似乎不是这种情况。感谢您的澄清。看来我主要是作为一名统计学家来做这件事的。我不知道特定领域的细微差别。
    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多