OpenMP和MPI的区别
1.OpenMP??
OpenMP是一種用于共享內存并行系統的多線程程序設計的庫(Compiler?Directive),特別適合于多核CPU上的并行程序開發設計。它支持的語言包括:C語言、C++、Fortran;不過,用以上這些語言進行程序開發時,并非需要特別關注的地方,因為現如今的大多數編譯器已經支持了OpenMP,例如:Sun?Compiler,GNU?Compiler、Intel?Compiler、Visual?Studio等等。程序員在編程時,只需要在特定的源代碼片段的前面加入OpenMP專用的#pargma?omp預編譯指令,就可以“通知”編譯器將該段程序自動進行并行化處理,并且在必要的時候加入線程同步及通信機制。當編譯器選擇忽略#pargma?omp預處理指令時,或者編譯器不支持OpenMP時,程序又退化為一般的通用串行程序,此時,代碼依然可以正常運作,只是不能利用多線程和多核CPU來加速程序的執行而已。
? ? ? ? OpenMP使得程序員可以把更多的精力投入到并行算法本身,而非其具體實現細節。對基于數據分集的多線程程序設計,它是一個很好的選擇。同時,使用OpenMP也提供了更強的靈活性,可以較容易的適應不同的并行系統配置。線程粒度和負載平衡等是傳統多線程程序設計中的難題,然而,在OpenMP中,OpenMP庫從程序員手中接管了部分這兩方面的工作,從而使得程序員可以更加專注于具體的算法本身,而非如何編程使得代碼在CPU負載平衡和線程粒度方面做出平衡。但是,作為高層抽象,OpenMP并不適合需要復雜的線程間同步和互斥的場合。OpenMP的另一個缺點是不能在非共享內存系統(如計算機集群)上使用。在這樣的系統上,MPI使用較多。
? ? ? ? 標準并行模式執行代碼的基本思想是,程序開始時只有一個主線程,程序中的串行部分都由主線程執行,并行的部分是通過派生其他線程來執行,但是如果并行部分沒有結束時是不會執行串行部分的。這就是標準的并行模式fork/join式并行模式,共享存儲式并行程序就是使用fork/join式并行的,OpenMP亦是如此。
2.MPI
? ? ? ?MPI(MPI是一個標準,有不同的具體實現,比如MPICH等)是多主機聯網協作進行并行計算的工具,當然也可以用于單主機上多核/多CPU的并行計算,不過效率低。它能協調多臺主機間的并行計算,因此并行規模上的可伸縮性很強,能在從個人電腦到世界TOP10的超級計算機上使用。缺點是使用進程間通信的方式協調并行計算,這導致并行效率較低、內存開銷大、不直觀、編程麻煩。
? ? ? ?OpenMP是針對單主機上多核/多CPU并行計算而設計的工具,換句話說,OpenMP更適合單臺計算機共享內存結構上的并行計算。由于使用線程間共享內存的方式協調并行計算,它在多核/多CPU結構上的效率很高、內存開銷小、編程語句簡潔直觀,因此編程容易、編譯器實現也容易(現在最新版的C、C++、Fortran編譯器基本上都內置OpenMP支持)。不過OpenMP最大的缺點是只能在單臺主機上工作,不能用于多臺主機間的并行計算!部分轉載自:http://blog.csdn.net/carson2005/article/details/7604061
總結
以上是生活随笔為你收集整理的OpenMP和MPI的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 核心模块,LINUX核心及核
- 下一篇: 两个sql交集_简单明了的sql基础语句