分布式与并行计算


60

我经常听到人们谈论并行计算和分布式计算,但是我给人的印象是两者之间没有明确的界限,人们往往很容易混淆这一点,尽管我相信这是非常不同的:

  • 并行计算与多线程或如何充分利用单个CPU紧密结合。
  • 分布式计算是指分而治之的概念,即在不同的计算机上执行子任务,然后合并结果。

但是,自从我们迈入大数据时代以来,这种区别似乎确实正在消失,并且当今大多数系统都使用并行计算和分布式计算的组合。

我在日常工作中使用的示例是具有Map / Reduce范式的Hadoop,它是一个分布清晰的系统,其工作人员在不同的计算机上执行任务,但也充分利用了每台计算机的并行计算优势。

我想征询一些建议,以了解如何在当今世界中真正实现区分,以及我们是否仍然可以谈论并行计算还是不再存在明显的区分。在我看来,分布式计算在过去几年中增长了很多,而并行计算似乎停滞了,这可能可以解释为什么我听到了更多关于分布式计算而不是并行化的讨论。


5
并行计算不一定意味着单个CPU:有些系统具有多个物理CPU。
svick

2
此外,分布式计算是受限制的划分&征服本身。人们在混淆并发性和并行性方面遇到了更多麻烦。
拉斐尔

1
如果要明确解决分布式计算问题,则需要处理更深层次的失败案例。很多东西只是出于地理原因才分发。一些分布式系统几乎没有并行运行,因为网络中的中央节点是瓶颈。
罗布

Answers:


56

这在某种程度上是术语问题,因此仅要求您和您所交谈的人事先加以澄清。但是,存在与并行性并发性分布式系统更紧密相关的不同主题。

并行性通常与利用多个处理器尽快完成特定计算有关。处理器的规模可以从单个处理器内部的多个算术单元到共享内存的多个处理器,再到在许多计算机上分布计算。在计算模型方面,并行性通常是为了在内部使用多个并行计算线程,以便计算最终结果。并行有时也用于实时 反应系统,该系统包含许多共享一个主时钟的处理器。这样的系统是完全确定的

并发是对具有多个计算线程的计算的研究。并发性往往来自软件的体系结构,而不是硬件的体系结构。可以编写软件来使用并发来利用硬件并行性,但是通常需要在软件的行为中固有,以对不同的异步事件做出反应(例如,独立于用户界面线程工作的计算线程,或做出反应的程序通过切换到中断处理程序线程来处理硬件中断)。

分布式计算研究将通过通信链接连接的处理器分开。并行处理模型通常(但不总是)采用共享内存,而分布式系统从根本上依赖于消息传递。分布式系统本质上是并发的。像并发一样,分发通常是目标的一部分,而不仅仅是解决方案的一部分:如果资源位于地理位置不同的位置,则系统本身就是分布式的。可能导致(处理器节点或通信链路的)部分故障的系统属于此域。


2
好答案。应该强调分布式计算是并行计算的子集。
拉斐尔

6
@Raphael:我认为这不能准确代表两个领域的重点。实际上,它们通常被视为完全独立的领域,因为它们处理的是完全不同的问题。当使用MPI对并行计算机进行编程时,不会真正使自己陷入局部故障,因为在此类计算机中发生这种故障的可能性较小。另一方面,分布式计算更关注诸如部分故障之类的分配问题,而不是关注将每个CPU周期从可用机器中挤出来。
戴夫·克拉克2012年

4
@Raphael相反,分布式计算非常独立于并行计算。在分布式系统的研究中,并行计算通常是无聊的情况(没有有趣的本地资源,没有故障)。
吉尔斯2012年

我是按字面意思使用的;如果条款被盗用并因此产生分歧,那就太糟糕了。
拉斐尔

感谢@Gilles的回答,似乎我对分布式计算有点偏见,很高兴看到有人用适当的术语指代某物!
Charles Menguy 2012年

17

正如@Raphael指出的那样,分布式计算是并行计算的子集;反过来,并行计算是并行计算的子集。

并发是指共享同一时间范围内的资源分配。例如,多个进程共享相同的CPU(或CPU内核)或共享内存或I / O设备。操作系统管理共享资源。多处理器机器和分布式系统是并发控制起着重要作用的体系结构。并发发生在硬件和软件级别。多个设备同时运行,处理器具有内部并行性,并且可以同时处理多个指令,系统具有多个处理器,并且系统通过网络通信进行交互。并发发生在应用程序级别的信号处理,I / O和处理的重叠,通信以及进程之间或同一进程中线程之间的资源共享中。

在同一系统上执行的两个进程(或线程)是可以并发执行的,它们是并发的:进程(线程)共享CPU资源。我喜欢以下定义:在且仅当第二个进程(线程)在第一个进程(线程)尚未终止执行时才开始执行时,在同一系统上执行的两个进程(线程)才是并发的。

当进程(或线程)在不同的CPU(或同一CPU的内核)上执行时,并发变为并行。在这种情况下,并行性不是“虚拟”,而是“真实”。

当这些CPU属于同一台机器时,我们将计算称为“并行”;当CPU属于不同的计算机时,可能会在地理位置上分散,因此我们将计算称为“分布式”。

因此,分布式计算是并行计算的子集,并行计算是并行计算的子集。

当然,总的来说,并行计算和分布式计算是不同的。并行计算与紧密耦合的应用程序有关,用于实现以下目标之一:

  1. 更快地解决计算密集型问题;
  2. 在相同的时间内解决较大的问题;
  3. 在相同的时间内以更高的精度解决相同尺寸的问题。

