测量随机算法

时间:2018-03-01 13:01:59

标签: parallel-processing benchmarking parallelism-amdahl

我有一个包含顺序和并行变体的随机程序。该程序的性质是它的运行时间根据其“运气”而大不相同。它通常以看似几何分布的模式在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个线程存在类似的数字。

我尝试以不同的方式可视化数据。 Plots

直方图显示了使用各种线程的运行时分布,右侧的方框图也是如此。可以看到某些加速可见。

如果我根据种子配对测量,我会得到成对的次数:连续和平行时间。 我的第一个想法之一是通过计算回归线的斜率来计算加速,然而,似乎回归线没有正确地“总结”数据并且价值有限。在右下图中,仅显示了4个线程的点。

2 个答案:

答案 0 :(得分:0)

如何衡量并行加速与纯[SERIAL]代码?

始终保持定量和系统性。

这至少意味着:

1)使用所有系统步骤进行受控测试重复性 2)比较苹果与苹果,包括随机发生器的受控种子设置
3)最好,生成所有测试电池作为脚本,自动重复实验
4)记录测试中的性能(总体和局部部分时间)' UUID#-distinguishable logs 5)收集相当于1E + 3~1E + 4个大小的试验群体,而不仅仅是几个单独的试验单位

鉴于您的解决方案已经以纯[[SERIAL]代码执行方式和其他一些[CONCURRENT]甚至[PARALLEL]实现,最精确的步骤是比较端到端结束测试持续时间。

使用单调时钟是很常见的,在~ [us]域中具有优于[TIME]分辨率的单调时钟。

有关内部性的更多详细信息,请最好查看并行加速初始,无约束资源使用公式的 re-formulated Amdahl's Law and the criticism of。< / p>

答案 1 :(得分:0)

我建议您根据足够大的测量值的运算时算术平均值来计算加速比。确保正确传达数字代表的内容。可能很难确保您具有足够大的设置测量值以便以一定的置信度计算正确的平均值,尤其是因为您的样本不是正态分布的。包括有关分配和限制的发现。在计算加速之前,请务必先总结运行时。

有一个很好的paper by Torsten Hoefler and Roberto Belli可以详细介绍您的问题。特别是第2.1.1和3节。