游客

走出并行计算的误区,你应该在什么时候用它?

游客 2017-04-27 17:01:59    201193 次浏览

走出并行计算的误区,你应该在什么时候用它?

本文为 Salesforce 知名数据科学家、机器学习工程师 Anmol Rajpurohit 对开发者的建议。对算法进行并行处理,是业内常见的加速方式,但不少开发者对它的认识存在误区。因此,Anmol Rajpurohit 用本文向大家说明,到底什么时候才应该并行执行代码、以及它的前提是什么。

走出并行计算的误区,你应该在什么时候用它?

Anmol Rajpurohit

Anmol Rajpurohit :当一件任务能被分割为多个独立处理(不必进行信息沟通与资源共享)的子任务,并行执行会是一个绝佳选择。

即便这样,效率,即如何高效地执行,仍是一个关键问题。这关乎能否真正实现并行化理论上的优点。

实际情况中,绝大多数代码都有需要串行执行的部分。可并行的子任务,也需要某种形式的数据传输同步。因此,相比串行而言,预测并行化到底能否让算法运行地更快是一件十分困难的事。

相比按序处理任务所需要的计算周期,并行执行总是有额外代价——起码包含把任务分割为子任务,以及把它们的结果整合起来。并行计算相比串行的性能,在很大程度上是由一个因素决定的:上述额外步骤耗费的时间,与并行执行节省的时间这两者之间的差。

值得注意的是,并行化的带来的额外步骤并不局限于代码运行之时,还包括编写并行计算代码所需的额外时间,以及修复漏洞(并行 vs. 串行)。

有一项评估并行化表现的理论方法广为人知——Amdahl’s law。它用下面的公式来度量并行执行子任务带来的加速(多处理器) vs. 串行运行(单个处理器):

走出并行计算的误区,你应该在什么时候用它?

  • Slatency 是执行整个任务的理论加速;

  • s 是任务里受益于额外系统资源那部分的加速;

  • p 是受益于额外系统资源那部分所占的执行时间的比例。

为认识到 Amdahl’s Law 的意义,请看下面的图表。它展示了不同处理器核心数对应的理论加速。当然,这是基于所执行的任务所能达到的不同并行化程度。

走出并行计算的误区,你应该在什么时候用它?

有一件事雷锋网需要提醒诸位:并不是所有代码都能被高效地并行。能在多处理器核心上实现理论上的加速水平,这样的代码可谓是凤毛麟角。这是由于串行部分、内部信息交换成本等天然限制。通常,大型数据集才是并行执行的理想情形。但开发者不应该摄像并行化能带来性能提升,而应该在搞并行化之前,先在任务的子集上对并行和串行谁优谁劣做一个比较。

via kdnuggets

内容加载中