几种并行模型比较
2016-04-17 07:05
260 查看
广义上讲,并行可以分为几类,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.)
具体说来,
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.)
相关文章推荐
- LeetCode 83. Remove Duplicates from Sorted List
- 台灣VR內容產業聯盟_技術推廣中心
- 爬虫的道魔策略
- 调试技巧--Windows端口号是否被占用
- iOS aotoresizing的基本使用
- AD(Alitium Designer)中ROOM的使用
- iOS autolayout 的基本使用(用代码添加约束)
- LeetCode 202. Happy Number
- AltiumDesigner学习笔记
- 152. Maximum Product Subarray
- Android学习(25) -- 单元测试(JUnit Test)
- 循环冗余码校验
- 系统的可靠性计算
- LeetCode 300. Longest Increasing Subsequence(最长递增子序列)
- Castle中AdditionalInterfaces用法介绍
- 汉字区位码、国标码(交换码)和机内码转换方法
- Python爬虫利器requests详解
- 内存计算例题
- 三和韓長庚 著 易學原理總論 對讀 141-152
- 每日开源新闻速递(2016/4/17):不需要浏览器插件就可以运行 Skype 了