我有一个具有顺序和并行变体的随机程序。该程序的本质是它的运行时间根据它的“运气”而变化很大。它通常以看似几何分布的模式在 1 秒到 2 分钟之间取值。并行变体显示出具有不同数字的类似行为。
在这种情况下,衡量并行加速的“好”方法是什么?我有可能只使用测量值的平均值/中值作为“运行时间”的代表
我将如何解释这种方法,是否有(统计/数学)更好的方法来计算加速?
编辑:感谢 user3666197,它指出了获得良好数据所必需的一些非常重要的技术细节。我已经完成了这项作业,并想澄清我的问题。
我使我的基准测试过程尽可能可靠:
- 基准测试是用种子运行的,结果是可重现的。
- 每个配置都在脚本中使用不同的种子重复多次(~400 次)
我的问题仍然存在:如何计算该程序的加速比。
我做了什么:
平均顺序运行时间约为 8.38,中位数为 4.8,这是一个很大的差异。对于 2 个线程,平均运行时间为 4.36,而中值运行时间为 2.42。如果我将顺序除以并行,我会得到 1.92(平均值)和 1.992(中值)的加速。对于 4 个线程类似:意味着:2.25 运行时间和 3.72 加速,中位数:1.12 中位数和 4.3 加速(超线性)。8 个线程存在类似的数字。
我尝试以不同的方式可视化数据。情节
直方图显示了使用各种线程的运行时间分布,右侧的箱线图也是如此。可以看出一些加速是可见的。
如果我根据种子对测量值进行配对,我会得到成对的时间:顺序时间和并行时间。我的第一个想法是通过计算回归线的斜率来计算加速,但是,回归线似乎没有正确“总结”数据并且价值有限。在右下角的图中,只显示了 4 个线程的点。