几种并行模型比较

广义上讲,并行可以分为几类,1. 共享内存并行(明确的线程,比如Pthreads和Java threads);2.共享内存并行(任务/数据的并行,比如OpenMP); 2. 分布式并行(明确的通信,比如MPI, SHMEM, 和Global Arrays); 3. 分布式并行(特殊的全局访问,比如Co-Array Fortran, UPC)。

具体说来,

Pthreads 是一个共享内存的编程模型,并行化通过并行调用函数来实现。一个并行函数体被多个线程同步的执行,这些线程都可以访问共享的全局数据。Pthreads是许多并行模型的底层实现。

Java是一个通用的编程语言,它通过线程的形式来支持并行化。并行Java程序运行在共享内存处理器上,它非常类似于Pthreads程序。Pthreads和Java仅仅在共享内存处理器上存在。

OpenMP也是共享内存模型,它的并行化是通过为循环和函数定义并行注释(parallel directives)来实现。OpenMP注释可以指出哪些循环部分可以并行执行,以及可以并行起来的函数。其它的一些注释用于指出针对某一进程的共享或私有的数据。编译器可以将OpenMP程序翻译成像Pthreads一样的程序,其中并行的循环体都会被翻译成并行函数的形式。OpenMP是一个工业标准的并行化库,被多种语言和平台所支持。OpenMP目前仅仅应用于共享内存处理器。

MPI是分布式内存模型,其线程需要明确的进行通信,这些通信基于MPI运行时库来发送和接受数据。MPI被广泛采纳,任何并行平台都能找到它。它的性能也已经被调优。尽管需要一定的编程才能实现,MPI由于其可移植性和性能表现,是目前最受欢迎的并行模式。

许多科学应用具有非常规则的内存访问模式,因此可以很容易的并行起来。三种典型的应用是,1. 不规则的表访问,涉及到许多并行数据库操作;2.不规则的动态访问,涉及到稀疏的数据结构,比如共轭梯度法求n阶稀疏矩阵的主特征值;3. 内存排序 in-memory sorting。

来源:

Evaluating the Imapct of Programming Language Features on the Performance of Parallel Applications on Cluster Architectures (by Konstantin Berlin, et al.)

原创文章,作者:carmelaweatherly,如若转载,请注明出处:https://blog.ytso.com/191007.html

(0)
上一篇 2021年11月14日
下一篇 2021年11月14日

相关推荐

发表回复

登录后才能评论