如何解决并行算法运行时测量的统计分析 问题介绍测量运行时间:基本思想测量运行时间:统计分析问题
问题介绍
假设我们有一个在 f(<params>)
核上运行的并行算法 P
而
-
<params>
:算法参数 -
P
:运行的内核数(即线程、内核、处理器)
我们进一步假设 out 实现实际上由三部分组成:
- A - 分配:我们将输入分配给所有处理器
- B - 运行算法:我们运行
f(<params>)
(“在每个处理器上”) - C - 收集:我们收集所有处理器的计算数据
在修正 <params>
和 P
(例如输入大小、处理器数量等)后,算法本身是确定性的,即我们可以为它写下一个精确的 cDAG。
我现在试图回答这个问题:“对于给定的参数集,给定系统的执行时间是多少?”
对于“给定系统”,我的意思是例如“我的电脑”或“大学超级计算机”,因为显然,运行时确实取决于它运行的系统,而且显然系统本身确实引入了不确定性,因为您永远不会真正了解系统的状态。
简而言之:虽然算法可能是确定性的,但运行时测量不是。 (但例如通信测量将是确定性的。)因此我们需要进行适当的统计分析。这就是我不确定的地方。
测量运行时间:基本思想
我们对“B - 运行算法”部分需要多长时间感兴趣。由于该算法实际上在 P
核上运行,我们将对每个核进行测量,从而获得 P
值,我们将这些 P
值称为 P_measurements
。一些内核可能会先于其他内核完成,那么哪个值确实代表了整个算法的运行时间?我认为一个不错的选择是简单地获取花费时间最长的核心的价值,即 max(P_measurements)
。
现在有两件事需要考虑:
- 我们必须重复测量
n
次,因为它是一个不确定的值 - 获得这些
n*P
值后,我们需要知道如何正确总结它们。
(另外一个问题是最终如何传达这些结果,但这不是这个问题的一部分。)
测量运行时间:统计分析
所以这就是我要做的,这也是我非常不确定的部分。
- 我们在每个
f(<params>)
内核上测量P
的运行时间。我们得到P_measurements
- 我们接受
max(P_measurements)
- 我们重复 1. & 2.
n
次,最终得到maxes
。而maxes
是n
值的列表max(P_measurements)
- 我们使用 Q-Q-Plot 检查
maxes
是否正态分布。如果没有,我们将其标准化。我们确实希望它是右偏的。 - 现在我们取
maxes
的中位数。 (如果我们归一化,我们使用归一化的值) - 我们计算标准差、总体均值和 95% 置信区间。
- 我们可能想说所有值都是错误的,例如5% 所以我们检查所有值是否都在总体平均值的 +-5% 之间,即置信区间应该相当“薄”。
- 我们得到了一些不错的运行时测量。
说明: 第 4 步是必要的,因为在第 6 步中计算 CI 使用了 t 分布,并且因为稍后我想测量相同算法的不同实现。所以我必须比较两个值,为此我需要做例如t 检验。因此,我需要确保满足 t 检验的先决条件,即:iid 和正态分布。假设 Iid。
问题
我不确定我所做的在统计上是否合理。特别是第 1-3 步。我不确定我是否可以在这里做那种总结(只取最大值)。我知道我们可能有一个“特别”高的局外人价值,但由于我们只在超级计算机上进行测量,我们可以假设噪声很低,而且由于我们最终采用了中位数,因此任何大纲都不应该有太大影响。
我希望得到好的意见,因为这是一个相当复杂的话题,我很想把它做对。我主要遵循以下论文,我可以推荐:http://spcl.inf.ethz.ch/Teaching/2020-dphpc/hoefler-scientific-benchmarking.pdf
但即使有论文,我也不习惯使用统计分析,因此只想从真正了解这些东西的人那里得到一些意见。 :)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。