Answers:
有许多模型可供选择,但其中最突出的是:
上个月在DIMACS上举办了一个有关该主题的研讨会:仔细阅读摘要将为您提供更多指导。
对于此答案的博客文章格式,我事先表示歉意。我不由自己概述一下并行计算世界。
您可以将并行编程模型大致分为两类:控制流模型和数据流模型。
该控制流模型尽量做到明确的控制程序的环境中并行工作,基本上每个可编程计算机今天。解决的根本问题是,这种“冯·诺依曼体系结构”不是为并行执行而设计的,而是为高效的顺序计算而设计的。在这种情况下,并行性是通过复制部分基本模块(内存,控制,算术)获得的。
仅重复算术运算即可获得SIMD指令,所有ALU共享相同的程序计数器(PC),因此即使对不同的数据也始终并行执行相同的操作。
复制ALU和PC,但将指令排序器保留在控制单元中会给您带来乱序(OoO)执行,从而产生一些流水线并行性。在此类别中,您还具有超长指令字(VLWI)和分支预测技术。但是,您很少在软件级别上看到此类别。
更进一步的做法是复制整个“核心”,但保持内存共享,这些是当前为您提供任务(或线程)并行性的多核处理器。在这种情况下共享内存给您带来非常非常棘手的细微并发问题。因此,当前多核上的并行计算完全围绕同步/并发问题,性能(无同步)和所需语义(完全同步,顺序执行语义)的谨慎平衡进行。例如,PRAM或近来流行的Cilk射击,例如fork / join(IntelTBB,Java.Utils.Concurrency)。CSP和Actor模型是并发模型,但是如上所述,并发和并行性在共享内存环境中变得模糊。nb并行性是为了提高性能,并发性保持正确的语义。
复制内存也可以使您使用MPI及其同类软件进行编程的联网计算机,或者只是奇怪的非冯诺依曼体系结构,例如片上网络处理器(云处理器,Transputer,Tilera)。内存模型(例如UMA或NUMA)试图维持共享内存的错觉,并且可以存在于软件或硬件级别。MPI保持程序级别的并行性,并且仅通过消息传递进行通信。消息传递还用于硬件级别的通信和并发(Transputer)。
第二类是数据流模型。这些是在计算机时代的曙光中设计的,它是一种记录和执行并行计算的方法,从而避免了冯·诺依曼(Von Neumann)的设计。到了80年代,这些性能已经不再流行(对于并行计算),而后继性能则呈指数增长。但是,实际上许多并行编程系统(例如Google MapReduce,Microsoft的Dryad或Intel的Concurrent Collections)都是数据流计算模型。在某些时候,它们将计算表示为图形,并以此来指导执行。
通过指定模型的各个部分,您可以获得数据流模型的不同类别和语义。您将图形的形状限制为什么:DAG(CnC,Dryad),树(mapreduce),有向图?是否有严格的同步语义(光泽),反应式编程]?您是否不允许递归具有静态计划(StreaMIT),或者通过具有动态计划程序(Intel CnC)提供更多的表达能力?传入或传出边缘的数量是否有限制?当输入数据的子集可用时,触发语义是否允许触发节点?是边缘数据流(流处理)还是单个数据令牌(静态/动态单个分配)。对于相关工作,您可以先查看Arvind,K. Kavi,j。等人的数据流研究工作。Sharp,W。Ackerman,R.Jagannathan等
编辑:为了完整性。我应该指出,还有并行的归约驱动模型和模式驱动模型。对于约简策略,您大致具有图约简和字符串约简。Haskell基本上使用图归约,这是一种在顺序共享内存系统上非常有效的策略。减少字符串的重复项可以工作,但是具有私有内存属性,使其更适合隐式并行化。模式驱动的模型是并行逻辑语言,例如并发序言。Actor模型也是模式驱动的模型,但是具有私有内存特性。
PS。我广泛使用“模型”一词,涵盖用于正式和编程目的的抽象机。
对于消息传递体系结构,一个与BSP十分相似但更易于处理且性能分析接近于真实计算机上的模型的模型肯定是CGM或粗粒度多计算机。它是由Frank Dehne提出的,您会发现许多有趣的论文,介绍了在这种情况下开发的算法。
CGM适合假设p个处理器的粗粒度架构,每个处理器具有O(n / p)个本地内存,并且输入n的大小比p大得多(相差几个数量级),即p≪n。因此,该模型在当前架构上的映射比其他映射要好得多。它已经被广泛研究。该模型基于以下假设:(i)算法执行所谓的超级步骤,包括一个阶段的本地计算和一个阶段的中间屏障同步的处理器间通信,(ii)所有p个处理器都可以访问O(n / p)个本地内存,(iii)在每个超级步骤中,处理器最多可以发送和接收O(n / p)个元素,并且(iv)处理器之间的通信网络可以是任意的。在该模型中,通过计算时间和通信回合数对算法进行评估。尽管该模型很简单,但是可以为并行算法的实际性能提供合理的预测。实际上,用于CGM的并行算法通常在理论上的复杂度分析非常接近在实现和基准测试时通过实验确定的实际时间。
并行外部存储器(PEM)是PRAM样式的共享存储计算机与外部存储器模型的自然结合。它专注于专用缓存的含义。
据我所知,BSP和LogP模型如今已用于分布式算法。同样,由于采用了GPU计算,PRAM再次变得流行,但是在分析中应该包括存储器层次结构。您可以检查UPMH模型(统一并行存储器层次结构),该模型很好地补充了PRAM。
B. Alpern,L。Carter,E。Feig和T. Selker。统一内存层次模型的计算。Algorithmica,12:72-109,1994。10.1007 / BF01185206。
Bowen Alpern,Larry Carter和Jeanne Ferrante。将并行计算机建模为内存层次结构。在In Proc。《大规模并行计算机的编程模型》,第116–123页。IEEE计算机协会出版社,1993年。
对于GPU计算,也有人提出了一种理论计算模型的建议。K模型:
Gabriele Capannini,Fabrizio Silvestri和Ranieri Baraglia。K模型:用于流处理器的新计算模型。在2010年IEEE第12届国际高性能计算和通信国际会议论文集中,HPCC '10,第239-246页,华盛顿特区,美国,2010年。IEEE计算机学会。
最后,我已经看到将蜂窝自动机(CA)建模为并行计算机,我个人认为这是一个非常有趣的研究主题。谁知道未来的处理器将以这种方式制造,就像很小的计算空间一样。我对此没有可靠的参考,您可以在网上查看。
纯函数程序允许并行执行独立的表达式。因此,我将它们视为并行计算模型。
我更喜欢Bader-Jaja方法(请参阅第2.1节)。您将复杂性建模为消息传递问题。对于每个发送的消息,既有用于启动通信的等待时间的变量,也有带宽的变量。
您特别提到了云计算。出现了与这一领域短短几年激烈的创新之内亚马逊的弹性计算云,在谷歌应用程序引擎和各种工具及其相关概念并行处理“模式”。
特殊的开放源代码工具包括Google的Mapreduce,Apache Hadoop和NoSQL数据库,它们已成为并行化算法“最佳实践”和“设计模式”中新的,强大的,广泛适应的标准。此外,memcacheD越来越多地用作内存中的分布式数据库。最近的一篇论文[1]中描述了Facebook使用的一个例子。
[1] Berezecki等人的许多核心键值存储
另一个角度。诚然,有些人可能认为这有些晦涩难懂,但有一些工作以一般方式并行化概率算法,这些算法被认为在某种程度上自然适用于并行性。
参见例如 工作站集群上的并行概率计算 Radenski,Vann,Norris:
概率算法是用于解决棘手问题的计算密集型近似方法。概率算法是集群计算的极佳候选者,因为它们需要很少的通信和同步。可以将公共并行控制结构指定 为概率群集计算的通用算法。 可以将此类通用并行算法与特定于域的顺序算法粘合在一起,以得出针对不同棘手问题的近似并行解决方案。在本文中,我们提出了一种用于在工作站集群上进行概率计算的通用算法。我们使用这种通用算法来导出针对两个离散优化问题的特定并行算法:背包问题和旅行商问题。
在不清楚的情况下,与概率计算以及整体转换一起称为“通用并行控制结构作为通用算法”的就是“模型”。
可以说概率计算不是严格的经典计算或图灵完备的。因此请注意,将经典与概率计算联系在一起也有一些工作,特别是在并行环境中,例如
在算法的设计和分析中使用随机化可以解决困难的问题,而某些问题可能没有确定性的解决方案,因此可以使用简单有效的算法。简单性,效率和可解性的这种提高导致了对算法的绝对正确性的传统概念的权衡,从而获得了更为定量的概念:概率为0到1的正确性。随机化的思想使得关于概率并行程序的推理变得更加曲折和困难。在本文中,我们解决了确定和推导具有确定性或概率为1的概率并行程序的属性的问题。
当然,QM计算与概率计算高度相似(强调这一点的一个很好的参考文献是Fortnow的《一个复杂性理论家的量子计算观点》),并且有一些暗示,这些方法可能会在那里扩展,例如在并行QM模拟中。
有些人会认为这是有争议的,甚至这个角度的支持者在研究的早期阶段也必须承认这一点,但是基本上量子计算似乎与并行性和并行计算有很多联系。这些参考文献目前分散,但是一个坚定的研究人员可以看到一个新兴的主题。
也许最好的联系是与格罗弗斯搜索算法有关,该算法最近被证明在一般意义上可用于加快大多数NP完整问题的速度[5]。Grovers算法似乎与并行数据库搜索算法有很强的类比/联系。最好的经典串行算法不能达到相同的性能,但是最近至少有一个权威人士认为,搜索的QM方法实际上并不比并行化经典算法好。[1]
进一步的证据是在量子搜索中明确考虑并行性的方案,例如[2]。还提出了基于并行/分布式处理的量子模拟器[3] [4],并且由于该方案非常适合并导致有效且易于处理的模拟(参考文献[3]中模拟了30量子比特),因此这种转换当然,这不仅是巧合,而且表明了并行经典计算和QM计算之间更深的桥梁,但到目前为止可能还没有发现。
[1] 量子搜索实用吗?由Viamontes等人撰写
[2] Wu / Dian提出的基于平行unit判别方案的精确量子搜索
[3] Niwa,Matsumoto,Imai的量子计算通用并行模拟器。
[4] Beals et al 2012的高效分布式量子计算