MPI與OpenMP並行程式設計

2021-10-25 08:58:56 字數 1361 閱讀 7933

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最大的缺點是只能在單台主機上工作,不能用於多台主機間的平行計算!

MPI並行程式設計

了解並熟悉mpi並行程式開發環境,學會並行程式編譯方法,並行程式作業提交方法,並行程式執行狀態觀察與分析方法,本實驗的內容主要包括學習如何編譯執行mpi程式以及通過較簡單的 helloworld.c 程式的實際執行來進一步的熟悉 實驗一,本實驗的內容主要包括學習如何編譯執行mpi程式以及通過較簡單的...

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...

OpenMP並行程式設計(一)

openmp並行程式設計 一 openmp是乙個支援共享儲存並行設計的庫,特別適宜多核cpu上的並行程式設計。今天在雙核cpu機器上試了一下openmp並行程式設計,發現效率方面超出想象,因此寫出來分享給大家。在vc8.0中專案的屬性對話方塊中,左邊框裡的 配置屬性 下的 c c 下的 語言 頁裡,...