Tx5xTxx但使用更复杂的模型,更多的方程式,变量和约束条件,则具有更高的准确性)。并行计算可以使用共享内存,消息传递或两者(例如,使用OpenMP的共享内存节点,使用MPI的消息传递节点);它也可能使用GPU加速器。由于应用程序在一台并行超级计算机上运行,​​因此我们通常不考虑诸如故障,网络分区等问题,因为从实际的角度来看,这些事件的可能性接近于零。但是,诸如气候变化模拟之类的大型并行应用程序可能会运行数月,通常会遇到故障,因此应使用检查点/重新启动机制来避免出现问题时从头开始重新进行模拟。

分布式计算与松散耦合的应用程序相关,其中(分布式超级计算)的目标是解决其他问题,否则问题可能太大,或者其执行可能会分散在不同的组件上,这可能会受益于在不同体系结构上的执行。有多种模型,包括客户端服务器,对等网络等。在设计时必须考虑分布式计算中出现的问题,例如安全性,故障,网络分区等,因为在这种情况下,故障是规则和原则。也不例外。

最后,网格计算都是分布式计算的子集。网格计算范式作为一种新领域而出现,它不同于传统的分布式计算,因为它专注于大规模资源共享和创新的高性能应用程序。共享的资源通常属于多个不同的管理域(所谓的虚拟组织)。在过去的十年中,网格计算虽然被科学家大量使用,但传统上对于普通用户而言却很困难。云计算试图通过允许普通用户利用虚拟机轻松利用位于同一数据中心同一位置且不在地理上分散的多台计算机来弥合差距可以由用户组装以运行其应用程序。由于硬件的原因,特别是通常缺乏高性能网络互连(例如Infiniband等),云并不是运行并行MPI应用程序的目标。通常将在云上运行的分布式应用程序实施为利用Map / Reduce范式。顺便说一下,许多人将Map / reduce视为并行数据流模型。


2
我认为这个答案有点误导;它专注于分布式高性能计算(实际上与并行高性能计算密切相关),而分布式计算的整个领域则要广泛得多。
Jukka Suomela'5

我不同意:答案还包括分布式高性能计算,而分布式高性能计算通常不包括在分布式计算中。确实,我讨论了客户端-服务器和对等模型,安全性,故障和网络分区问题,这些都是分布式计算的领域。
马西莫卡法罗

+1。很好的答复!我想知道分布式计算是否用于并行计算以外的目的?换句话说,分布式计算是否是并行计算的子集,即分布式计算是否属于并行计算?顺便说一句,这是我的问题cs.stackexchange.com/questions/20064
蒂姆

1
即时地,分布式计算本身也被使用,与并行计算无关。想想看,例如,经典的分布式算法,如领导人选举,协商等
马西莫卡法洛

7

我不确定我是否理解这个问题。并行处理和分布式处理之间的区别仍然存在。可以在同一计算中同时利用两者的事实并没有改变概念的含义。

而且我不知道您正在关注什么新闻,但是我很确定并行处理不会停滞,尤其是因为我认为并行处理的作用更多。

如果您需要处理TB级的数据,则必须采用分布式计算(可能与并行计算结合)。但是,如果您需要在台式机或智能手机上进行计算,则考虑到互联网连接可能并不总是可用的,并且可能会很慢,因此单独使用并行计算可能会为您带来最佳效果。


-1,因为此答案并未真正回答问题(即,解释术语)。
Jukka Suomela'5

@JukkaSuomela,问题不在于解释术语,而是它们之间的区别。
svick'5

6

这是值得阅读的最新论文:

Michel Raynal:“并行计算与分布式计算:巨大的困惑?” ,过程。2015年欧洲标准杆doi:10.1007 / 978-3-319-27308-2_4

抽象:

这篇简短的职位论文讨论了这样一个事实,即从教学的角度来看,并行性和分布式计算经常被混淆,而从深层次的本质来看,它们解决的是基本的问题。因此,应针对每个课程分别设计适当的课程。“一切皆有(互惠)”的态度似乎并不是一种教学方法,它可以教学生一方面具有并行性,另一方面具有分布式计算的重要概念。


4

在本书的“简介”部分[1]中,作者提供了关于分布式计算和并行计算之间比较的另一种观点(与其他答案中的观点不同)。

广义上讲,并行处理的目标是采用所有处理器来执行一项大型任务。相反,分布式系统中的每个处理器通常都有自己的半独立议程,但是由于各种原因,包括资源共享,可用性和容错能力,处理器需要协调其动作。

从这个角度来看,Map / Reduce范式主要属于并行计算上下文。但是,如果我们希望所涉及的节点通过使用例如Paxos(wiki)算法就共同的领导者达成共识,那么我们正在考虑分布式计算中的一个典型问题。

[1]分布式计算。基本原理,模拟和高级主题。Hagit Attiya和Jennifer Welch。2004年。


0

这里有更合适的答案。基本上parallel是指,memory-shared multiprocessor而是distributed指其private-memory multicomputers。也就是说,第一个是单个多核或超标量机器,而另一个是地理上分散的计算机网络。后者意味着更少的耦合,从而以降低性能为代价提高可用性和容错能力。之所以会遭受性能下降,是因为您需要在每次往返过程中进行数据(反)序列化,并且需要在更长的距离内进行传递,而您只需引用一个内存中的对象将其传递给并行处理器中的另一个CPU。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.